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

Side by Side Diff: extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.cc

Issue 874293004: Ensure that entries are correctly removed from the MimeHandlerViewContainer map (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 months 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 unified diff | Download patch
« no previous file with comments | « extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698