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

Side by Side Diff: components/plugins/renderer/webview_plugin.h

Issue 2344023002: Delete ReplayReceivedData, make WebViewPlugin not a WebFrameClient (Closed)
Patch Set: PluginWebFrameClient::plugin_ should be private Created 4 years, 3 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 COMPONENTS_PLUGINS_RENDERER_WEBVIEW_PLUGIN_H_ 5 #ifndef COMPONENTS_PLUGINS_RENDERER_WEBVIEW_PLUGIN_H_
6 #define COMPONENTS_PLUGINS_RENDERER_WEBVIEW_PLUGIN_H_ 6 #define COMPONENTS_PLUGINS_RENDERER_WEBVIEW_PLUGIN_H_
7 7
8 #include <list> 8 #include <list>
9 #include <memory> 9 #include <memory>
10 10
(...skipping 24 matching lines...) Expand all
35 35
36 // This class implements the WebPlugin interface by forwarding drawing and 36 // This class implements the WebPlugin interface by forwarding drawing and
37 // handling input events to a WebView. 37 // handling input events to a WebView.
38 // It can be used as a placeholder for an actual plugin, using HTML for the UI. 38 // It can be used as a placeholder for an actual plugin, using HTML for the UI.
39 // To show HTML data inside the WebViewPlugin, 39 // To show HTML data inside the WebViewPlugin,
40 // call web_view->mainFrame()->loadHTMLString() with the HTML data and a fake 40 // call web_view->mainFrame()->loadHTMLString() with the HTML data and a fake
41 // chrome:// URL as origin. 41 // chrome:// URL as origin.
42 42
43 class WebViewPlugin : public blink::WebPlugin, 43 class WebViewPlugin : public blink::WebPlugin,
44 public blink::WebViewClient, 44 public blink::WebViewClient,
45 public blink::WebFrameClient,
46 public content::RenderViewObserver { 45 public content::RenderViewObserver {
47 public: 46 public:
48 class Delegate { 47 class Delegate {
49 public: 48 public:
50 // Called to get the V8 handle used to bind the lifetime to the frame. 49 // Called to get the V8 handle used to bind the lifetime to the frame.
51 virtual v8::Local<v8::Value> GetV8Handle(v8::Isolate*) = 0; 50 virtual v8::Local<v8::Value> GetV8Handle(v8::Isolate*) = 0;
52 51
53 // Called upon a context menu event. 52 // Called upon a context menu event.
54 virtual void ShowContextMenu(const blink::WebMouseEvent&) = 0; 53 virtual void ShowContextMenu(const blink::WebMouseEvent&) = 0;
55 54
(...skipping 12 matching lines...) Expand all
68 // and displaying |html_data|. |url| should be a (fake) data:text/html URL; 67 // and displaying |html_data|. |url| should be a (fake) data:text/html URL;
69 // it is only used for navigation and never actually resolved. 68 // it is only used for navigation and never actually resolved.
70 static WebViewPlugin* Create(content::RenderView* render_view, 69 static WebViewPlugin* Create(content::RenderView* render_view,
71 Delegate* delegate, 70 Delegate* delegate,
72 const content::WebPreferences& preferences, 71 const content::WebPreferences& preferences,
73 const std::string& html_data, 72 const std::string& html_data,
74 const GURL& url); 73 const GURL& url);
75 74
76 blink::WebView* web_view() { return web_view_; } 75 blink::WebView* web_view() { return web_view_; }
77 76
78 // When loading a plugin document (i.e. a full page plugin not embedded in 77 bool focused() const { return focused_; }
79 // another page), we save all data that has been received, and replay it with 78 const blink::WebString& old_title() const { return old_title_; }
80 // this method on the actual plugin.
81 void ReplayReceivedData(blink::WebPlugin* plugin);
82
83 void RestoreTitleText();
84 79
85 // WebPlugin methods: 80 // WebPlugin methods:
86 blink::WebPluginContainer* container() const override; 81 blink::WebPluginContainer* container() const override;
87 // The WebViewPlugin, by design, never fails to initialize. It's used to 82 // The WebViewPlugin, by design, never fails to initialize. It's used to
88 // display placeholders and error messages, so it must never fail. 83 // display placeholders and error messages, so it must never fail.
89 bool initialize(blink::WebPluginContainer*) override; 84 bool initialize(blink::WebPluginContainer*) override;
90 void destroy() override; 85 void destroy() override;
91 86
92 v8::Local<v8::Object> v8ScriptableObject(v8::Isolate* isolate) override; 87 v8::Local<v8::Object> v8ScriptableObject(v8::Isolate* isolate) override;
93 88
94 void updateAllLifecyclePhases() override; 89 void updateAllLifecyclePhases() override;
95 void paint(blink::WebCanvas* canvas, const blink::WebRect& rect) override; 90 void paint(blink::WebCanvas* canvas, const blink::WebRect& rect) override;
96 91
97 // Coordinates are relative to the containing window. 92 // Coordinates are relative to the containing window.
98 void updateGeometry(const blink::WebRect& window_rect, 93 void updateGeometry(const blink::WebRect& window_rect,
99 const blink::WebRect& clip_rect, 94 const blink::WebRect& clip_rect,
100 const blink::WebRect& unobscured_rect, 95 const blink::WebRect& unobscured_rect,
101 const blink::WebVector<blink::WebRect>& cut_outs_rects, 96 const blink::WebVector<blink::WebRect>& cut_outs_rects,
102 bool is_visible) override; 97 bool is_visible) override;
103 98
104 void updateFocus(bool foucsed, blink::WebFocusType focus_type) override; 99 void updateFocus(bool foucsed, blink::WebFocusType focus_type) override;
105 void updateVisibility(bool) override {} 100 void updateVisibility(bool) override {}
106 101
107 blink::WebInputEventResult handleInputEvent( 102 blink::WebInputEventResult handleInputEvent(
108 const blink::WebInputEvent& event, 103 const blink::WebInputEvent& event,
109 blink::WebCursorInfo& cursor_info) override; 104 blink::WebCursorInfo& cursor_info) override;
110 105
111 // didReceiveResponse() overrides both WebPlugin and WebFrameClient. 106 void didReceiveResponse(const blink::WebURLResponse& response) override;
112 // The WebFrameClient variant receives callbacks, but the WebPlugin variant
113 // shouldn't.
114 // TODO(japhet): WebViewPlugin shouldn't be a WebFrameClient, after which
115 // didReceiveResponse() should have a NOTREACHED().
116 void didReceiveResponse(const blink::WebURLResponse& response) override {}
117 void didReceiveData(const char* data, int data_length) override; 107 void didReceiveData(const char* data, int data_length) override;
118 void didFinishLoading() override; 108 void didFinishLoading() override;
119 void didFailLoading(const blink::WebURLError& error) override; 109 void didFailLoading(const blink::WebURLError& error) override;
120 110
121 // WebViewClient methods: 111 // WebViewClient methods:
122 bool acceptsLoadDrops() override; 112 bool acceptsLoadDrops() override;
123 113
124 void setToolTipText(const blink::WebString&, 114 void setToolTipText(const blink::WebString&,
125 blink::WebTextDirection) override; 115 blink::WebTextDirection) override;
126 116
127 void startDragging(blink::WebLocalFrame* frame, 117 void startDragging(blink::WebLocalFrame* frame,
128 const blink::WebDragData& drag_data, 118 const blink::WebDragData& drag_data,
129 blink::WebDragOperationsMask mask, 119 blink::WebDragOperationsMask mask,
130 const blink::WebImage& image, 120 const blink::WebImage& image,
131 const blink::WebPoint& point) override; 121 const blink::WebPoint& point) override;
132 122
133 // TODO(ojan): Remove this override and have this class use a non-null 123 // TODO(ojan): Remove this override and have this class use a non-null
134 // layerTreeView. 124 // layerTreeView.
135 bool allowsBrokenNullLayerTreeView() const override; 125 bool allowsBrokenNullLayerTreeView() const override;
136 126
137 // WebWidgetClient methods: 127 // WebWidgetClient methods:
138 void didInvalidateRect(const blink::WebRect&) override; 128 void didInvalidateRect(const blink::WebRect&) override;
139 void didChangeCursor(const blink::WebCursorInfo& cursor) override; 129 void didChangeCursor(const blink::WebCursorInfo& cursor) override;
140 void scheduleAnimation() override; 130 void scheduleAnimation() override;
141 131
142 // WebFrameClient methods:
143 void didClearWindowObject(blink::WebLocalFrame* frame) override;
144
145 private: 132 private:
146 friend class base::DeleteHelper<WebViewPlugin>; 133 friend class base::DeleteHelper<WebViewPlugin>;
147 WebViewPlugin(content::RenderView* render_view, 134 WebViewPlugin(content::RenderView* render_view,
148 Delegate* delegate, 135 Delegate* delegate,
149 const content::WebPreferences& preferences); 136 const content::WebPreferences& preferences);
150 ~WebViewPlugin() override; 137 ~WebViewPlugin() override;
151 138
152 // content::RenderViewObserver methods: 139 // content::RenderViewObserver methods:
153 void OnDestruct() override; 140 void OnDestruct() override;
154 void OnZoomLevelChanged() override; 141 void OnZoomLevelChanged() override;
(...skipping 12 matching lines...) Expand all
167 // Owned by us, deleted via |close()|. 154 // Owned by us, deleted via |close()|.
168 blink::WebView* web_view_; 155 blink::WebView* web_view_;
169 156
170 // Owned by us, deleted via |close()|. 157 // Owned by us, deleted via |close()|.
171 blink::WebFrameWidget* web_frame_widget_; 158 blink::WebFrameWidget* web_frame_widget_;
172 159
173 // Owned by us, deleted via |close()|. 160 // Owned by us, deleted via |close()|.
174 blink::WebFrame* web_frame_; 161 blink::WebFrame* web_frame_;
175 gfx::Rect rect_; 162 gfx::Rect rect_;
176 163
177 std::list<std::string> data_;
178 std::unique_ptr<blink::WebURLError> error_;
179 blink::WebString old_title_; 164 blink::WebString old_title_;
180 bool finished_loading_;
181 bool focused_; 165 bool focused_;
182 bool is_painting_; 166 bool is_painting_;
183 bool is_resizing_; 167 bool is_resizing_;
184 168
169 // A helper needed to create a WebLocalFrame.
170 class PluginWebFrameClient : public blink::WebFrameClient {
171 public:
172 PluginWebFrameClient(WebViewPlugin* plugin) : plugin_(plugin) {}
173 ~PluginWebFrameClient() override {}
174 void didClearWindowObject(blink::WebLocalFrame* frame) override;
175
176 private:
177 WebViewPlugin* plugin_;
178 };
179 PluginWebFrameClient web_frame_client_;
180
185 // Should be invalidated when destroy() is called. 181 // Should be invalidated when destroy() is called.
186 base::WeakPtrFactory<WebViewPlugin> weak_factory_; 182 base::WeakPtrFactory<WebViewPlugin> weak_factory_;
187 }; 183 };
188 184
189 #endif // COMPONENTS_PLUGINS_RENDERER_WEBVIEW_PLUGIN_H_ 185 #endif // COMPONENTS_PLUGINS_RENDERER_WEBVIEW_PLUGIN_H_
OLDNEW
« no previous file with comments | « components/plugins/renderer/loadable_plugin_placeholder.cc ('k') | components/plugins/renderer/webview_plugin.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698