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

Unified Diff: extensions/renderer/guest_view/mime_handler_view_container.h

Issue 701713003: Support embedded plugins with MimeHandlerView. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@refactor-guest-view-container
Patch Set: Created 6 years, 1 month 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: extensions/renderer/guest_view/mime_handler_view_container.h
diff --git a/extensions/renderer/guest_view/mime_handler_view_container.h b/extensions/renderer/guest_view/mime_handler_view_container.h
index 72c93470be00e3737b87720dcf95f2a562e29d98..5fcf51637814afd5ada14b88d104c5dbbcd331e7 100644
--- a/extensions/renderer/guest_view/mime_handler_view_container.h
+++ b/extensions/renderer/guest_view/mime_handler_view_container.h
@@ -6,29 +6,76 @@
#define EXTENSIONS_RENDERER_GUEST_VIEW_MIME_HANDLER_VIEW_CONTAINER_H_
#include "extensions/renderer/guest_view/guest_view_container.h"
+#include "third_party/WebKit/public/platform/WebURLLoader.h"
+#include "third_party/WebKit/public/platform/WebURLLoaderClient.h"
+#include "url/gurl.h"
namespace extensions {
-class MimeHandlerViewContainer : public GuestViewContainer {
+// A container for loading up an extension inside a BrowserPlugin to handle a
+// MIME type. A request for the URL of the data to load inside the container is
+// made and a url is sent back in response which points to the URL which the
+// container should be navigated to. There are two cases for making this URL
+// request, the case where the plugin is embedded and the case where it is top
+// level:
+// 1) In the top level case a URL request for the data to load has already been
+// made by the renderer on behalf of the plugin. The |DidReceiveData| and
+// |DidFinishLoading| callbacks (from BrowserPluginDelegate) will be called
+// when data is received and when it has finished being received,
+// respectively.
+// 2) In the embedded case, no URL request is automatically made by the
+// renderer. We make a URL request for the data inside the container using
+// a WebURLLoader. In this case, the |didReceiveData| and |didFinishLoading|
+// (from WebURLLoaderClient) when data is received and when it has finished
+// being received.
+class MimeHandlerViewContainer : public GuestViewContainer,
+ public blink::WebURLLoaderClient {
public:
MimeHandlerViewContainer(content::RenderFrame* render_frame,
- const std::string& mime_type);
+ const std::string& mime_type,
+ const GURL& original_url);
~MimeHandlerViewContainer() override;
// BrowserPluginDelegate implementation.
void DidFinishLoading() override;
void DidReceiveData(const char* data, int data_length) override;
+ void Ready() override;
- // GuestViewContainer override.
+ // GuestViewContainer overrides.
bool HandlesMessage(const IPC::Message& message) override;
bool OnMessage(const IPC::Message& message) override;
+ // WebURLLoaderClient overrides.
+ void didReceiveData(blink::WebURLLoader* loader,
+ const char* data,
+ int data_length,
+ int encoded_data_length) override;
+ void didFinishLoading(blink::WebURLLoader* loader,
+ double finish_time,
+ int64_t total_encoded_data_length) override;
+
private:
+ // Message handlers.
void OnCreateMimeHandlerViewGuestACK(int element_instance_id);
+ void CreateMimeHandlerViewGuest();
+
+ // The MIME type of the plugin.
const std::string mime_type_;
+
+ // The URL of the extension to navigate to.
std::string html_string_;
+ // Whether the plugin is embedded or not.
+ bool is_embedded_;
+
+ // The original URL of the plugin.
+ GURL original_url_;
+
+ // A URL loader to load the |original_url_| when the plugin is embedded. In
+ // the embedded case, no URL request is made automatically.
+ scoped_ptr<blink::WebURLLoader> loader_;
+
DISALLOW_COPY_AND_ASSIGN(MimeHandlerViewContainer);
};
« no previous file with comments | « content/renderer/render_frame_impl.cc ('k') | extensions/renderer/guest_view/mime_handler_view_container.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698