Stub out Document::syncAnnotScan method.

The PDF specification [1] says:

"
syncAnnotScan guarantees that all annotations will be scanned
by the time this method returns.
(..)
Normally a background task runs that examine every page and
looks for annotations during idle times.
"

The statement details specifically how Acrobat implements
this method.
Although, neither the method itself nor the background scanner
task are implemented in PDFium (as of today, Ago/2016),
not having ::syncAnnotScan at least stubbed out can be considered
harmfull since its absence makes JS acrobat scripts silently
fail when it has a call to it.

Given that, and following a stub-out pattern present in other
methods including ::addAnnot and ::addField, CL provides
a stubbed out implementation of Document::syncAnnotScan.

[1] http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/js_api_reference.pdf

BUG=pdfium:492

Review-Url: https://codereview.chromium.org/2265553002
diff --git a/fpdfsdk/javascript/Document.cpp b/fpdfsdk/javascript/Document.cpp
index 8fb07b0..8fb9ce6 100644
--- a/fpdfsdk/javascript/Document.cpp
+++ b/fpdfsdk/javascript/Document.cpp
@@ -137,6 +137,7 @@
 JS_STATIC_METHOD_ENTRY(removeIcon)
 JS_STATIC_METHOD_ENTRY(saveAs)
 JS_STATIC_METHOD_ENTRY(submitForm)
+JS_STATIC_METHOD_ENTRY(syncAnnotScan)
 JS_STATIC_METHOD_ENTRY(mailDoc)
 END_JS_STATIC_METHOD()
 
@@ -569,6 +570,13 @@
   return TRUE;
 }
 
+FX_BOOL Document::syncAnnotScan(IJS_Context* cc,
+                                const std::vector<CJS_Value>& params,
+                                CJS_Value& vRet,
+                                CFX_WideString& sError) {
+  return TRUE;
+}
+
 FX_BOOL Document::submitForm(IJS_Context* cc,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
diff --git a/fpdfsdk/javascript/Document.h b/fpdfsdk/javascript/Document.h
index 1c20ac4..feef228 100644
--- a/fpdfsdk/javascript/Document.h
+++ b/fpdfsdk/javascript/Document.h
@@ -255,6 +255,10 @@
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
                      CFX_WideString& sError);
+  FX_BOOL syncAnnotScan(IJS_Context* cc,
+                        const std::vector<CJS_Value>& params,
+                        CJS_Value& vRet,
+                        CFX_WideString& sError);
   FX_BOOL mailDoc(IJS_Context* cc,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
@@ -371,6 +375,7 @@
   JS_STATIC_METHOD(resetForm, Document);
   JS_STATIC_METHOD(saveAs, Document);
   JS_STATIC_METHOD(submitForm, Document);
+  JS_STATIC_METHOD(syncAnnotScan, Document);
   JS_STATIC_METHOD(mailDoc, Document);
 };
 
diff --git a/testing/resources/javascript/document_methods.in b/testing/resources/javascript/document_methods.in
index bc0f3f1..cdbd684 100644
--- a/testing/resources/javascript/document_methods.in
+++ b/testing/resources/javascript/document_methods.in
@@ -314,6 +314,7 @@
   testUnsupported('this.removeIcon');
   testUnsupported('this.replacePages');
   testUnsupported('this.saveAs');
+  testUnsupported('this.syncAnnotScan');
 
   app.alert('*** Testing Supported Methods ***');
   testAddIcon();
diff --git a/testing/resources/javascript/document_methods_expected.txt b/testing/resources/javascript/document_methods_expected.txt
index ed601f2..70a7481 100644
--- a/testing/resources/javascript/document_methods_expected.txt
+++ b/testing/resources/javascript/document_methods_expected.txt
@@ -68,6 +68,9 @@
 Alert: PASS: typeof this.saveAs = function
 Alert: PASS: this.saveAs() = undefined
 Alert: PASS: this.saveAs(1, 2, "clams", [1, 2, 3]) = undefined
+Alert: PASS: typeof this.syncAnnotScan = function
+Alert: PASS: this.syncAnnotScan() = undefined
+Alert: PASS: this.syncAnnotScan(1, 2, "clams", [1, 2, 3]) = undefined
 Alert: *** Testing Supported Methods ***
 Alert: PASS: typeof this.addIcon = function
 Alert: PASS: this.addIcon() threw error Document.addIcon: Incorrect number of parameters passed to function.