summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-15 19:03:54 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-15 19:03:54 +0000
commit9c3975ee73e1c2c927063f8ac5c48f2039758b91 (patch)
tree4e0bdac8f6e8bc169beab9badc13de73999253b0
parent5d69f5207966d6043841bcbdaa59f8e3c77a644b (diff)
downloadchromium_src-9c3975ee73e1c2c927063f8ac5c48f2039758b91.zip
chromium_src-9c3975ee73e1c2c927063f8ac5c48f2039758b91.tar.gz
chromium_src-9c3975ee73e1c2c927063f8ac5c48f2039758b91.tar.bz2
Merge 62757 - Implement cancelling a pepper request.
Review URL: http://codereview.chromium.org/3828005 TBR=jam@chromium.org Review URL: http://codereview.chromium.org/3793007 git-svn-id: svn://svn.chromium.org/chrome/branches/552/src@62769 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--webkit/glue/plugins/pepper_url_loader.cc16
-rw-r--r--webkit/glue/plugins/pepper_url_loader.h5
-rw-r--r--webkit/glue/plugins/pepper_webplugin_impl.cc2
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_))