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

Side by Side Diff: chrome/browser/ui/exclusive_access/fullscreen_controller.cc

Issue 903683005: Always prompt for permission on fullscreen and mouse lock on file:// URLs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updated Mac UI for fullscreen on file:// URLs Created 5 years, 10 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 "chrome/browser/ui/exclusive_access/fullscreen_controller.h" 5 #include "chrome/browser/ui/exclusive_access/fullscreen_controller.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "chrome/browser/app_mode/app_mode_utils.h" 10 #include "chrome/browser/app_mode/app_mode_utils.h"
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 // embedder. Thus, even if a requesting origin has been previously approved 333 // embedder. Thus, even if a requesting origin has been previously approved
334 // for embedder A, it will not be approved when embedded in a different 334 // for embedder A, it will not be approved when embedded in a different
335 // origin B. 335 // origin B.
336 // 336 //
337 // However, an exception is made when a requester and an embedder are the 337 // However, an exception is made when a requester and an embedder are the
338 // same origin. In other words, if the requester is the top-level frame. If 338 // same origin. In other words, if the requester is the top-level frame. If
339 // that combination is ALLOWED, then future requests from that origin will 339 // that combination is ALLOWED, then future requests from that origin will
340 // succeed no matter what the embedder is. For example, if youtube.com 340 // succeed no matter what the embedder is. For example, if youtube.com
341 // is visited and user selects ALLOW. Later user visits example.com which 341 // is visited and user selects ALLOW. Later user visits example.com which
342 // embeds youtube.com in an iframe, which is then ALLOWED to go fullscreen. 342 // embeds youtube.com in an iframe, which is then ALLOWED to go fullscreen.
343 GURL requester = GetRequestingOrigin();
344 GURL embedder = GetEmbeddingOrigin();
343 ContentSettingsPattern primary_pattern = 345 ContentSettingsPattern primary_pattern =
344 ContentSettingsPattern::FromURLNoWildcard(GetRequestingOrigin()); 346 ContentSettingsPattern::FromURLNoWildcard(requester);
345 ContentSettingsPattern secondary_pattern = 347 ContentSettingsPattern secondary_pattern =
346 ContentSettingsPattern::FromURLNoWildcard(GetEmbeddingOrigin()); 348 ContentSettingsPattern::FromURLNoWildcard(embedder);
347 349
348 // ContentSettings requires valid patterns and the patterns might be invalid 350 // ContentSettings requires valid patterns and the patterns might be invalid
349 // in some edge cases like if the current frame is about:blank. 351 // in some edge cases like if the current frame is about:blank.
350 if (primary_pattern.IsValid() && secondary_pattern.IsValid()) { 352 //
353 // Do not store preference on file:// URLs, they don't have a clean
354 // origin policy.
355 // TODO(estark): Revisit this when crbug.com/455882 is fixed.
msw 2015/02/12 00:07:59 nit: consider adding this bug to the BUG= in the C
estark 2015/02/12 02:33:10 Done.
356 if (!requester.SchemeIsFile() && !embedder.SchemeIsFile() &&
357 primary_pattern.IsValid() && secondary_pattern.IsValid()) {
351 HostContentSettingsMap* settings_map = 358 HostContentSettingsMap* settings_map =
352 profile()->GetHostContentSettingsMap(); 359 profile()->GetHostContentSettingsMap();
353 settings_map->SetContentSetting( 360 settings_map->SetContentSetting(
354 primary_pattern, secondary_pattern, CONTENT_SETTINGS_TYPE_FULLSCREEN, 361 primary_pattern, secondary_pattern, CONTENT_SETTINGS_TYPE_FULLSCREEN,
355 std::string(), CONTENT_SETTING_ALLOW); 362 std::string(), CONTENT_SETTING_ALLOW);
356 } 363 }
357 tab_fullscreen_accepted_ = true; 364 tab_fullscreen_accepted_ = true;
358 return true; 365 return true;
359 } 366 }
360 367
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 extension_caused_fullscreen_ = GURL(); 502 extension_caused_fullscreen_ = GURL();
496 503
497 exclusive_access_manager()->UpdateExclusiveAccessExitBubbleContent(); 504 exclusive_access_manager()->UpdateExclusiveAccessExitBubbleContent();
498 } 505 }
499 506
500 ContentSetting FullscreenController::GetFullscreenSetting() const { 507 ContentSetting FullscreenController::GetFullscreenSetting() const {
501 DCHECK(exclusive_access_tab()); 508 DCHECK(exclusive_access_tab());
502 509
503 GURL url = GetRequestingOrigin(); 510 GURL url = GetRequestingOrigin();
504 511
505 if (IsPrivilegedFullscreenForTab() || url.SchemeIsFile()) 512 // Always ask on file:// URLs, since we can't meaningfully make the
513 // decision stick for a particular origin.
514 // TODO(estark): Revisit this when crbug.com/455882 is fixed.
515 if (url.SchemeIsFile())
516 return CONTENT_SETTING_ASK;
517
518 if (IsPrivilegedFullscreenForTab())
506 return CONTENT_SETTING_ALLOW; 519 return CONTENT_SETTING_ALLOW;
507 520
508 // If the permission was granted to the website with no embedder, it should 521 // If the permission was granted to the website with no embedder, it should
509 // always be allowed, even if embedded. 522 // always be allowed, even if embedded.
510 if (profile()->GetHostContentSettingsMap()->GetContentSetting( 523 if (profile()->GetHostContentSettingsMap()->GetContentSetting(
511 url, url, CONTENT_SETTINGS_TYPE_FULLSCREEN, std::string()) == 524 url, url, CONTENT_SETTINGS_TYPE_FULLSCREEN, std::string()) ==
512 CONTENT_SETTING_ALLOW) { 525 CONTENT_SETTING_ALLOW) {
513 return CONTENT_SETTING_ALLOW; 526 return CONTENT_SETTING_ALLOW;
514 } 527 }
515 528
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
573 return fullscreened_origin_; 586 return fullscreened_origin_;
574 587
575 return exclusive_access_tab()->GetLastCommittedURL(); 588 return exclusive_access_tab()->GetLastCommittedURL();
576 } 589 }
577 590
578 GURL FullscreenController::GetEmbeddingOrigin() const { 591 GURL FullscreenController::GetEmbeddingOrigin() const {
579 DCHECK(exclusive_access_tab()); 592 DCHECK(exclusive_access_tab());
580 593
581 return exclusive_access_tab()->GetLastCommittedURL(); 594 return exclusive_access_tab()->GetLastCommittedURL();
582 } 595 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698