| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "chrome/browser/ui/pdf/pdf_tab_helper.h" | |
| 6 | |
| 7 #include "base/strings/utf_string_conversions.h" | |
| 8 #include "chrome/browser/download/download_stats.h" | |
| 9 #include "chrome/browser/ui/browser.h" | |
| 10 #include "chrome/browser/ui/browser_finder.h" | |
| 11 #include "chrome/browser/ui/browser_window.h" | |
| 12 #include "chrome/browser/ui/location_bar/location_bar.h" | |
| 13 #include "chrome/browser/ui/pdf/open_pdf_in_reader_prompt_delegate.h" | |
| 14 #include "chrome/browser/ui/pdf/pdf_unsupported_feature.h" | |
| 15 #include "chrome/browser/ui/tab_contents/core_tab_helper.h" | |
| 16 #include "chrome/common/render_messages.h" | |
| 17 #include "content/public/browser/navigation_details.h" | |
| 18 | |
| 19 DEFINE_WEB_CONTENTS_USER_DATA_KEY(PDFTabHelper); | |
| 20 | |
| 21 PDFTabHelper::PDFTabHelper(content::WebContents* web_contents) | |
| 22 : content::WebContentsObserver(web_contents) { | |
| 23 } | |
| 24 | |
| 25 PDFTabHelper::~PDFTabHelper() { | |
| 26 } | |
| 27 | |
| 28 void PDFTabHelper::ShowOpenInReaderPrompt( | |
| 29 scoped_ptr<OpenPDFInReaderPromptDelegate> prompt) { | |
| 30 open_in_reader_prompt_ = prompt.Pass(); | |
| 31 UpdateLocationBar(); | |
| 32 } | |
| 33 | |
| 34 bool PDFTabHelper::OnMessageReceived(const IPC::Message& message) { | |
| 35 bool handled = true; | |
| 36 IPC_BEGIN_MESSAGE_MAP(PDFTabHelper, message) | |
| 37 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_PDFHasUnsupportedFeature, | |
| 38 OnHasUnsupportedFeature) | |
| 39 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_PDFSaveURLAs, OnSaveURLAs) | |
| 40 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_PDFUpdateContentRestrictions, | |
| 41 OnUpdateContentRestrictions) | |
| 42 IPC_MESSAGE_HANDLER_DELAY_REPLY(ChromeViewHostMsg_PDFModalPromptForPassword, | |
| 43 OnModalPromptForPassword) | |
| 44 IPC_MESSAGE_UNHANDLED(handled = false) | |
| 45 IPC_END_MESSAGE_MAP() | |
| 46 return handled; | |
| 47 } | |
| 48 | |
| 49 void PDFTabHelper::DidNavigateMainFrame( | |
| 50 const content::LoadCommittedDetails& details, | |
| 51 const content::FrameNavigateParams& params) { | |
| 52 if (open_in_reader_prompt_.get() && | |
| 53 open_in_reader_prompt_->ShouldExpire(details)) { | |
| 54 open_in_reader_prompt_.reset(); | |
| 55 UpdateLocationBar(); | |
| 56 } | |
| 57 } | |
| 58 | |
| 59 void PDFTabHelper::UpdateLocationBar() { | |
| 60 Browser* browser = chrome::FindBrowserWithWebContents(web_contents()); | |
| 61 if (!browser) | |
| 62 return; | |
| 63 | |
| 64 BrowserWindow* window = browser->window(); | |
| 65 if (!window) | |
| 66 return; | |
| 67 | |
| 68 LocationBar* location_bar = window->GetLocationBar(); | |
| 69 if (!location_bar) | |
| 70 return; | |
| 71 | |
| 72 location_bar->UpdateOpenPDFInReaderPrompt(); | |
| 73 } | |
| 74 | |
| 75 void PDFTabHelper::OnHasUnsupportedFeature() { | |
| 76 PDFHasUnsupportedFeature(web_contents()); | |
| 77 } | |
| 78 | |
| 79 void PDFTabHelper::OnSaveURLAs(const GURL& url, | |
| 80 const content::Referrer& referrer) { | |
| 81 RecordDownloadSource(DOWNLOAD_INITIATED_BY_PDF_SAVE); | |
| 82 web_contents()->SaveFrame(url, referrer); | |
| 83 } | |
| 84 | |
| 85 void PDFTabHelper::OnUpdateContentRestrictions(int content_restrictions) { | |
| 86 CoreTabHelper* core_tab_helper = | |
| 87 CoreTabHelper::FromWebContents(web_contents()); | |
| 88 // |core_tab_helper| is NULL for WebViewGuest. | |
| 89 if (core_tab_helper) | |
| 90 core_tab_helper->UpdateContentRestrictions(content_restrictions); | |
| 91 } | |
| 92 | |
| 93 void PDFTabHelper::OnModalPromptForPasswordClosed( | |
| 94 IPC::Message* reply_message, | |
| 95 bool success, | |
| 96 const base::string16& actual_value) { | |
| 97 ChromeViewHostMsg_PDFModalPromptForPassword::WriteReplyParams( | |
| 98 reply_message, base::UTF16ToUTF8(actual_value)); | |
| 99 Send(reply_message); | |
| 100 } | |
| 101 | |
| 102 void PDFTabHelper::OnModalPromptForPassword(const std::string& prompt, | |
| 103 IPC::Message* reply_message) { | |
| 104 base::Callback<void(bool, const base::string16&)> callback = | |
| 105 base::Bind(&PDFTabHelper::OnModalPromptForPasswordClosed, | |
| 106 base::Unretained(this), reply_message); | |
| 107 ShowPDFPasswordDialog(web_contents(), base::UTF8ToUTF16(prompt), callback); | |
| 108 } | |
| OLD | NEW |