diff options
-rw-r--r-- | chrome/browser/resources/pdf/elements/viewer-bookmark/viewer-bookmark.js | 2 | ||||
-rw-r--r-- | chrome/browser/resources/pdf/pdf.js | 4 | ||||
-rw-r--r-- | chrome/test/data/pdf/bookmarks_test.js | 8 | ||||
-rw-r--r-- | chrome/test/data/pdf/test-bookmarks.pdf | bin | 24479 -> 24311 bytes | |||
-rw-r--r-- | pdf/pdfium/pdfium_engine.cc | 14 |
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 Binary files differindex a72eea1..412b316 100644 --- a/chrome/test/data/pdf/test-bookmarks.pdf +++ b/chrome/test/data/pdf/test-bookmarks.pdf 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; |