Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(440)

Side by Side Diff: webkit/plugins/ppapi/ppapi_plugin_instance.h

Issue 14371021: Implementation of URLLoader using PluginResource/ResourceHost. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebase. Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef WEBKIT_PLUGINS_PPAPI_PPAPI_PLUGIN_INSTANCE_H_ 5 #ifndef WEBKIT_PLUGINS_PPAPI_PPAPI_PLUGIN_INSTANCE_H_
6 #define WEBKIT_PLUGINS_PPAPI_PPAPI_PLUGIN_INSTANCE_H_ 6 #define WEBKIT_PLUGINS_PPAPI_PPAPI_PLUGIN_INSTANCE_H_
7 7
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 28 matching lines...) Expand all
39 #include "ppapi/c/private/ppb_nacl_private.h" 39 #include "ppapi/c/private/ppb_nacl_private.h"
40 #include "ppapi/c/private/ppp_instance_private.h" 40 #include "ppapi/c/private/ppp_instance_private.h"
41 #include "ppapi/shared_impl/ppb_instance_shared.h" 41 #include "ppapi/shared_impl/ppb_instance_shared.h"
42 #include "ppapi/shared_impl/ppb_view_shared.h" 42 #include "ppapi/shared_impl/ppb_view_shared.h"
43 #include "ppapi/shared_impl/singleton_resource_id.h" 43 #include "ppapi/shared_impl/singleton_resource_id.h"
44 #include "ppapi/shared_impl/tracked_callback.h" 44 #include "ppapi/shared_impl/tracked_callback.h"
45 #include "ppapi/thunk/ppb_gamepad_api.h" 45 #include "ppapi/thunk/ppb_gamepad_api.h"
46 #include "ppapi/thunk/resource_creation_api.h" 46 #include "ppapi/thunk/resource_creation_api.h"
47 #include "third_party/WebKit/Source/Platform/chromium/public/WebCanvas.h" 47 #include "third_party/WebKit/Source/Platform/chromium/public/WebCanvas.h"
48 #include "third_party/WebKit/Source/Platform/chromium/public/WebString.h" 48 #include "third_party/WebKit/Source/Platform/chromium/public/WebString.h"
49 #include "third_party/WebKit/Source/Platform/chromium/public/WebURLLoaderClient. h"
50 #include "third_party/WebKit/Source/Platform/chromium/public/WebURLResponse.h"
49 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPlugin.h" 51 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPlugin.h"
50 #include "third_party/WebKit/Source/WebKit/chromium/public/WebUserGestureToken.h " 52 #include "third_party/WebKit/Source/WebKit/chromium/public/WebUserGestureToken.h "
51 #include "third_party/skia/include/core/SkRefCnt.h" 53 #include "third_party/skia/include/core/SkRefCnt.h"
52 #include "ui/base/ime/text_input_type.h" 54 #include "ui/base/ime/text_input_type.h"
53 #include "ui/gfx/rect.h" 55 #include "ui/gfx/rect.h"
54 #include "webkit/plugins/ppapi/plugin_delegate.h" 56 #include "webkit/plugins/ppapi/plugin_delegate.h"
55 #include "webkit/plugins/ppapi/ppp_pdf.h" 57 #include "webkit/plugins/ppapi/ppp_pdf.h"
56 #include "webkit/plugins/webkit_plugins_export.h" 58 #include "webkit/plugins/webkit_plugins_export.h"
57 59
58 struct PP_Point; 60 struct PP_Point;
59 61
60 class SkBitmap; 62 class SkBitmap;
61 class TransportDIB; 63 class TransportDIB;
62 64
63 namespace WebKit { 65 namespace WebKit {
64 class WebInputEvent; 66 class WebInputEvent;
65 class WebLayer; 67 class WebLayer;
66 class WebMouseEvent; 68 class WebMouseEvent;
67 class WebPluginContainer; 69 class WebPluginContainer;
70 class WebURLLoader;
71 class WebURLResponse;
68 struct WebCompositionUnderline; 72 struct WebCompositionUnderline;
69 struct WebCursorInfo; 73 struct WebCursorInfo;
74 struct WebURLError;
70 struct WebPrintParams; 75 struct WebPrintParams;
71 } 76 }
72 77
73 namespace cc { 78 namespace cc {
74 class TextureLayer; 79 class TextureLayer;
75 } 80 }
76 81
77 namespace ppapi { 82 namespace ppapi {
78 struct InputEventData; 83 struct InputEventData;
79 struct PPP_Instance_Combined; 84 struct PPP_Instance_Combined;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 MessageChannel& message_channel() { return *message_channel_; } 129 MessageChannel& message_channel() { return *message_channel_; }
125 130
126 WebKit::WebPluginContainer* container() const { return container_; } 131 WebKit::WebPluginContainer* container() const { return container_; }
127 132
128 void set_always_on_top(bool on_top) { always_on_top_ = on_top; } 133 void set_always_on_top(bool on_top) { always_on_top_ = on_top; }
129 134
130 // Returns the PP_Instance uniquely identifying this instance. Guaranteed 135 // Returns the PP_Instance uniquely identifying this instance. Guaranteed
131 // nonzero. 136 // nonzero.
132 PP_Instance pp_instance() const { return pp_instance_; } 137 PP_Instance pp_instance() const { return pp_instance_; }
133 138
139 ::ppapi::PPP_Instance_Combined* instance_interface() const {
140 return instance_interface_.get();
141 }
142
134 ::ppapi::thunk::ResourceCreationAPI& resource_creation() { 143 ::ppapi::thunk::ResourceCreationAPI& resource_creation() {
135 return *resource_creation_.get(); 144 return *resource_creation_.get();
136 } 145 }
137 146
138 // Does some pre-destructor cleanup on the instance. This is necessary 147 // Does some pre-destructor cleanup on the instance. This is necessary
139 // because some cleanup depends on the plugin instance still existing (like 148 // because some cleanup depends on the plugin instance still existing (like
140 // calling the plugin's DidDestroy function). This function is called from 149 // calling the plugin's DidDestroy function). This function is called from
141 // the WebPlugin implementation when WebKit is about to remove the plugin. 150 // the WebPlugin implementation when WebKit is about to remove the plugin.
142 void Delete(); 151 void Delete();
143 152
(...skipping 22 matching lines...) Expand all
166 void CommitBackingTexture(); 175 void CommitBackingTexture();
167 176
168 // Called when the out-of-process plugin implementing this instance crashed. 177 // Called when the out-of-process plugin implementing this instance crashed.
169 void InstanceCrashed(); 178 void InstanceCrashed();
170 179
171 // PPB_Instance and PPB_Instance_Private implementation. 180 // PPB_Instance and PPB_Instance_Private implementation.
172 const GURL& plugin_url() const { return plugin_url_; } 181 const GURL& plugin_url() const { return plugin_url_; }
173 bool full_frame() const { return full_frame_; } 182 bool full_frame() const { return full_frame_; }
174 const ::ppapi::ViewData& view_data() const { return view_data_; } 183 const ::ppapi::ViewData& view_data() const { return view_data_; }
175 184
176 // PPP_Instance and PPP_Instance_Private pass-through. 185 // PPP_Instance and PPP_Instance_Private.
177 bool Initialize(const std::vector<std::string>& arg_names, 186 bool Initialize(const std::vector<std::string>& arg_names,
178 const std::vector<std::string>& arg_values, 187 const std::vector<std::string>& arg_values,
179 bool full_frame); 188 bool full_frame);
180 bool HandleDocumentLoad(PPB_URLLoader_Impl* loader); 189 bool HandleDocumentLoad(const WebKit::WebURLResponse& response);
181 bool HandleInputEvent(const WebKit::WebInputEvent& event, 190 bool HandleInputEvent(const WebKit::WebInputEvent& event,
182 WebKit::WebCursorInfo* cursor_info); 191 WebKit::WebCursorInfo* cursor_info);
183 PP_Var GetInstanceObject(); 192 PP_Var GetInstanceObject();
184 void ViewChanged(const gfx::Rect& position, const gfx::Rect& clip, 193 void ViewChanged(const gfx::Rect& position, const gfx::Rect& clip,
185 const std::vector<gfx::Rect>& cut_outs_rects); 194 const std::vector<gfx::Rect>& cut_outs_rects);
186 195
187 // Handlers for composition events. 196 // Handlers for composition events.
188 bool HandleCompositionStart(const base::string16& text); 197 bool HandleCompositionStart(const base::string16& text);
189 bool HandleCompositionUpdate( 198 bool HandleCompositionUpdate(
190 const base::string16& text, 199 const base::string16& text,
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 // Simulates an input event to the plugin by passing it down to WebKit, 354 // Simulates an input event to the plugin by passing it down to WebKit,
346 // which sends it back up to the plugin as if it came from the user. 355 // which sends it back up to the plugin as if it came from the user.
347 void SimulateInputEvent(const ::ppapi::InputEventData& input_event); 356 void SimulateInputEvent(const ::ppapi::InputEventData& input_event);
348 357
349 // Simulates an IME event at the level of RenderView which sends it back up to 358 // Simulates an IME event at the level of RenderView which sends it back up to
350 // the plugin as if it came from the user. 359 // the plugin as if it came from the user.
351 bool SimulateIMEEvent(const ::ppapi::InputEventData& input_event); 360 bool SimulateIMEEvent(const ::ppapi::InputEventData& input_event);
352 void SimulateImeSetCompositionEvent( 361 void SimulateImeSetCompositionEvent(
353 const ::ppapi::InputEventData& input_event); 362 const ::ppapi::InputEventData& input_event);
354 363
364 // The document loader is valid when the plugin is "full-frame" and in this
365 // case is non-NULL as long as the corresponding loader resource is alive.
366 // This pointer is non-owning, so the loader must use set_document_loader to
367 // clear itself when it is destroyed.
368 WebKit::WebURLLoaderClient* document_loader() const {
369 return document_loader_;
370 }
371 void set_document_loader(WebKit::WebURLLoaderClient* loader) {
372 document_loader_ = loader;
373 }
374
355 ContentDecryptorDelegate* GetContentDecryptorDelegate(); 375 ContentDecryptorDelegate* GetContentDecryptorDelegate();
356 376
357 // PPB_Instance_API implementation. 377 // PPB_Instance_API implementation.
358 virtual PP_Bool BindGraphics(PP_Instance instance, 378 virtual PP_Bool BindGraphics(PP_Instance instance,
359 PP_Resource device) OVERRIDE; 379 PP_Resource device) OVERRIDE;
360 virtual PP_Bool IsFullFrame(PP_Instance instance) OVERRIDE; 380 virtual PP_Bool IsFullFrame(PP_Instance instance) OVERRIDE;
361 virtual const ::ppapi::ViewData* GetViewData(PP_Instance instance) OVERRIDE; 381 virtual const ::ppapi::ViewData* GetViewData(PP_Instance instance) OVERRIDE;
362 virtual PP_Bool FlashIsFullscreen(PP_Instance instance) OVERRIDE; 382 virtual PP_Bool FlashIsFullscreen(PP_Instance instance) OVERRIDE;
363 virtual PP_Var GetWindowObject(PP_Instance instance) OVERRIDE; 383 virtual PP_Var GetWindowObject(PP_Instance instance) OVERRIDE;
364 virtual PP_Var GetOwnerElementObject(PP_Instance instance) OVERRIDE; 384 virtual PP_Var GetOwnerElementObject(PP_Instance instance) OVERRIDE;
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 // Checks whether this is a valid instance of the given module. After calling 498 // Checks whether this is a valid instance of the given module. After calling
479 // ResetAsProxied above, a NaCl plugin instance's module changes, so external 499 // ResetAsProxied above, a NaCl plugin instance's module changes, so external
480 // hosts won't recognize it as a valid instance of the original module. This 500 // hosts won't recognize it as a valid instance of the original module. This
481 // method fixes that be checking that either module_ or original_module_ match 501 // method fixes that be checking that either module_ or original_module_ match
482 // the given module. 502 // the given module.
483 bool IsValidInstanceOf(PluginModule* module); 503 bool IsValidInstanceOf(PluginModule* module);
484 504
485 private: 505 private:
486 friend class PpapiUnittest; 506 friend class PpapiUnittest;
487 507
508 // Class to record document load notifications and play them back once the
509 // real document loader becomes available. Used only by NaCl instances.
510 class NaClDocumentLoader : public WebKit::WebURLLoaderClient {
511 public:
512 NaClDocumentLoader();
513 virtual ~NaClDocumentLoader();
514
515 void ReplayReceivedData(WebURLLoaderClient* document_loader);
516
517 // WebKit::WebURLLoaderClient implementation.
518 virtual void didReceiveData(WebKit::WebURLLoader* loader,
519 const char* data,
520 int data_length,
521 int encoded_data_length);
522 virtual void didFinishLoading(WebKit::WebURLLoader* loader,
523 double finish_time);
524 virtual void didFail(WebKit::WebURLLoader* loader,
525 const WebKit::WebURLError& error);
526
527 private:
528 std::list<std::string> data_;
529 bool finished_loading_;
530 scoped_ptr<WebKit::WebURLError> error_;
531 };
532
488 // Implements PPB_Gamepad_API. This is just to avoid having an excessive 533 // Implements PPB_Gamepad_API. This is just to avoid having an excessive
489 // number of interfaces implemented by PluginInstance. 534 // number of interfaces implemented by PluginInstance.
490 class GamepadImpl : public ::ppapi::thunk::PPB_Gamepad_API, 535 class GamepadImpl : public ::ppapi::thunk::PPB_Gamepad_API,
491 public ::ppapi::Resource { 536 public ::ppapi::Resource {
492 public: 537 public:
493 explicit GamepadImpl(PluginDelegate* delegate); 538 explicit GamepadImpl(PluginDelegate* delegate);
494 // Resource implementation. 539 // Resource implementation.
495 virtual ::ppapi::thunk::PPB_Gamepad_API* AsPPB_Gamepad_API() OVERRIDE; 540 virtual ::ppapi::thunk::PPB_Gamepad_API* AsPPB_Gamepad_API() OVERRIDE;
496 virtual void Sample(PP_Instance instance, 541 virtual void Sample(PP_Instance instance,
497 PP_GamepadsSampleData* data) OVERRIDE; 542 PP_GamepadsSampleData* data) OVERRIDE;
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 // Track pending user gestures so out-of-process plugins can respond to 816 // Track pending user gestures so out-of-process plugins can respond to
772 // a user gesture after it has been processed. 817 // a user gesture after it has been processed.
773 PP_TimeTicks pending_user_gesture_; 818 PP_TimeTicks pending_user_gesture_;
774 WebKit::WebUserGestureToken pending_user_gesture_token_; 819 WebKit::WebUserGestureToken pending_user_gesture_token_;
775 820
776 // We store the arguments so we can re-send them if we are reset to talk to 821 // We store the arguments so we can re-send them if we are reset to talk to
777 // NaCl via the IPC NaCl proxy. 822 // NaCl via the IPC NaCl proxy.
778 std::vector<std::string> argn_; 823 std::vector<std::string> argn_;
779 std::vector<std::string> argv_; 824 std::vector<std::string> argv_;
780 825
781 // This is NULL unless HandleDocumentLoad has called. In that case, we store 826 // Non-owning pointer to the document loader, if any.
782 // the pointer so we can re-send it later if we are reset to talk to NaCl. 827 WebKit::WebURLLoaderClient* document_loader_;
783 scoped_refptr<PPB_URLLoader_Impl> document_loader_; 828 // State for deferring document loads. Used only by NaCl instances.
829 WebKit::WebURLResponse nacl_document_response_;
830 scoped_ptr<NaClDocumentLoader> nacl_document_loader_;
831 bool nacl_document_load_;
784 832
785 // The ContentDecryptorDelegate forwards PPP_ContentDecryptor_Private 833 // The ContentDecryptorDelegate forwards PPP_ContentDecryptor_Private
786 // calls and handles PPB_ContentDecryptor_Private calls. 834 // calls and handles PPB_ContentDecryptor_Private calls.
787 scoped_ptr<ContentDecryptorDelegate> content_decryptor_delegate_; 835 scoped_ptr<ContentDecryptorDelegate> content_decryptor_delegate_;
788 836
789 friend class PpapiPluginInstanceTest; 837 friend class PpapiPluginInstanceTest;
790 DISALLOW_COPY_AND_ASSIGN(PluginInstance); 838 DISALLOW_COPY_AND_ASSIGN(PluginInstance);
791 }; 839 };
792 840
793 } // namespace ppapi 841 } // namespace ppapi
794 } // namespace webkit 842 } // namespace webkit
795 843
796 #endif // WEBKIT_PLUGINS_PPAPI_PPAPI_PLUGIN_INSTANCE_H_ 844 #endif // WEBKIT_PLUGINS_PPAPI_PPAPI_PLUGIN_INSTANCE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698