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

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

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.cc
diff --git a/extensions/renderer/guest_view/mime_handler_view_container.cc b/extensions/renderer/guest_view/mime_handler_view_container.cc
index ce2868ccdf10d87caf3108ebc83c0523c2e6834f..592ffed2ffcee589c08b3148da28f547e8fab549 100644
--- a/extensions/renderer/guest_view/mime_handler_view_container.cc
+++ b/extensions/renderer/guest_view/mime_handler_view_container.cc
@@ -7,29 +7,49 @@
#include "content/public/renderer/render_frame.h"
#include "extensions/common/extension_messages.h"
#include "extensions/common/guest_view/guest_view_constants.h"
+#include "third_party/WebKit/public/web/WebDocument.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
namespace extensions {
MimeHandlerViewContainer::MimeHandlerViewContainer(
content::RenderFrame* render_frame,
- const std::string& mime_type)
+ const std::string& mime_type,
+ const GURL& original_url)
: GuestViewContainer(render_frame),
- mime_type_(mime_type) {
+ mime_type_(mime_type),
+ original_url_(original_url) {
DCHECK(!mime_type_.empty());
+ is_embedded_ = !render_frame->GetWebFrame()->document().isPluginDocument();
}
-MimeHandlerViewContainer::~MimeHandlerViewContainer() {}
+MimeHandlerViewContainer::~MimeHandlerViewContainer() {
+ if (loader_)
+ loader_->cancel();
+}
void MimeHandlerViewContainer::DidFinishLoading() {
- DCHECK_NE(element_instance_id(), guestview::kInstanceIDNone);
- render_frame()->Send(new ExtensionHostMsg_CreateMimeHandlerViewGuest(
- routing_id(), html_string_, mime_type_, element_instance_id()));
+ DCHECK(!is_embedded_);
+ CreateMimeHandlerViewGuest();
}
void MimeHandlerViewContainer::DidReceiveData(const char* data,
int data_length) {
- std::string value(data, data_length);
- html_string_ += value;
+ html_string_ += std::string(data, data_length);
+}
+
+void MimeHandlerViewContainer::Ready() {
+ blink::WebFrame* frame = render_frame()->GetWebFrame();
+ blink::WebURLLoaderOptions options;
+ // The embedded plugin is allowed to be cross-origin.
+ options.crossOriginRequestPolicy =
+ blink::WebURLLoaderOptions::CrossOriginRequestPolicyAllow;
+ DCHECK(!loader_);
+ loader_.reset(frame->createAssociatedURLLoader());
+
+ // TODO(raymes): Currently this URL request won't be correctly intercepted as
+ // a stream.
+ loader_->loadAsynchronously(blink::WebURLRequest(original_url_), this);
}
bool MimeHandlerViewContainer::HandlesMessage(const IPC::Message& message) {
@@ -46,6 +66,21 @@ bool MimeHandlerViewContainer::OnMessage(const IPC::Message& message) {
return handled;
}
+void MimeHandlerViewContainer::didReceiveData(blink::WebURLLoader* /* unused */,
+ const char* data,
+ int data_length,
+ int /* unused */) {
+ html_string_ += std::string(data, data_length);
+}
+
+void MimeHandlerViewContainer::didFinishLoading(
+ blink::WebURLLoader* /* unused */,
+ double /* unused */,
+ int64_t /* unused */) {
+ DCHECK(is_embedded_);
+ CreateMimeHandlerViewGuest();
+}
+
void MimeHandlerViewContainer::OnCreateMimeHandlerViewGuestACK(
int element_instance_id) {
DCHECK_NE(this->element_instance_id(), guestview::kInstanceIDNone);
@@ -53,4 +88,16 @@ void MimeHandlerViewContainer::OnCreateMimeHandlerViewGuestACK(
render_frame()->AttachGuest(element_instance_id);
}
+void MimeHandlerViewContainer::CreateMimeHandlerViewGuest() {
+ // The loader has completed loading |html_string_| so we can dispose it.
+ loader_.reset();
+
+ // Parse the stream URL to ensure it's valid.
+ GURL stream_url(html_string_);
+
+ DCHECK_NE(element_instance_id(), guestview::kInstanceIDNone);
+ render_frame()->Send(new ExtensionHostMsg_CreateMimeHandlerViewGuest(
+ routing_id(), stream_url.spec(), mime_type_, element_instance_id()));
+}
+
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698