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

Unified Diff: components/plugins/renderer/webview_plugin.h

Issue 2600253003: Fix plugin placeholders not loading (Closed)
Patch Set: Created 4 years 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 side-by-side diff with in-line comments
Download patch
Index: components/plugins/renderer/webview_plugin.h
diff --git a/components/plugins/renderer/webview_plugin.h b/components/plugins/renderer/webview_plugin.h
index 712fc0e8bfd3e866790cf639301d41cafbec7fa3..7f4ad1045a850bad918d6c85c898a0247a61a71a 100644
--- a/components/plugins/renderer/webview_plugin.h
+++ b/components/plugins/renderer/webview_plugin.h
@@ -36,7 +36,6 @@ struct WebPreferences;
// chrome:// URL as origin.
class WebViewPlugin : public blink::WebPlugin,
- public blink::WebViewClient,
public content::RenderViewObserver {
public:
class Delegate {
@@ -67,11 +66,15 @@ class WebViewPlugin : public blink::WebPlugin,
const std::string& html_data,
const GURL& url);
- blink::WebView* web_view() { return web_view_; }
+ blink::WebView* web_view() { return web_view_helper_.web_view(); }
- bool focused() const { return focused_; }
const blink::WebString& old_title() const { return old_title_; }
+ // When loading a plugin document (i.e. a full page plugin not embedded in
+ // another page), we save all data that has been received, and replay it with
+ // this method on the actual plugin.
+ void ReplayReceivedData(blink::WebPlugin* plugin);
+
// WebPlugin methods:
blink::WebPluginContainer* container() const override;
// The WebViewPlugin, by design, never fails to initialize. It's used to
@@ -103,27 +106,6 @@ class WebViewPlugin : public blink::WebPlugin,
void didFinishLoading() override;
void didFailLoading(const blink::WebURLError& error) override;
- // WebViewClient methods:
- bool acceptsLoadDrops() override;
-
- void setToolTipText(const blink::WebString&,
- blink::WebTextDirection) override;
-
- void startDragging(blink::WebReferrerPolicy,
- const blink::WebDragData&,
- blink::WebDragOperationsMask,
- const blink::WebImage&,
- const blink::WebPoint&) override;
-
- // TODO(ojan): Remove this override and have this class use a non-null
- // layerTreeView.
- bool allowsBrokenNullLayerTreeView() const override;
-
- // WebWidgetClient methods:
- void didInvalidateRect(const blink::WebRect&) override;
- void didChangeCursor(const blink::WebCursorInfo& cursor) override;
- void scheduleAnimation() override;
-
private:
friend class base::DeleteHelper<WebViewPlugin>;
WebViewPlugin(content::RenderView* render_view,
@@ -132,7 +114,7 @@ class WebViewPlugin : public blink::WebPlugin,
~WebViewPlugin() override;
// content::RenderViewObserver methods:
- void OnDestruct() override;
+ void OnDestruct() override {}
void OnZoomLevelChanged() override;
void UpdatePluginForNewGeometry(const blink::WebRect& window_rect,
@@ -146,27 +128,55 @@ class WebViewPlugin : public blink::WebPlugin,
// Owns us.
blink::WebPluginContainer* container_;
- // Owned by us, deleted via |close()|.
- blink::WebView* web_view_;
-
gfx::Rect rect_;
+ blink::WebURLResponse response_;
+ std::list<std::string> data_;
+ std::unique_ptr<blink::WebURLError> error_;
blink::WebString old_title_;
+ bool finished_loading_;
bool focused_;
bool is_painting_;
bool is_resizing_;
- // A helper needed to create a WebLocalFrame.
- class PluginWebFrameClient : public blink::WebFrameClient {
+ // A helper that handles interaction from WebViewPlugin's internal WebView.
+ class WebViewHelper : public blink::WebViewClient,
+ public blink::WebFrameClient {
public:
- PluginWebFrameClient(WebViewPlugin* plugin) : plugin_(plugin) {}
- ~PluginWebFrameClient() override {}
+ WebViewHelper(WebViewPlugin* plugin,
+ const content::WebPreferences& preferences);
+ ~WebViewHelper() override;
+
+ blink::WebView* web_view() { return web_view_; }
+
+ // WebViewClient methods:
+ bool acceptsLoadDrops() override;
+
+ // WebWidgetClient methods:
+ void setToolTipText(const blink::WebString&,
+ blink::WebTextDirection) override;
+ void startDragging(blink::WebReferrerPolicy,
+ const blink::WebDragData&,
+ blink::WebDragOperationsMask,
+ const blink::WebImage&,
+ const blink::WebPoint&) override;
+ // TODO(ojan): Remove this override and have this class use a non-null
+ // layerTreeView.
+ bool allowsBrokenNullLayerTreeView() const override;
+ void didInvalidateRect(const blink::WebRect&) override;
+ void didChangeCursor(const blink::WebCursorInfo& cursor) override;
+ void scheduleAnimation() override;
+
+ // WebFrameClient methods:
void didClearWindowObject(blink::WebLocalFrame* frame) override;
private:
WebViewPlugin* plugin_;
+
+ // Owned by us, deleted via |close()|.
+ blink::WebView* web_view_;
};
- PluginWebFrameClient web_frame_client_;
+ WebViewHelper web_view_helper_;
// Should be invalidated when destroy() is called.
base::WeakPtrFactory<WebViewPlugin> weak_factory_;

Powered by Google App Engine
This is Rietveld 408576698