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 |