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

Side by Side Diff: content/renderer/browser_plugin/browser_plugin.cc

Issue 95693002: <webview>: Expose transparency API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years 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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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 "content/renderer/browser_plugin/browser_plugin.h" 5 #include "content/renderer/browser_plugin/browser_plugin.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/json/json_string_value_serializer.h" 8 #include "base/json/json_string_value_serializer.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 paint_ack_received_(true), 79 paint_ack_received_(true),
80 last_device_scale_factor_(1.0f), 80 last_device_scale_factor_(1.0f),
81 sad_guest_(NULL), 81 sad_guest_(NULL),
82 guest_crashed_(false), 82 guest_crashed_(false),
83 is_auto_size_state_dirty_(false), 83 is_auto_size_state_dirty_(false),
84 persist_storage_(false), 84 persist_storage_(false),
85 valid_partition_id_(true), 85 valid_partition_id_(true),
86 content_window_routing_id_(MSG_ROUTING_NONE), 86 content_window_routing_id_(MSG_ROUTING_NONE),
87 plugin_focused_(false), 87 plugin_focused_(false),
88 visible_(true), 88 visible_(true),
89 opaque_(true),
90 before_first_navigation_(true), 89 before_first_navigation_(true),
91 mouse_locked_(false), 90 mouse_locked_(false),
92 browser_plugin_manager_(render_view->GetBrowserPluginManager()), 91 browser_plugin_manager_(render_view->GetBrowserPluginManager()),
93 compositing_enabled_(false), 92 compositing_enabled_(false),
94 embedder_frame_url_(frame->document().url()), 93 embedder_frame_url_(frame->document().url()),
95 weak_ptr_factory_(this) { 94 weak_ptr_factory_(this) {
96 } 95 }
97 96
98 BrowserPlugin::~BrowserPlugin() { 97 BrowserPlugin::~BrowserPlugin() {
99 // If the BrowserPlugin has never navigated then the browser process and 98 // If the BrowserPlugin has never navigated then the browser process and
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 return false; 174 return false;
176 175
177 return container()->element().hasAttribute( 176 return container()->element().hasAttribute(
178 blink::WebString::fromUTF8(attribute_name)); 177 blink::WebString::fromUTF8(attribute_name));
179 } 178 }
180 179
181 std::string BrowserPlugin::GetNameAttribute() const { 180 std::string BrowserPlugin::GetNameAttribute() const {
182 return GetDOMAttributeValue(browser_plugin::kAttributeName); 181 return GetDOMAttributeValue(browser_plugin::kAttributeName);
183 } 182 }
184 183
184 bool BrowserPlugin::GetAllowTransparencyAttribute() const {
185 return HasDOMAttribute(browser_plugin::kAttributeAllowTransparency);
186 }
187
185 std::string BrowserPlugin::GetSrcAttribute() const { 188 std::string BrowserPlugin::GetSrcAttribute() const {
186 return GetDOMAttributeValue(browser_plugin::kAttributeSrc); 189 return GetDOMAttributeValue(browser_plugin::kAttributeSrc);
187 } 190 }
188 191
189 bool BrowserPlugin::GetAutoSizeAttribute() const { 192 bool BrowserPlugin::GetAutoSizeAttribute() const {
190 return HasDOMAttribute(browser_plugin::kAttributeAutoSize); 193 return HasDOMAttribute(browser_plugin::kAttributeAutoSize);
191 } 194 }
192 195
193 int BrowserPlugin::GetMaxHeightAttribute() const { 196 int BrowserPlugin::GetMaxHeightAttribute() const {
194 int max_height; 197 int max_height;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 255
253 void BrowserPlugin::ParseNameAttribute() { 256 void BrowserPlugin::ParseNameAttribute() {
254 if (!HasGuestInstanceID()) 257 if (!HasGuestInstanceID())
255 return; 258 return;
256 browser_plugin_manager()->Send( 259 browser_plugin_manager()->Send(
257 new BrowserPluginHostMsg_SetName(render_view_routing_id_, 260 new BrowserPluginHostMsg_SetName(render_view_routing_id_,
258 guest_instance_id_, 261 guest_instance_id_,
259 GetNameAttribute())); 262 GetNameAttribute()));
260 } 263 }
261 264
265 void BrowserPlugin::ParseAllowTransparencyAttribute() {
266 if (!HasGuestInstanceID())
267 return;
268
269 bool opaque = !GetAllowTransparencyAttribute();
270
271 paint_ack_received_ = false;
alexst (slow to review) 2013/11/28 21:44:57 Why did you need to change this?
Fady Samuel 2013/12/02 18:30:04 Experimenting. Forgot to remove it. Removed now.
272
273 if (compositing_helper_)
274 compositing_helper_->SetContentsOpaque(opaque);
275
276 browser_plugin_manager()->Send(new BrowserPluginHostMsg_SetContentsOpaque(
277 render_view_routing_id_,
278 guest_instance_id_,
279 opaque));
280 }
281
262 bool BrowserPlugin::ParseSrcAttribute(std::string* error_message) { 282 bool BrowserPlugin::ParseSrcAttribute(std::string* error_message) {
263 if (!valid_partition_id_) { 283 if (!valid_partition_id_) {
264 *error_message = browser_plugin::kErrorInvalidPartition; 284 *error_message = browser_plugin::kErrorInvalidPartition;
265 return false; 285 return false;
266 } 286 }
267 std::string src = GetSrcAttribute(); 287 std::string src = GetSrcAttribute();
268 if (src.empty()) 288 if (src.empty())
269 return true; 289 return true;
270 290
271 // If we haven't created the guest yet, do so now. We will navigate it right 291 // If we haven't created the guest yet, do so now. We will navigate it right
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 std::map<std::string, base::Value*> props; 385 std::map<std::string, base::Value*> props;
366 props[browser_plugin::kWindowID] = 386 props[browser_plugin::kWindowID] =
367 new base::FundamentalValue(guest_instance_id); 387 new base::FundamentalValue(guest_instance_id);
368 TriggerEvent(browser_plugin::kEventInternalInstanceIDAllocated, &props); 388 TriggerEvent(browser_plugin::kEventInternalInstanceIDAllocated, &props);
369 } 389 }
370 390
371 void BrowserPlugin::Attach(scoped_ptr<base::DictionaryValue> extra_params) { 391 void BrowserPlugin::Attach(scoped_ptr<base::DictionaryValue> extra_params) {
372 BrowserPluginHostMsg_Attach_Params attach_params; 392 BrowserPluginHostMsg_Attach_Params attach_params;
373 attach_params.focused = ShouldGuestBeFocused(); 393 attach_params.focused = ShouldGuestBeFocused();
374 attach_params.visible = visible_; 394 attach_params.visible = visible_;
375 attach_params.opaque = opaque_; 395 attach_params.opaque = !GetAllowTransparencyAttribute();
376 attach_params.name = GetNameAttribute(); 396 attach_params.name = GetNameAttribute();
377 attach_params.storage_partition_id = storage_partition_id_; 397 attach_params.storage_partition_id = storage_partition_id_;
378 attach_params.persist_storage = persist_storage_; 398 attach_params.persist_storage = persist_storage_;
379 attach_params.src = GetSrcAttribute(); 399 attach_params.src = GetSrcAttribute();
380 attach_params.embedder_frame_url = embedder_frame_url_; 400 attach_params.embedder_frame_url = embedder_frame_url_;
381 GetDamageBufferWithSizeParams(&attach_params.auto_size_params, 401 GetDamageBufferWithSizeParams(&attach_params.auto_size_params,
382 &attach_params.resize_guest_params, 402 &attach_params.resize_guest_params,
383 false); 403 false);
384 404
385 browser_plugin_manager()->Send( 405 browser_plugin_manager()->Send(
386 new BrowserPluginHostMsg_Attach(render_view_routing_id_, 406 new BrowserPluginHostMsg_Attach(render_view_routing_id_,
387 guest_instance_id_, attach_params, 407 guest_instance_id_, attach_params,
388 *extra_params)); 408 *extra_params));
389 } 409 }
390 410
391 void BrowserPlugin::DidCommitCompositorFrame() { 411 void BrowserPlugin::DidCommitCompositorFrame() {
392 if (compositing_helper_.get()) 412 if (compositing_helper_.get())
393 compositing_helper_->DidCommitCompositorFrame(); 413 compositing_helper_->DidCommitCompositorFrame();
394 } 414 }
395 415
396 void BrowserPlugin::SetContentsOpaque(bool opaque) {
397 if (opaque_ == opaque)
398 return;
399
400 opaque_ = opaque;
401 if (!HasGuestInstanceID())
402 return;
403
404 if (compositing_helper_)
405 compositing_helper_->SetContentsOpaque(opaque_);
406
407 browser_plugin_manager()->Send(new BrowserPluginHostMsg_SetContentsOpaque(
408 render_view_routing_id_,
409 guest_instance_id_,
410 opaque_));
411 }
412
413 void BrowserPlugin::OnAdvanceFocus(int guest_instance_id, bool reverse) { 416 void BrowserPlugin::OnAdvanceFocus(int guest_instance_id, bool reverse) {
414 DCHECK(render_view_.get()); 417 DCHECK(render_view_.get());
415 render_view_->GetWebView()->advanceFocus(reverse); 418 render_view_->GetWebView()->advanceFocus(reverse);
416 } 419 }
417 420
418 void BrowserPlugin::OnAttachACK( 421 void BrowserPlugin::OnAttachACK(
419 int guest_instance_id, 422 int guest_instance_id,
420 const BrowserPluginMsg_Attach_ACK_Params& params) { 423 const BrowserPluginMsg_Attach_ACK_Params& params) {
421 // Update BrowserPlugin attributes to match the state of the guest. 424 // Update BrowserPlugin attributes to match the state of the guest.
422 if (!params.name.empty()) 425 if (!params.name.empty())
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after
911 plugin_rect(), 914 plugin_rect(),
912 true /* needs_repaint */); 915 true /* needs_repaint */);
913 paint_ack_received_ = false; 916 paint_ack_received_ = false;
914 browser_plugin_manager()->Send(new BrowserPluginHostMsg_ResizeGuest( 917 browser_plugin_manager()->Send(new BrowserPluginHostMsg_ResizeGuest(
915 render_view_routing_id_, 918 render_view_routing_id_,
916 guest_instance_id_, 919 guest_instance_id_,
917 params)); 920 params));
918 } 921 }
919 } 922 }
920 compositing_helper_->EnableCompositing(enable); 923 compositing_helper_->EnableCompositing(enable);
921 compositing_helper_->SetContentsOpaque(opaque_); 924 compositing_helper_->SetContentsOpaque(!GetAllowTransparencyAttribute());
922 } 925 }
923 926
924 void BrowserPlugin::destroy() { 927 void BrowserPlugin::destroy() {
925 // If the plugin was initialized then it has a valid |npp_| identifier, and 928 // If the plugin was initialized then it has a valid |npp_| identifier, and
926 // the |container_| must clear references to the plugin's script objects. 929 // the |container_| must clear references to the plugin's script objects.
927 DCHECK(!npp_ || container_); 930 DCHECK(!npp_ || container_);
928 if (container_) 931 if (container_)
929 container_->clearScriptObjects(); 932 container_->clearScriptObjects();
930 933
931 // The BrowserPlugin's WebPluginContainer is deleted immediately after this 934 // The BrowserPlugin's WebPluginContainer is deleted immediately after this
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
1333 const blink::WebMouseEvent& event) { 1336 const blink::WebMouseEvent& event) {
1334 browser_plugin_manager()->Send( 1337 browser_plugin_manager()->Send(
1335 new BrowserPluginHostMsg_HandleInputEvent(render_view_routing_id_, 1338 new BrowserPluginHostMsg_HandleInputEvent(render_view_routing_id_,
1336 guest_instance_id_, 1339 guest_instance_id_,
1337 plugin_rect_, 1340 plugin_rect_,
1338 &event)); 1341 &event));
1339 return true; 1342 return true;
1340 } 1343 }
1341 1344
1342 } // namespace content 1345 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/browser_plugin/browser_plugin.h ('k') | content/renderer/browser_plugin/browser_plugin_bindings.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698