diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-15 18:12:05 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-15 18:12:05 +0000 |
commit | be144168e271095870be5c5c910ad181fdd53b54 (patch) | |
tree | 36c7cd7f2270c0ace219853613bdc0aa71dc599d /webkit/glue | |
parent | da21a1dea7b8215dc507f78bc4b9eb29d526c53d (diff) | |
download | chromium_src-be144168e271095870be5c5c910ad181fdd53b54.zip chromium_src-be144168e271095870be5c5c910ad181fdd53b54.tar.gz chromium_src-be144168e271095870be5c5c910ad181fdd53b54.tar.bz2 |
Implement cancelling a pepper request.
Review URL: http://codereview.chromium.org/3828005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@62757 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue')
-rw-r--r-- | webkit/glue/plugins/pepper_url_loader.cc | 16 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_url_loader.h | 5 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_webplugin_impl.cc | 2 |
3 files changed, 15 insertions, 8 deletions
diff --git a/webkit/glue/plugins/pepper_url_loader.cc b/webkit/glue/plugins/pepper_url_loader.cc index 5e789f8..62fe176 100644 --- a/webkit/glue/plugins/pepper_url_loader.cc +++ b/webkit/glue/plugins/pepper_url_loader.cc @@ -44,7 +44,7 @@ PP_Resource Create(PP_Instance instance_id) { if (!instance) return 0; - URLLoader* loader = new URLLoader(instance); + URLLoader* loader = new URLLoader(instance, false); return loader->GetReference(); } @@ -167,9 +167,10 @@ const PPB_URLLoaderTrusted_Dev ppb_urlloadertrusted = { } // namespace -URLLoader::URLLoader(PluginInstance* instance) +URLLoader::URLLoader(PluginInstance* instance, bool main_document_loader) : Resource(instance->module()), instance_(instance), + main_document_loader_(main_document_loader), pending_callback_(), bytes_sent_(0), total_bytes_to_be_sent_(-1), @@ -216,10 +217,8 @@ int32_t URLLoader::Open(URLRequestInfo* request, frame->dispatchWillSendRequest(web_request); loader_.reset(WebKit::webKitClient()->createURLLoader()); - if (!loader_.get()) { - loader_.reset(); + if (!loader_.get()) return PP_ERROR_FAILED; - } loader_->loadAsynchronously(web_request, this); pending_callback_ = callback; @@ -279,7 +278,12 @@ int32_t URLLoader::FinishStreamingToFile(PP_CompletionCallback callback) { } void URLLoader::Close() { - NOTIMPLEMENTED(); // TODO(darin): Implement me. + if (loader_.get()) { + loader_->cancel(); + } else if (main_document_loader_) { + WebFrame* frame = instance_->container()->element().document().frame(); + frame->stopLoading(); + } } void URLLoader::GrantUniversalAccess() { diff --git a/webkit/glue/plugins/pepper_url_loader.h b/webkit/glue/plugins/pepper_url_loader.h index 4919de7..e613475 100644 --- a/webkit/glue/plugins/pepper_url_loader.h +++ b/webkit/glue/plugins/pepper_url_loader.h @@ -24,7 +24,7 @@ class URLResponseInfo; class URLLoader : public Resource, public WebKit::WebURLLoaderClient { public: - explicit URLLoader(PluginInstance* instance); + URLLoader(PluginInstance* instance, bool main_document_loader); virtual ~URLLoader(); // Returns a pointer to the interface implementing PPB_URLLoader that is @@ -83,6 +83,9 @@ class URLLoader : public Resource, public WebKit::WebURLLoaderClient { size_t FillUserBuffer(); scoped_refptr<PluginInstance> instance_; + // If true, then the plugin instance is a full-frame plugin and we're just + // wrapping the main document's loader (i.e. loader_ is null). + bool main_document_loader_; scoped_ptr<WebKit::WebURLLoader> loader_; scoped_refptr<URLResponseInfo> response_info_; PP_CompletionCallback pending_callback_; diff --git a/webkit/glue/plugins/pepper_webplugin_impl.cc b/webkit/glue/plugins/pepper_webplugin_impl.cc index 0e6e92f..ef01c6a 100644 --- a/webkit/glue/plugins/pepper_webplugin_impl.cc +++ b/webkit/glue/plugins/pepper_webplugin_impl.cc @@ -124,7 +124,7 @@ void WebPluginImpl::didReceiveResponse( const WebKit::WebURLResponse& response) { DCHECK(!document_loader_); - document_loader_ = new URLLoader(instance_); + document_loader_ = new URLLoader(instance_, true); document_loader_->didReceiveResponse(NULL, response); if (!instance_->HandleDocumentLoad(document_loader_)) |