| 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 "content/public/renderer/render_frame.h" | 10 #include "content/public/renderer/render_frame.h" |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 weak_factory_(this) { | 95 weak_factory_(this) { |
| 96 DCHECK(!mime_type_.empty()); | 96 DCHECK(!mime_type_.empty()); |
| 97 is_embedded_ = !render_frame->GetWebFrame()->document().isPluginDocument(); | 97 is_embedded_ = !render_frame->GetWebFrame()->document().isPluginDocument(); |
| 98 g_mime_handler_view_container_map.Get()[render_frame].insert(this); | 98 g_mime_handler_view_container_map.Get()[render_frame].insert(this); |
| 99 } | 99 } |
| 100 | 100 |
| 101 MimeHandlerViewContainer::~MimeHandlerViewContainer() { | 101 MimeHandlerViewContainer::~MimeHandlerViewContainer() { |
| 102 if (loader_) | 102 if (loader_) |
| 103 loader_->cancel(); | 103 loader_->cancel(); |
| 104 | 104 |
| 105 g_mime_handler_view_container_map.Get()[render_frame()].erase(this); | 105 if (render_frame()) { |
| 106 if (g_mime_handler_view_container_map.Get()[render_frame()].empty()) | 106 g_mime_handler_view_container_map.Get()[render_frame()].erase(this); |
| 107 g_mime_handler_view_container_map.Get().erase(render_frame()); | 107 if (g_mime_handler_view_container_map.Get()[render_frame()].empty()) |
| 108 g_mime_handler_view_container_map.Get().erase(render_frame()); |
| 109 } |
| 108 } | 110 } |
| 109 | 111 |
| 110 // static | 112 // static |
| 111 std::vector<MimeHandlerViewContainer*> | 113 std::vector<MimeHandlerViewContainer*> |
| 112 MimeHandlerViewContainer::FromRenderFrame(content::RenderFrame* render_frame) { | 114 MimeHandlerViewContainer::FromRenderFrame(content::RenderFrame* render_frame) { |
| 113 auto it = g_mime_handler_view_container_map.Get().find(render_frame); | 115 auto it = g_mime_handler_view_container_map.Get().find(render_frame); |
| 114 if (it == g_mime_handler_view_container_map.Get().end()) | 116 if (it == g_mime_handler_view_container_map.Get().end()) |
| 115 return std::vector<MimeHandlerViewContainer*>(); | 117 return std::vector<MimeHandlerViewContainer*>(); |
| 116 | 118 |
| 117 return std::vector<MimeHandlerViewContainer*>(it->second.begin(), | 119 return std::vector<MimeHandlerViewContainer*>(it->second.begin(), |
| 118 it->second.end()); | 120 it->second.end()); |
| 119 } | 121 } |
| 120 | 122 |
| 121 void MimeHandlerViewContainer::Ready() { | 123 void MimeHandlerViewContainer::Ready() { |
| 124 if (!render_frame()) |
| 125 return; |
| 126 |
| 122 blink::WebFrame* frame = render_frame()->GetWebFrame(); | 127 blink::WebFrame* frame = render_frame()->GetWebFrame(); |
| 123 blink::WebURLLoaderOptions options; | 128 blink::WebURLLoaderOptions options; |
| 124 // The embedded plugin is allowed to be cross-origin. | 129 // The embedded plugin is allowed to be cross-origin. |
| 125 options.crossOriginRequestPolicy = | 130 options.crossOriginRequestPolicy = |
| 126 blink::WebURLLoaderOptions::CrossOriginRequestPolicyAllow; | 131 blink::WebURLLoaderOptions::CrossOriginRequestPolicyAllow; |
| 127 DCHECK(!loader_); | 132 DCHECK(!loader_); |
| 128 loader_.reset(frame->createAssociatedURLLoader(options)); | 133 loader_.reset(frame->createAssociatedURLLoader(options)); |
| 129 | 134 |
| 130 blink::WebURLRequest request(original_url_); | 135 blink::WebURLRequest request(original_url_); |
| 131 request.setRequestContext(blink::WebURLRequest::RequestContextObject); | 136 request.setRequestContext(blink::WebURLRequest::RequestContextObject); |
| 132 loader_->loadAsynchronously(request, this); | 137 loader_->loadAsynchronously(request, this); |
| 133 } | 138 } |
| 134 | 139 |
| 135 void MimeHandlerViewContainer::DidFinishLoading() { | 140 void MimeHandlerViewContainer::DidFinishLoading() { |
| 136 DCHECK(!is_embedded_); | 141 DCHECK(!is_embedded_); |
| 137 CreateMimeHandlerViewGuest(); | 142 CreateMimeHandlerViewGuest(); |
| 138 } | 143 } |
| 139 | 144 |
| 145 void MimeHandlerViewContainer::OnRenderFrameDestroyed() { |
| 146 g_mime_handler_view_container_map.Get().erase(render_frame()); |
| 147 } |
| 148 |
| 140 void MimeHandlerViewContainer::DidReceiveData(const char* data, | 149 void MimeHandlerViewContainer::DidReceiveData(const char* data, |
| 141 int data_length) { | 150 int data_length) { |
| 142 view_id_ += std::string(data, data_length); | 151 view_id_ += std::string(data, data_length); |
| 143 } | 152 } |
| 144 | 153 |
| 145 bool MimeHandlerViewContainer::OnMessageReceived(const IPC::Message& message) { | 154 bool MimeHandlerViewContainer::OnMessageReceived(const IPC::Message& message) { |
| 146 bool handled = true; | 155 bool handled = true; |
| 147 IPC_BEGIN_MESSAGE_MAP(MimeHandlerViewContainer, message) | 156 IPC_BEGIN_MESSAGE_MAP(MimeHandlerViewContainer, message) |
| 148 IPC_MESSAGE_HANDLER(ExtensionMsg_CreateMimeHandlerViewGuestACK, | 157 IPC_MESSAGE_HANDLER(ExtensionMsg_CreateMimeHandlerViewGuestACK, |
| 149 OnCreateMimeHandlerViewGuestACK) | 158 OnCreateMimeHandlerViewGuestACK) |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 287 | 296 |
| 288 if (!render_frame()) | 297 if (!render_frame()) |
| 289 return; | 298 return; |
| 290 | 299 |
| 291 render_frame()->Send(new ExtensionHostMsg_CreateMimeHandlerViewGuest( | 300 render_frame()->Send(new ExtensionHostMsg_CreateMimeHandlerViewGuest( |
| 292 render_frame()->GetRoutingID(), view_id_, element_instance_id(), | 301 render_frame()->GetRoutingID(), view_id_, element_instance_id(), |
| 293 element_size_)); | 302 element_size_)); |
| 294 } | 303 } |
| 295 | 304 |
| 296 } // namespace extensions | 305 } // namespace extensions |
| OLD | NEW |