diff options
author | darin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-30 06:05:18 +0000 |
---|---|---|
committer | darin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-30 06:05:18 +0000 |
commit | bebaae90a2f612e174d8f3a7f76614756d4e897f (patch) | |
tree | 7795a69c4f92c6398f940813fdd202c9a318beea /webkit | |
parent | 8035d929dcad768cfb2b3cd72fc6f52521d4b745 (diff) | |
download | chromium_src-bebaae90a2f612e174d8f3a7f76614756d4e897f.zip chromium_src-bebaae90a2f612e174d8f3a7f76614756d4e897f.tar.gz chromium_src-bebaae90a2f612e174d8f3a7f76614756d4e897f.tar.bz2 |
Add support for HandleDocumentLoad.
R=jam
BUG=47341
TEST=none
Review URL: http://codereview.chromium.org/2842036
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51233 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/glue/plugins/pepper_plugin_instance.cc | 6 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_plugin_instance.h | 2 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_url_loader.cc | 46 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_url_loader.h | 28 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_webplugin_impl.cc | 20 | ||||
-rw-r--r-- | webkit/glue/plugins/pepper_webplugin_impl.h | 2 |
6 files changed, 66 insertions, 38 deletions
diff --git a/webkit/glue/plugins/pepper_plugin_instance.cc b/webkit/glue/plugins/pepper_plugin_instance.cc index 97ec093..454f055 100644 --- a/webkit/glue/plugins/pepper_plugin_instance.cc +++ b/webkit/glue/plugins/pepper_plugin_instance.cc @@ -23,6 +23,7 @@ #include "webkit/glue/plugins/pepper_device_context_2d.h" #include "webkit/glue/plugins/pepper_plugin_delegate.h" #include "webkit/glue/plugins/pepper_plugin_module.h" +#include "webkit/glue/plugins/pepper_url_loader.h" #include "webkit/glue/plugins/pepper_var.h" using WebKit::WebFrame; @@ -253,6 +254,11 @@ bool PluginInstance::Initialize(WebPluginContainer* container, argc, argn.get(), argv.get()); } +bool PluginInstance::HandleDocumentLoad(URLLoader* loader) { + return instance_interface_->HandleDocumentLoad(GetPPInstance(), + loader->GetResource()); +} + bool PluginInstance::HandleInputEvent(const WebKit::WebInputEvent& event, WebKit::WebCursorInfo* cursor_info) { PP_Event pp_event; diff --git a/webkit/glue/plugins/pepper_plugin_instance.h b/webkit/glue/plugins/pepper_plugin_instance.h index bc55025..89f3c47 100644 --- a/webkit/glue/plugins/pepper_plugin_instance.h +++ b/webkit/glue/plugins/pepper_plugin_instance.h @@ -34,6 +34,7 @@ namespace pepper { class DeviceContext2D; class PluginDelegate; class PluginModule; +class URLLoader; class PluginInstance : public base::RefCounted<PluginInstance> { public: @@ -78,6 +79,7 @@ class PluginInstance : public base::RefCounted<PluginInstance> { bool Initialize(WebKit::WebPluginContainer* container, const std::vector<std::string>& arg_names, const std::vector<std::string>& arg_values); + bool HandleDocumentLoad(URLLoader* loader); bool HandleInputEvent(const WebKit::WebInputEvent& event, WebKit::WebCursorInfo* cursor_info); PP_Var GetInstanceObject(); diff --git a/webkit/glue/plugins/pepper_url_loader.cc b/webkit/glue/plugins/pepper_url_loader.cc index f9b6d22..9fce041 100644 --- a/webkit/glue/plugins/pepper_url_loader.cc +++ b/webkit/glue/plugins/pepper_url_loader.cc @@ -221,29 +221,6 @@ void URLLoader::Close() { NOTIMPLEMENTED(); // TODO(darin): Implement me. } -void URLLoader::RunCallback(int32_t result) { - if (!pending_callback_.func) - return; - - PP_CompletionCallback callback = {0}; - std::swap(callback, pending_callback_); - PP_RunCompletionCallback(&callback, result); -} - -size_t URLLoader::FillUserBuffer() { - DCHECK(user_buffer_); - DCHECK(user_buffer_size_); - - size_t bytes_to_copy = std::min(buffer_.size(), user_buffer_size_); - std::copy(buffer_.begin(), buffer_.begin() + bytes_to_copy, user_buffer_); - buffer_.erase(buffer_.begin(), buffer_.begin() + bytes_to_copy); - - // Reset for next time. - user_buffer_ = NULL; - user_buffer_size_ = 0; - return bytes_to_copy; -} - void URLLoader::willSendRequest(WebURLLoader* loader, WebURLRequest& new_request, const WebURLResponse& redirect_response) { @@ -284,4 +261,27 @@ void URLLoader::didFail(WebURLLoader* loader, const WebURLError& error) { RunCallback(PP_Error_Failed); } +void URLLoader::RunCallback(int32_t result) { + if (!pending_callback_.func) + return; + + PP_CompletionCallback callback = {0}; + std::swap(callback, pending_callback_); + PP_RunCompletionCallback(&callback, result); +} + +size_t URLLoader::FillUserBuffer() { + DCHECK(user_buffer_); + DCHECK(user_buffer_size_); + + size_t bytes_to_copy = std::min(buffer_.size(), user_buffer_size_); + std::copy(buffer_.begin(), buffer_.begin() + bytes_to_copy, user_buffer_); + buffer_.erase(buffer_.begin(), buffer_.begin() + bytes_to_copy); + + // Reset for next time. + user_buffer_ = NULL; + user_buffer_size_ = 0; + return bytes_to_copy; +} + } // namespace pepper diff --git a/webkit/glue/plugins/pepper_url_loader.h b/webkit/glue/plugins/pepper_url_loader.h index 3bb05ac..6e29f8d 100644 --- a/webkit/glue/plugins/pepper_url_loader.h +++ b/webkit/glue/plugins/pepper_url_loader.h @@ -40,20 +40,6 @@ class URLLoader : public Resource, public WebKit::WebURLLoaderClient { PP_CompletionCallback callback); void Close(); - URLResponseInfo* response_info() const { return response_info_; } - - // Progress counters. - int64_t bytes_sent() const { return bytes_sent_; } - int64_t total_bytes_to_be_sent() const { return total_bytes_to_be_sent_; } - int64_t bytes_received() const { return bytes_received_; } - int64_t total_bytes_to_be_received() const { - return total_bytes_to_be_received_; - } - - private: - void RunCallback(int32_t result); - size_t FillUserBuffer(); - // WebKit::WebURLLoaderClient implementation. virtual void willSendRequest(WebKit::WebURLLoader* loader, WebKit::WebURLRequest& new_request, @@ -70,6 +56,20 @@ class URLLoader : public Resource, public WebKit::WebURLLoaderClient { virtual void didFail(WebKit::WebURLLoader* loader, const WebKit::WebURLError& error); + URLResponseInfo* response_info() const { return response_info_; } + + // Progress counters. + int64_t bytes_sent() const { return bytes_sent_; } + int64_t total_bytes_to_be_sent() const { return total_bytes_to_be_sent_; } + int64_t bytes_received() const { return bytes_received_; } + int64_t total_bytes_to_be_received() const { + return total_bytes_to_be_received_; + } + + private: + void RunCallback(int32_t result); + size_t FillUserBuffer(); + scoped_refptr<PluginInstance> instance_; scoped_ptr<WebKit::WebURLLoader> loader_; scoped_refptr<URLResponseInfo> response_info_; diff --git a/webkit/glue/plugins/pepper_webplugin_impl.cc b/webkit/glue/plugins/pepper_webplugin_impl.cc index f9d0f52..2c4a1b6 100644 --- a/webkit/glue/plugins/pepper_webplugin_impl.cc +++ b/webkit/glue/plugins/pepper_webplugin_impl.cc @@ -11,6 +11,7 @@ #include "third_party/WebKit/WebKit/chromium/public/WebRect.h" #include "webkit/glue/plugins/pepper_plugin_instance.h" #include "webkit/glue/plugins/pepper_plugin_module.h" +#include "webkit/glue/plugins/pepper_url_loader.h" #include "webkit/glue/plugins/pepper_var.h" using WebKit::WebCanvas; @@ -103,15 +104,32 @@ bool WebPluginImpl::handleInputEvent(const WebKit::WebInputEvent& event, void WebPluginImpl::didReceiveResponse( const WebKit::WebURLResponse& response) { + DCHECK(!document_loader_); + + document_loader_ = new URLLoader(instance_); + document_loader_->didReceiveResponse(NULL, response); + + if (!instance_->HandleDocumentLoad(document_loader_)) + document_loader_ = NULL; } void WebPluginImpl::didReceiveData(const char* data, int data_length) { + if (document_loader_) + document_loader_->didReceiveData(NULL, data, data_length); } void WebPluginImpl::didFinishLoading() { + if (document_loader_) { + document_loader_->didFinishLoading(NULL); + document_loader_ = NULL; + } } -void WebPluginImpl::didFailLoading(const WebKit::WebURLError&) { +void WebPluginImpl::didFailLoading(const WebKit::WebURLError& error) { + if (document_loader_) { + document_loader_->didFail(NULL, error); + document_loader_ = NULL; + } } void WebPluginImpl::didFinishLoadingFrameRequest(const WebKit::WebURL& url, diff --git a/webkit/glue/plugins/pepper_webplugin_impl.h b/webkit/glue/plugins/pepper_webplugin_impl.h index 2353b82..d70d7a4 100644 --- a/webkit/glue/plugins/pepper_webplugin_impl.h +++ b/webkit/glue/plugins/pepper_webplugin_impl.h @@ -23,6 +23,7 @@ namespace pepper { class PluginDelegate; class PluginInstance; class PluginModule; +class URLLoader; class WebPluginImpl : public WebKit::WebPlugin { public: @@ -69,6 +70,7 @@ class WebPluginImpl : public WebKit::WebPlugin { scoped_ptr<InitData> init_data_; // Cleared upon successful initialization. scoped_refptr<PluginInstance> instance_; + scoped_refptr<URLLoader> document_loader_; gfx::Rect plugin_rect_; DISALLOW_COPY_AND_ASSIGN(WebPluginImpl); |