| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_con
tainer.h" | 5 #include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_con
tainer.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <set> | 8 #include <set> |
| 9 | 9 |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 original_url_(original_url), | 110 original_url_(original_url), |
| 111 guest_proxy_routing_id_(-1), | 111 guest_proxy_routing_id_(-1), |
| 112 guest_loaded_(false), | 112 guest_loaded_(false), |
| 113 weak_factory_(this) { | 113 weak_factory_(this) { |
| 114 DCHECK(!mime_type_.empty()); | 114 DCHECK(!mime_type_.empty()); |
| 115 is_embedded_ = !render_frame->GetWebFrame()->document().isPluginDocument(); | 115 is_embedded_ = !render_frame->GetWebFrame()->document().isPluginDocument(); |
| 116 g_mime_handler_view_container_map.Get()[render_frame].insert(this); | 116 g_mime_handler_view_container_map.Get()[render_frame].insert(this); |
| 117 } | 117 } |
| 118 | 118 |
| 119 MimeHandlerViewContainer::~MimeHandlerViewContainer() { | 119 MimeHandlerViewContainer::~MimeHandlerViewContainer() { |
| 120 if (loader_) | 120 if (loader_) { |
| 121 DCHECK(is_embedded_); |
| 121 loader_->cancel(); | 122 loader_->cancel(); |
| 123 } |
| 122 | 124 |
| 123 if (render_frame()) { | 125 if (render_frame()) { |
| 124 g_mime_handler_view_container_map.Get()[render_frame()].erase(this); | 126 g_mime_handler_view_container_map.Get()[render_frame()].erase(this); |
| 125 if (g_mime_handler_view_container_map.Get()[render_frame()].empty()) | 127 if (g_mime_handler_view_container_map.Get()[render_frame()].empty()) |
| 126 g_mime_handler_view_container_map.Get().erase(render_frame()); | 128 g_mime_handler_view_container_map.Get().erase(render_frame()); |
| 127 } | 129 } |
| 128 } | 130 } |
| 129 | 131 |
| 130 // static | 132 // static |
| 131 std::vector<MimeHandlerViewContainer*> | 133 std::vector<MimeHandlerViewContainer*> |
| 132 MimeHandlerViewContainer::FromRenderFrame(content::RenderFrame* render_frame) { | 134 MimeHandlerViewContainer::FromRenderFrame(content::RenderFrame* render_frame) { |
| 133 auto it = g_mime_handler_view_container_map.Get().find(render_frame); | 135 auto it = g_mime_handler_view_container_map.Get().find(render_frame); |
| 134 if (it == g_mime_handler_view_container_map.Get().end()) | 136 if (it == g_mime_handler_view_container_map.Get().end()) |
| 135 return std::vector<MimeHandlerViewContainer*>(); | 137 return std::vector<MimeHandlerViewContainer*>(); |
| 136 | 138 |
| 137 return std::vector<MimeHandlerViewContainer*>(it->second.begin(), | 139 return std::vector<MimeHandlerViewContainer*>(it->second.begin(), |
| 138 it->second.end()); | 140 it->second.end()); |
| 139 } | 141 } |
| 140 | 142 |
| 141 void MimeHandlerViewContainer::OnReady() { | 143 void MimeHandlerViewContainer::OnReady() { |
| 142 if (!render_frame()) | 144 if (!render_frame() || !is_embedded_) |
| 143 return; | 145 return; |
| 144 | 146 |
| 145 blink::WebFrame* frame = render_frame()->GetWebFrame(); | 147 blink::WebFrame* frame = render_frame()->GetWebFrame(); |
| 146 blink::WebURLLoaderOptions options; | 148 blink::WebURLLoaderOptions options; |
| 147 // The embedded plugin is allowed to be cross-origin and we should always | 149 // The embedded plugin is allowed to be cross-origin and we should always |
| 148 // send credentials/cookies with the request. | 150 // send credentials/cookies with the request. |
| 149 options.crossOriginRequestPolicy = | 151 options.crossOriginRequestPolicy = |
| 150 blink::WebURLLoaderOptions::CrossOriginRequestPolicyAllow; | 152 blink::WebURLLoaderOptions::CrossOriginRequestPolicyAllow; |
| 151 options.allowCredentials = true; | 153 options.allowCredentials = true; |
| 152 DCHECK(!loader_); | 154 DCHECK(!loader_); |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 318 v8::HandleScope handle_scope(isolate); | 320 v8::HandleScope handle_scope(isolate); |
| 319 v8::Context::Scope context_scope(frame->mainWorldScriptContext()); | 321 v8::Context::Scope context_scope(frame->mainWorldScriptContext()); |
| 320 for (const auto& pending_message : pending_messages_) | 322 for (const auto& pending_message : pending_messages_) |
| 321 PostMessage(isolate, v8::Local<v8::Value>::New(isolate, *pending_message)); | 323 PostMessage(isolate, v8::Local<v8::Value>::New(isolate, *pending_message)); |
| 322 | 324 |
| 323 pending_messages_.clear(); | 325 pending_messages_.clear(); |
| 324 } | 326 } |
| 325 | 327 |
| 326 void MimeHandlerViewContainer::CreateMimeHandlerViewGuest() { | 328 void MimeHandlerViewContainer::CreateMimeHandlerViewGuest() { |
| 327 // The loader has completed loading |view_id_| so we can dispose it. | 329 // The loader has completed loading |view_id_| so we can dispose it. |
| 328 loader_.reset(); | 330 if (loader_) { |
| 331 DCHECK(is_embedded_); |
| 332 loader_.reset(); |
| 333 } |
| 329 | 334 |
| 330 DCHECK_NE(element_instance_id(), guest_view::kInstanceIDNone); | 335 DCHECK_NE(element_instance_id(), guest_view::kInstanceIDNone); |
| 331 | 336 |
| 332 if (!render_frame()) | 337 if (!render_frame()) |
| 333 return; | 338 return; |
| 334 | 339 |
| 335 render_frame()->Send( | 340 render_frame()->Send( |
| 336 new ExtensionsGuestViewHostMsg_CreateMimeHandlerViewGuest( | 341 new ExtensionsGuestViewHostMsg_CreateMimeHandlerViewGuest( |
| 337 render_frame()->GetRoutingID(), view_id_, element_instance_id(), | 342 render_frame()->GetRoutingID(), view_id_, element_instance_id(), |
| 338 element_size_)); | 343 element_size_)); |
| 339 } | 344 } |
| 340 | 345 |
| 341 } // namespace extensions | 346 } // namespace extensions |
| OLD | NEW |