Index: webkit/plugins/ppapi/ppapi_plugin_instance.h |
diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.h b/webkit/plugins/ppapi/ppapi_plugin_instance.h |
index 281b8d42eb4d61bb075f07ba28bb7f3c6fae4de9..ae1da1756efa23f78f03a476592839c3acf28aeb 100644 |
--- a/webkit/plugins/ppapi/ppapi_plugin_instance.h |
+++ b/webkit/plugins/ppapi/ppapi_plugin_instance.h |
@@ -46,6 +46,8 @@ |
#include "ppapi/thunk/resource_creation_api.h" |
#include "third_party/WebKit/Source/Platform/chromium/public/WebCanvas.h" |
#include "third_party/WebKit/Source/Platform/chromium/public/WebString.h" |
+#include "third_party/WebKit/Source/Platform/chromium/public/WebURLLoaderClient.h" |
+#include "third_party/WebKit/Source/Platform/chromium/public/WebURLResponse.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebPlugin.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebUserGestureToken.h" |
#include "third_party/skia/include/core/SkRefCnt.h" |
@@ -65,8 +67,11 @@ class WebInputEvent; |
class WebLayer; |
class WebMouseEvent; |
class WebPluginContainer; |
+class WebURLLoader; |
+class WebURLResponse; |
struct WebCompositionUnderline; |
struct WebCursorInfo; |
+struct WebURLError; |
struct WebPrintParams; |
} |
@@ -131,6 +136,10 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance : |
// nonzero. |
PP_Instance pp_instance() const { return pp_instance_; } |
+ ::ppapi::PPP_Instance_Combined* instance_interface() const { |
+ return instance_interface_.get(); |
+ } |
+ |
::ppapi::thunk::ResourceCreationAPI& resource_creation() { |
return *resource_creation_.get(); |
} |
@@ -173,11 +182,11 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance : |
bool full_frame() const { return full_frame_; } |
const ::ppapi::ViewData& view_data() const { return view_data_; } |
- // PPP_Instance and PPP_Instance_Private pass-through. |
+ // PPP_Instance and PPP_Instance_Private. |
bool Initialize(const std::vector<std::string>& arg_names, |
const std::vector<std::string>& arg_values, |
bool full_frame); |
- bool HandleDocumentLoad(PPB_URLLoader_Impl* loader); |
+ bool HandleDocumentLoad(const WebKit::WebURLResponse& response); |
bool HandleInputEvent(const WebKit::WebInputEvent& event, |
WebKit::WebCursorInfo* cursor_info); |
PP_Var GetInstanceObject(); |
@@ -352,6 +361,17 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance : |
void SimulateImeSetCompositionEvent( |
const ::ppapi::InputEventData& input_event); |
+ // The document loader is valid when the plugin is "full-frame" and in this |
+ // case is non-NULL as long as the corresponding loader resource is alive. |
+ // This pointer is non-owning, so the loader must use set_document_loader to |
+ // clear itself when it is destroyed. |
+ WebKit::WebURLLoaderClient* document_loader() const { |
+ return document_loader_; |
+ } |
+ void set_document_loader(WebKit::WebURLLoaderClient* loader) { |
+ document_loader_ = loader; |
+ } |
+ |
ContentDecryptorDelegate* GetContentDecryptorDelegate(); |
// PPB_Instance_API implementation. |
@@ -485,6 +505,31 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance : |
private: |
friend class PpapiUnittest; |
+ // Class to record document load notifications and play them back once the |
+ // real document loader becomes available. Used only by NaCl instances. |
+ class NaClDocumentLoader : public WebKit::WebURLLoaderClient { |
+ public: |
+ NaClDocumentLoader(); |
+ virtual ~NaClDocumentLoader(); |
+ |
+ void ReplayReceivedData(WebURLLoaderClient* document_loader); |
+ |
+ // WebKit::WebURLLoaderClient implementation. |
+ virtual void didReceiveData(WebKit::WebURLLoader* loader, |
+ const char* data, |
+ int data_length, |
+ int encoded_data_length); |
+ virtual void didFinishLoading(WebKit::WebURLLoader* loader, |
+ double finish_time); |
+ virtual void didFail(WebKit::WebURLLoader* loader, |
+ const WebKit::WebURLError& error); |
+ |
+ private: |
+ std::list<std::string> data_; |
+ bool finished_loading_; |
+ scoped_ptr<WebKit::WebURLError> error_; |
+ }; |
+ |
// Implements PPB_Gamepad_API. This is just to avoid having an excessive |
// number of interfaces implemented by PluginInstance. |
class GamepadImpl : public ::ppapi::thunk::PPB_Gamepad_API, |
@@ -778,9 +823,12 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance : |
std::vector<std::string> argn_; |
std::vector<std::string> argv_; |
- // This is NULL unless HandleDocumentLoad has called. In that case, we store |
- // the pointer so we can re-send it later if we are reset to talk to NaCl. |
- scoped_refptr<PPB_URLLoader_Impl> document_loader_; |
+ // Non-owning pointer to the document loader, if any. |
+ WebKit::WebURLLoaderClient* document_loader_; |
+ // State for deferring document loads. Used only by NaCl instances. |
+ WebKit::WebURLResponse nacl_document_response_; |
+ scoped_ptr<NaClDocumentLoader> nacl_document_loader_; |
+ bool nacl_document_load_; |
// The ContentDecryptorDelegate forwards PPP_ContentDecryptor_Private |
// calls and handles PPB_ContentDecryptor_Private calls. |