summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authordarin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-30 06:05:18 +0000
committerdarin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-30 06:05:18 +0000
commitbebaae90a2f612e174d8f3a7f76614756d4e897f (patch)
tree7795a69c4f92c6398f940813fdd202c9a318beea /webkit
parent8035d929dcad768cfb2b3cd72fc6f52521d4b745 (diff)
downloadchromium_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.cc6
-rw-r--r--webkit/glue/plugins/pepper_plugin_instance.h2
-rw-r--r--webkit/glue/plugins/pepper_url_loader.cc46
-rw-r--r--webkit/glue/plugins/pepper_url_loader.h28
-rw-r--r--webkit/glue/plugins/pepper_webplugin_impl.cc20
-rw-r--r--webkit/glue/plugins/pepper_webplugin_impl.h2
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);