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); |
}; |