Index: content/browser/browser_plugin/browser_plugin_guest.cc |
diff --git a/content/browser/browser_plugin/browser_plugin_guest.cc b/content/browser/browser_plugin/browser_plugin_guest.cc |
index fa639dc190ecc9be5054d0a03980fb1a10678245..c397642e83fffa9f0cbf8f5a05874a3759cf521b 100644 |
--- a/content/browser/browser_plugin/browser_plugin_guest.cc |
+++ b/content/browser/browser_plugin/browser_plugin_guest.cc |
@@ -88,25 +88,6 @@ class BrowserPluginGuest::PermissionRequest : |
base::WeakPtr<BrowserPluginGuest> guest_; |
}; |
-class BrowserPluginGuest::DownloadRequest : public PermissionRequest { |
- public: |
- DownloadRequest(const base::WeakPtr<BrowserPluginGuest>& guest, |
- const base::Callback<void(bool)>& callback) |
- : PermissionRequest(guest), |
- callback_(callback) { |
- RecordAction( |
- base::UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.Download")); |
- } |
- virtual void RespondImpl(bool should_allow, |
- const std::string& user_input) OVERRIDE { |
- callback_.Run(should_allow); |
- } |
- |
- private: |
- virtual ~DownloadRequest() {} |
- base::Callback<void(bool)> callback_; |
-}; |
- |
class BrowserPluginGuest::NewWindowRequest : public PermissionRequest { |
public: |
NewWindowRequest(const base::WeakPtr<BrowserPluginGuest>& guest, |
@@ -216,18 +197,17 @@ std::string JavaScriptMessageTypeToString(JavaScriptMessageType message_type) { |
} |
// Called on IO thread. |
-static std::string RetrieveDownloadURLFromRequestId( |
- RenderViewHost* render_view_host, |
+static GURL RetrieveDownloadURLFromRequestId( |
+ int render_process_id, |
int url_request_id) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- int render_process_id = render_view_host->GetProcess()->GetID(); |
GlobalRequestID global_id(render_process_id, url_request_id); |
net::URLRequest* url_request = |
ResourceDispatcherHostImpl::Get()->GetURLRequest(global_id); |
if (url_request) |
- return url_request->url().possibly_invalid_spec(); |
- return ""; |
+ return url_request->url(); |
+ return GURL(); |
} |
} // namespace |
@@ -672,10 +652,15 @@ void BrowserPluginGuest::CanDownload( |
int request_id, |
const std::string& request_method, |
const base::Callback<void(bool)>& callback) { |
+ if (!delegate_) { |
+ callback.Run(false); |
+ return; |
+ } |
+ |
BrowserThread::PostTaskAndReplyWithResult( |
BrowserThread::IO, FROM_HERE, |
base::Bind(&RetrieveDownloadURLFromRequestId, |
- render_view_host, request_id), |
+ render_view_host->GetProcess()->GetID(), request_id), |
base::Bind(&BrowserPluginGuest::DidRetrieveDownloadURLFromRequestId, |
weak_ptr_factory_.GetWeakPtr(), |
request_method, |
@@ -1742,21 +1727,13 @@ void BrowserPluginGuest::OnImeCompositionRangeChanged( |
void BrowserPluginGuest::DidRetrieveDownloadURLFromRequestId( |
const std::string& request_method, |
const base::Callback<void(bool)>& callback, |
- const std::string& url) { |
- if (url.empty()) { |
+ const GURL& url) { |
+ if (!url.is_valid()) { |
callback.Run(false); |
return; |
} |
- base::DictionaryValue request_info; |
- request_info.Set(browser_plugin::kRequestMethod, |
- base::Value::CreateStringValue(request_method)); |
- request_info.Set(browser_plugin::kURL, base::Value::CreateStringValue(url)); |
- |
- RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_DOWNLOAD, |
- new DownloadRequest(weak_ptr_factory_.GetWeakPtr(), |
- callback), |
- request_info); |
+ delegate_->CanDownload(request_method, url, callback); |
} |
} // namespace content |