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

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

Issue 858363002: OOP PDF: Override printing for MimeHandlerViewContainers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mime-handler-api-simpler
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
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>
8 #include <set>
9
7 #include "content/public/renderer/render_frame.h" 10 #include "content/public/renderer/render_frame.h"
8 #include "content/public/renderer/render_view.h" 11 #include "content/public/renderer/render_view.h"
12 #include "content/public/renderer/v8_value_converter.h"
9 #include "extensions/common/extension_messages.h" 13 #include "extensions/common/extension_messages.h"
10 #include "extensions/common/guest_view/guest_view_constants.h" 14 #include "extensions/common/guest_view/guest_view_constants.h"
11 #include "gin/arguments.h" 15 #include "gin/arguments.h"
12 #include "gin/dictionary.h" 16 #include "gin/dictionary.h"
13 #include "gin/handle.h" 17 #include "gin/handle.h"
14 #include "gin/interceptor.h" 18 #include "gin/interceptor.h"
15 #include "gin/object_template_builder.h" 19 #include "gin/object_template_builder.h"
16 #include "gin/wrappable.h" 20 #include "gin/wrappable.h"
17 #include "third_party/WebKit/public/web/WebDocument.h" 21 #include "third_party/WebKit/public/web/WebDocument.h"
18 #include "third_party/WebKit/public/web/WebLocalFrame.h" 22 #include "third_party/WebKit/public/web/WebLocalFrame.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 return gin::Wrappable<ScriptableObject>::GetObjectTemplateBuilder(isolate) 67 return gin::Wrappable<ScriptableObject>::GetObjectTemplateBuilder(isolate)
64 .AddNamedPropertyInterceptor(); 68 .AddNamedPropertyInterceptor();
65 } 69 }
66 70
67 base::WeakPtr<MimeHandlerViewContainer> container_; 71 base::WeakPtr<MimeHandlerViewContainer> container_;
68 }; 72 };
69 73
70 // static 74 // static
71 gin::WrapperInfo ScriptableObject::kWrapperInfo = { gin::kEmbedderNativeGin }; 75 gin::WrapperInfo ScriptableObject::kWrapperInfo = { gin::kEmbedderNativeGin };
72 76
77 base::LazyInstance<
raymes 2015/01/22 00:58:57 Please add a comment about what this tracks
Sam McNally 2015/01/22 03:23:29 Done.
78 std::map<content::RenderFrame*, std::set<MimeHandlerViewContainer*>>>
79 g_mime_handler_view_container_map = LAZY_INSTANCE_INITIALIZER;
80
73 } // namespace 81 } // namespace
74 82
75 MimeHandlerViewContainer::MimeHandlerViewContainer( 83 MimeHandlerViewContainer::MimeHandlerViewContainer(
76 content::RenderFrame* render_frame, 84 content::RenderFrame* render_frame,
77 const std::string& mime_type, 85 const std::string& mime_type,
78 const GURL& original_url) 86 const GURL& original_url)
79 : GuestViewContainer(render_frame), 87 : GuestViewContainer(render_frame),
80 mime_type_(mime_type), 88 mime_type_(mime_type),
81 original_url_(original_url), 89 original_url_(original_url),
82 guest_proxy_routing_id_(-1), 90 guest_proxy_routing_id_(-1),
83 guest_loaded_(false), 91 guest_loaded_(false),
84 weak_factory_(this) { 92 weak_factory_(this) {
85 DCHECK(!mime_type_.empty()); 93 DCHECK(!mime_type_.empty());
86 is_embedded_ = !render_frame->GetWebFrame()->document().isPluginDocument(); 94 is_embedded_ = !render_frame->GetWebFrame()->document().isPluginDocument();
95 g_mime_handler_view_container_map.Get()[render_frame].insert(this);
87 } 96 }
88 97
89 MimeHandlerViewContainer::~MimeHandlerViewContainer() { 98 MimeHandlerViewContainer::~MimeHandlerViewContainer() {
90 if (loader_) 99 if (loader_)
91 loader_->cancel(); 100 loader_->cancel();
101
102 g_mime_handler_view_container_map.Get()[render_frame()].erase(this);
103 if (g_mime_handler_view_container_map.Get()[render_frame()].empty())
104 g_mime_handler_view_container_map.Get().erase(render_frame());
105 }
106
107 // static
108 std::vector<MimeHandlerViewContainer*>
109 MimeHandlerViewContainer::FromRenderFrame(content::RenderFrame* render_frame) {
110 auto it = g_mime_handler_view_container_map.Get().find(render_frame);
111 if (it == g_mime_handler_view_container_map.Get().end())
112 return std::vector<MimeHandlerViewContainer*>();
113
114 return std::vector<MimeHandlerViewContainer*>(it->second.begin(),
115 it->second.end());
92 } 116 }
93 117
94 void MimeHandlerViewContainer::Ready() { 118 void MimeHandlerViewContainer::Ready() {
95 blink::WebFrame* frame = render_frame()->GetWebFrame(); 119 blink::WebFrame* frame = render_frame()->GetWebFrame();
96 blink::WebURLLoaderOptions options; 120 blink::WebURLLoaderOptions options;
97 // The embedded plugin is allowed to be cross-origin. 121 // The embedded plugin is allowed to be cross-origin.
98 options.crossOriginRequestPolicy = 122 options.crossOriginRequestPolicy =
99 blink::WebURLLoaderOptions::CrossOriginRequestPolicyAllow; 123 blink::WebURLLoaderOptions::CrossOriginRequestPolicyAllow;
100 DCHECK(!loader_); 124 DCHECK(!loader_);
101 loader_.reset(frame->createAssociatedURLLoader(options)); 125 loader_.reset(frame->createAssociatedURLLoader(options));
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 // should already know what is embedded. 208 // should already know what is embedded.
185 gin::StringToV8(isolate, "*") 209 gin::StringToV8(isolate, "*")
186 }; 210 };
187 guest_proxy_frame->callFunctionEvenIfScriptDisabled( 211 guest_proxy_frame->callFunctionEvenIfScriptDisabled(
188 post_message.As<v8::Function>(), 212 post_message.As<v8::Function>(),
189 guest_proxy_window, 213 guest_proxy_window,
190 arraysize(args), 214 arraysize(args),
191 args); 215 args);
192 } 216 }
193 217
218 void MimeHandlerViewContainer::PostMessageFromValue(
219 const base::Value& message) {
220 blink::WebFrame* frame = render_frame()->GetWebFrame();
221 if (!frame)
222 return;
223
224 v8::Isolate* isolate = v8::Isolate::GetCurrent();
225 v8::HandleScope handle_scope(isolate);
226 v8::Context::Scope context_scope(frame->mainWorldScriptContext());
227 scoped_ptr<content::V8ValueConverter> converter(
228 content::V8ValueConverter::create());
229 PostMessage(isolate,
230 converter->ToV8Value(&message, frame->mainWorldScriptContext()));
raymes 2015/01/22 00:58:57 nit: maybe make this a function (and reuse it in O
231 }
232
194 void MimeHandlerViewContainer::OnCreateMimeHandlerViewGuestACK( 233 void MimeHandlerViewContainer::OnCreateMimeHandlerViewGuestACK(
195 int element_instance_id) { 234 int element_instance_id) {
196 DCHECK_NE(this->element_instance_id(), guestview::kInstanceIDNone); 235 DCHECK_NE(this->element_instance_id(), guestview::kInstanceIDNone);
197 DCHECK_EQ(this->element_instance_id(), element_instance_id); 236 DCHECK_EQ(this->element_instance_id(), element_instance_id);
198 render_frame()->AttachGuest(element_instance_id); 237 render_frame()->AttachGuest(element_instance_id);
199 } 238 }
200 239
201 void MimeHandlerViewContainer::OnGuestAttached(int /* unused */, 240 void MimeHandlerViewContainer::OnGuestAttached(int /* unused */,
202 int guest_proxy_routing_id) { 241 int guest_proxy_routing_id) {
203 // Save the RenderView routing ID of the guest here so it can be used to route 242 // Save the RenderView routing ID of the guest here so it can be used to route
(...skipping 24 matching lines...) Expand all
228 void MimeHandlerViewContainer::CreateMimeHandlerViewGuest() { 267 void MimeHandlerViewContainer::CreateMimeHandlerViewGuest() {
229 // The loader has completed loading |view_id_| so we can dispose it. 268 // The loader has completed loading |view_id_| so we can dispose it.
230 loader_.reset(); 269 loader_.reset();
231 270
232 DCHECK_NE(element_instance_id(), guestview::kInstanceIDNone); 271 DCHECK_NE(element_instance_id(), guestview::kInstanceIDNone);
233 render_frame()->Send(new ExtensionHostMsg_CreateMimeHandlerViewGuest( 272 render_frame()->Send(new ExtensionHostMsg_CreateMimeHandlerViewGuest(
234 render_frame()->GetRoutingID(), view_id_, element_instance_id())); 273 render_frame()->GetRoutingID(), view_id_, element_instance_id()));
235 } 274 }
236 275
237 } // namespace extensions 276 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698