summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/resources/pdf/elements/viewer-bookmark/viewer-bookmark.js2
-rw-r--r--chrome/browser/resources/pdf/pdf.js4
-rw-r--r--chrome/test/data/pdf/bookmarks_test.js8
-rw-r--r--chrome/test/data/pdf/test-bookmarks.pdfbin24479 -> 24311 bytes
-rw-r--r--pdf/pdfium/pdfium_engine.cc14
5 files changed, 26 insertions, 2 deletions
diff --git a/chrome/browser/resources/pdf/elements/viewer-bookmark/viewer-bookmark.js b/chrome/browser/resources/pdf/elements/viewer-bookmark/viewer-bookmark.js
index 7905ea4..9d63990 100644
--- a/chrome/browser/resources/pdf/elements/viewer-bookmark/viewer-bookmark.js
+++ b/chrome/browser/resources/pdf/elements/viewer-bookmark/viewer-bookmark.js
@@ -65,6 +65,8 @@
onClick: function() {
if (this.bookmark.hasOwnProperty('page'))
this.fire('change-page', {page: this.bookmark.page});
+ else if (this.bookmark.hasOwnProperty('uri'))
+ this.fire('navigate', {uri: this.bookmark.uri, newtab: true});
},
onEnter_: function(e) {
diff --git a/chrome/browser/resources/pdf/pdf.js b/chrome/browser/resources/pdf/pdf.js
index 4ea2b06..dab584d 100644
--- a/chrome/browser/resources/pdf/pdf.js
+++ b/chrome/browser/resources/pdf/pdf.js
@@ -237,6 +237,10 @@ function PDFViewer(browserApi) {
this.viewport_.goToPage(e.detail.page);
}.bind(this));
+ document.body.addEventListener('navigate', function(e) {
+ this.navigator_.navigate(e.detail.uri, e.detail.newtab);
+ }.bind(this));
+
this.toolbarManager_ =
new ToolbarManager(window, this.toolbar_, this.zoomToolbar_);
diff --git a/chrome/test/data/pdf/bookmarks_test.js b/chrome/test/data/pdf/bookmarks_test.js
index 43a679b..4b29477 100644
--- a/chrome/test/data/pdf/bookmarks_test.js
+++ b/chrome/test/data/pdf/bookmarks_test.js
@@ -10,9 +10,10 @@ var tests = [
var bookmarks = viewer.bookmarks;
// Load all relevant bookmarks.
- chrome.test.assertEq(2, bookmarks.length);
+ chrome.test.assertEq(3, bookmarks.length);
var firstBookmark = bookmarks[0];
var secondBookmark = bookmarks[1];
+ var uriBookmark = bookmarks[2];
chrome.test.assertEq(1, firstBookmark.children.length);
chrome.test.assertEq(0, secondBookmark.children.length);
var firstNestedBookmark = firstBookmark.children[0];
@@ -24,10 +25,15 @@ var tests = [
firstNestedBookmark.title);
chrome.test.assertEq('Second Section',
secondBookmark.title);
+ chrome.test.assertEq('URI Bookmark', uriBookmark.title);
+
// Check pages.
chrome.test.assertEq(0, firstBookmark.page);
chrome.test.assertEq(1, firstNestedBookmark.page);
chrome.test.assertEq(2, secondBookmark.page);
+ chrome.test.assertEq(undefined, uriBookmark.page);
+
+ chrome.test.assertEq('http://www.chromium.org', uriBookmark.uri);
chrome.test.succeed();
}
diff --git a/chrome/test/data/pdf/test-bookmarks.pdf b/chrome/test/data/pdf/test-bookmarks.pdf
index a72eea1..412b316 100644
--- a/chrome/test/data/pdf/test-bookmarks.pdf
+++ b/chrome/test/data/pdf/test-bookmarks.pdf
Binary files differ
diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc
index e44b2dc..b4c07e8 100644
--- a/pdf/pdfium/pdfium_engine.cc
+++ b/pdf/pdfium/pdfium_engine.cc
@@ -413,7 +413,7 @@ pp::VarDictionary TraverseBookmarks(FPDF_DOCUMENT doc,
unsigned int depth) {
pp::VarDictionary dict;
base::string16 title;
- unsigned long buffer_size = FPDFBookmark_GetTitle(bookmark, NULL, 0);
+ unsigned long buffer_size = FPDFBookmark_GetTitle(bookmark, nullptr, 0);
if (buffer_size > 0) {
PDFiumAPIStringBufferSizeInBytesAdapter<base::string16> api_string_adapter(
&title, buffer_size, true);
@@ -427,6 +427,18 @@ pp::VarDictionary TraverseBookmarks(FPDF_DOCUMENT doc,
if (dest) {
int page_index = FPDFDest_GetPageIndex(doc, dest);
dict.Set(pp::Var("page"), pp::Var(page_index));
+ } else {
+ // Extract URI for bookmarks linking to an external page.
+ FPDF_ACTION action = FPDFBookmark_GetAction(bookmark);
+ buffer_size = FPDFAction_GetURIPath(doc, action, nullptr, 0);
+ if (buffer_size > 0) {
+ std::string uri;
+ PDFiumAPIStringBufferAdapter<std::string>
+ api_string_adapter(&uri, buffer_size, true);
+ api_string_adapter.Close(FPDFAction_GetURIPath(
+ doc, action, api_string_adapter.GetData(), buffer_size));
+ dict.Set(pp::Var("uri"), pp::Var(uri));
+ }
}
pp::VarArray children;