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

Side by Side Diff: chrome/renderer/plugins/chrome_plugin_placeholder.cc

Issue 2143073002: Plugin Power Saver: Improve blocked tiny plugins behavior (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rename a variable again Created 4 years, 5 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "chrome/renderer/plugins/chrome_plugin_placeholder.h" 5 #include "chrome/renderer/plugins/chrome_plugin_placeholder.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 const blink::WebPluginParams& params, 58 const blink::WebPluginParams& params,
59 const std::string& html_data, 59 const std::string& html_data,
60 const base::string16& title) 60 const base::string16& title)
61 : plugins::LoadablePluginPlaceholder(render_frame, 61 : plugins::LoadablePluginPlaceholder(render_frame,
62 frame, 62 frame,
63 params, 63 params,
64 html_data), 64 html_data),
65 status_(ChromeViewHostMsg_GetPluginInfo_Status::kAllowed), 65 status_(ChromeViewHostMsg_GetPluginInfo_Status::kAllowed),
66 title_(title), 66 title_(title),
67 context_menu_request_id_(0), 67 context_menu_request_id_(0),
68 ignore_updates_(false) { 68 did_send_blocked_content_notification_(false) {
69 RenderThread::Get()->AddObserver(this); 69 RenderThread::Get()->AddObserver(this);
70 } 70 }
71 71
72 ChromePluginPlaceholder::~ChromePluginPlaceholder() { 72 ChromePluginPlaceholder::~ChromePluginPlaceholder() {
73 RenderThread::Get()->RemoveObserver(this); 73 RenderThread::Get()->RemoveObserver(this);
74 if (context_menu_request_id_ && render_frame()) 74 if (context_menu_request_id_ && render_frame())
75 render_frame()->CancelContextMenu(context_menu_request_id_); 75 render_frame()->CancelContextMenu(context_menu_request_id_);
76 76
77 #if defined(ENABLE_PLUGIN_INSTALLATION) 77 #if defined(ENABLE_PLUGIN_INSTALLATION)
78 if (placeholder_routing_id_ == MSG_ROUTING_NONE) 78 if (placeholder_routing_id_ == MSG_ROUTING_NONE)
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 blocked_plugin->SetPluginInfo(info); 163 blocked_plugin->SetPluginInfo(info);
164 blocked_plugin->SetIdentifier(identifier); 164 blocked_plugin->SetIdentifier(identifier);
165 165
166 blocked_plugin->set_power_saver_enabled(power_saver_info.power_saver_enabled); 166 blocked_plugin->set_power_saver_enabled(power_saver_info.power_saver_enabled);
167 blocked_plugin->set_blocked_for_background_tab( 167 blocked_plugin->set_blocked_for_background_tab(
168 power_saver_info.blocked_for_background_tab); 168 power_saver_info.blocked_for_background_tab);
169 169
170 return blocked_plugin; 170 return blocked_plugin;
171 } 171 }
172 172
173 // static
174 ChromePluginPlaceholder* ChromePluginPlaceholder::CreateDelayedPlugin(
175 content::RenderFrame* render_frame,
176 blink::WebLocalFrame* frame,
177 const blink::WebPluginParams& params,
178 const content::WebPluginInfo& info,
179 const std::string& identifier,
180 const base::string16& name,
181 const PowerSaverInfo& power_saver_info) {
182 // Can never be called with an actual poster.
183 DCHECK(power_saver_info.poster_attribute.empty());
184
185 // Can never be called when blocked for background tab.
186 DCHECK(!power_saver_info.blocked_for_background_tab);
187
188 const base::StringPiece template_html(
189 ResourceBundle::GetSharedInstance().GetRawDataResource(
190 IDR_PLUGIN_DELAY_HTML));
191 base::DictionaryValue values;
192 std::string html_data = webui::GetI18nTemplateHtml(template_html, &values);
193
194 // |delay_plugin| will destroy itself when its WebViewPlugin is going away.
195 ChromePluginPlaceholder* delay_plugin =
196 new ChromePluginPlaceholder(render_frame, frame, params, html_data, name);
197
198 delay_plugin->set_delayed(true);
199 delay_plugin->SetPluginInfo(info);
200 delay_plugin->SetIdentifier(identifier);
201 delay_plugin->set_power_saver_enabled(power_saver_info.power_saver_enabled);
202
203 return delay_plugin;
204 }
205
206 void ChromePluginPlaceholder::SetStatus( 173 void ChromePluginPlaceholder::SetStatus(
207 ChromeViewHostMsg_GetPluginInfo_Status status) { 174 ChromeViewHostMsg_GetPluginInfo_Status status) {
208 status_ = status; 175 status_ = status;
209 } 176 }
210 177
211 #if defined(ENABLE_PLUGIN_INSTALLATION) 178 #if defined(ENABLE_PLUGIN_INSTALLATION)
212 int32_t ChromePluginPlaceholder::CreateRoutingId() { 179 int32_t ChromePluginPlaceholder::CreateRoutingId() {
213 placeholder_routing_id_ = RenderThread::Get()->GenerateRoutingID(); 180 placeholder_routing_id_ = RenderThread::Get()->GenerateRoutingID();
214 RenderThread::Get()->AddRoute(placeholder_routing_id_, this); 181 RenderThread::Get()->AddRoute(placeholder_routing_id_, this);
215 return placeholder_routing_id_; 182 return placeholder_routing_id_;
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 // PluginPreroller manages its own lifetime. 368 // PluginPreroller manages its own lifetime.
402 new PluginPreroller(render_frame(), GetFrame(), GetPluginParams(), 369 new PluginPreroller(render_frame(), GetFrame(), GetPluginParams(),
403 GetPluginInfo(), GetIdentifier(), title_, 370 GetPluginInfo(), GetIdentifier(), title_,
404 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, title_), 371 l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, title_),
405 throttler.get()); 372 throttler.get());
406 } 373 }
407 return render_frame()->CreatePlugin(GetFrame(), GetPluginInfo(), 374 return render_frame()->CreatePlugin(GetFrame(), GetPluginInfo(),
408 GetPluginParams(), std::move(throttler)); 375 GetPluginParams(), std::move(throttler));
409 } 376 }
410 377
411 void ChromePluginPlaceholder::OnLoadedRectUpdate( 378 void ChromePluginPlaceholder::OnBlockedTinyContent() {
412 const gfx::Rect& unobscured_rect, 379 if (did_send_blocked_content_notification_)
413 content::RenderFrame::PeripheralContentStatus status) {
414 // If the placeholder is in the blocked state, do nothing.
415 if (ignore_updates_)
416 return; 380 return;
417 381
418 // This should only be called once. 382 did_send_blocked_content_notification_ = true;
419 set_delayed(false); 383 ContentSettingsObserver::Get(render_frame())
420 384 ->DidBlockContentType(CONTENT_SETTINGS_TYPE_PLUGINS, title_);
421 // block tiny cross-origin - simply by not continuing the load chain.
422 if (status ==
423 content::RenderFrame::CONTENT_STATUS_ESSENTIAL_CROSS_ORIGIN_TINY) {
424 ContentSettingsObserver* observer =
425 ContentSettingsObserver::Get(render_frame());
426 observer->DidBlockContentType(CONTENT_SETTINGS_TYPE_PLUGINS, title_);
427 AllowLoading();
428 ignore_updates_ = true;
429 return;
430 }
431
432 // For essential content, powersaver can be turned off.
433 if (status != content::RenderFrame::CONTENT_STATUS_PERIPHERAL)
434 set_power_saver_enabled(false);
435
436 AllowLoading();
437 LoadPlugin();
438 } 385 }
439 386
440 gin::ObjectTemplateBuilder ChromePluginPlaceholder::GetObjectTemplateBuilder( 387 gin::ObjectTemplateBuilder ChromePluginPlaceholder::GetObjectTemplateBuilder(
441 v8::Isolate* isolate) { 388 v8::Isolate* isolate) {
442 gin::ObjectTemplateBuilder builder = 389 gin::ObjectTemplateBuilder builder =
443 gin::Wrappable<ChromePluginPlaceholder>::GetObjectTemplateBuilder(isolate) 390 gin::Wrappable<ChromePluginPlaceholder>::GetObjectTemplateBuilder(isolate)
444 .SetMethod<void (ChromePluginPlaceholder::*)()>( 391 .SetMethod<void (ChromePluginPlaceholder::*)()>(
445 "hide", &ChromePluginPlaceholder::HideCallback) 392 "hide", &ChromePluginPlaceholder::HideCallback)
446 .SetMethod<void (ChromePluginPlaceholder::*)()>( 393 .SetMethod<void (ChromePluginPlaceholder::*)()>(
447 "load", &ChromePluginPlaceholder::LoadCallback) 394 "load", &ChromePluginPlaceholder::LoadCallback)
448 .SetMethod<void (ChromePluginPlaceholder::*)()>( 395 .SetMethod<void (ChromePluginPlaceholder::*)()>(
449 "didFinishLoading", 396 "didFinishLoading",
450 &ChromePluginPlaceholder::DidFinishLoadingCallback) 397 &ChromePluginPlaceholder::DidFinishLoadingCallback)
451 .SetMethod("openAboutPlugins", 398 .SetMethod("openAboutPlugins",
452 &ChromePluginPlaceholder::OpenAboutPluginsCallback); 399 &ChromePluginPlaceholder::OpenAboutPluginsCallback);
453 400
454 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 401 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
455 switches::kEnablePluginPlaceholderTesting)) { 402 switches::kEnablePluginPlaceholderTesting)) {
456 builder.SetMethod<void (ChromePluginPlaceholder::*)()>( 403 builder.SetMethod<void (ChromePluginPlaceholder::*)()>(
457 "didFinishIconRepositionForTesting", 404 "didFinishIconRepositionForTesting",
458 &ChromePluginPlaceholder::DidFinishIconRepositionForTestingCallback); 405 &ChromePluginPlaceholder::DidFinishIconRepositionForTestingCallback);
459 } 406 }
460 407
461 return builder; 408 return builder;
462 } 409 }
OLDNEW
« no previous file with comments | « chrome/renderer/plugins/chrome_plugin_placeholder.h ('k') | chrome/renderer/plugins/power_saver_info.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698