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

Side by Side Diff: chrome/browser/geolocation/geolocation_browsertest.cc

Issue 2338173002: Improve permission persistence tests. (Closed)
Patch Set: Address comments Created 4 years, 3 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 | « no previous file | chrome/browser/permissions/permission_context_base_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 const std::string& function); 247 const std::string& function);
248 248
249 // Sets a new (second) position and runs all callbacks currently registered 249 // Sets a new (second) position and runs all callbacks currently registered
250 // with the Geolocation system. Returns |true| if the new position is updated 250 // with the Geolocation system. Returns |true| if the new position is updated
251 // successfully in JavaScript. 251 // successfully in JavaScript.
252 bool SetPositionAndWaitUntilUpdated(double latitude, double longitude); 252 bool SetPositionAndWaitUntilUpdated(double latitude, double longitude);
253 253
254 // Convenience method to look up the number of queued permission requests. 254 // Convenience method to look up the number of queued permission requests.
255 int GetRequestQueueSize(PermissionRequestManager* manager); 255 int GetRequestQueueSize(PermissionRequestManager* manager);
256 256
257 // Toggle whether the prompt decision should be persisted.
258 void TogglePersist(bool persist);
259
257 private: 260 private:
258 // Calls watchPosition() in JavaScript and accepts or denies the resulting 261 // Calls watchPosition() in JavaScript and accepts or denies the resulting
259 // permission request. Returns the JavaScript response. 262 // permission request. Returns the JavaScript response.
260 std::string WatchPositionAndRespondToPermissionRequest( 263 std::string WatchPositionAndRespondToPermissionRequest(
261 PermissionRequestManager::AutoResponseType request_response); 264 PermissionRequestManager::AutoResponseType request_response);
262 265
263 // The current Browser as set in Initialize. May be for an incognito profile. 266 // The current Browser as set in Initialize. May be for an incognito profile.
264 Browser* current_browser_ = nullptr; 267 Browser* current_browser_ = nullptr;
265 268
266 // The path element of a URL referencing the html content for this test. 269 // The path element of a URL referencing the html content for this test.
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 std::string result = 425 std::string result =
423 RunScript(render_frame_host_, "checkIfGeopositionUpdated()"); 426 RunScript(render_frame_host_, "checkIfGeopositionUpdated()");
424 return result == "geoposition-updated"; 427 return result == "geoposition-updated";
425 } 428 }
426 429
427 int GeolocationBrowserTest::GetRequestQueueSize( 430 int GeolocationBrowserTest::GetRequestQueueSize(
428 PermissionRequestManager* manager) { 431 PermissionRequestManager* manager) {
429 return static_cast<int>(manager->requests_.size()); 432 return static_cast<int>(manager->requests_.size());
430 } 433 }
431 434
435 void GeolocationBrowserTest::TogglePersist(bool persist) {
436 content::WebContents* web_contents =
437 current_browser()->tab_strip_model()->GetActiveWebContents();
438 PermissionRequestManager::FromWebContents(web_contents)
439 ->TogglePersist(persist);
440 }
441
432 // Tests ---------------------------------------------------------------------- 442 // Tests ----------------------------------------------------------------------
433 443
434 #if defined(OS_LINUX) 444 #if defined(OS_LINUX)
435 // http://crbug.com/527437 445 // http://crbug.com/527437
436 #define MAYBE_DisplaysPrompt DISABLED_DisplaysPrompt 446 #define MAYBE_DisplaysPrompt DISABLED_DisplaysPrompt
437 #else 447 #else
438 #define MAYBE_DisplaysPrompt DisplaysPrompt 448 #define MAYBE_DisplaysPrompt DisplaysPrompt
439 #endif 449 #endif
440 IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, MAYBE_DisplaysPrompt) { 450 IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, MAYBE_DisplaysPrompt) {
441 ASSERT_NO_FATAL_FAILURE(Initialize(INITIALIZATION_DEFAULT)); 451 ASSERT_NO_FATAL_FAILURE(Initialize(INITIALIZATION_DEFAULT));
442 ASSERT_TRUE(WatchPositionAndGrantPermission()); 452 ASSERT_TRUE(WatchPositionAndGrantPermission());
453
454 EXPECT_EQ(CONTENT_SETTING_ALLOW,
455 GetHostContentSettingsMap()->GetContentSetting(
456 current_url(), current_url(), CONTENT_SETTINGS_TYPE_GEOLOCATION,
457 std::string()));
458
459 // Ensure a second request doesn't create a prompt in this tab.
460 WatchPositionAndObservePermissionRequest(false);
443 } 461 }
444 462
445 #if defined(OS_LINUX) 463 #if defined(OS_LINUX)
446 // http://crbug.com/527437 464 // http://crbug.com/527437
447 #define MAYBE_Geoposition DISABLED_Geoposition 465 #define MAYBE_Geoposition DISABLED_Geoposition
448 #else 466 #else
449 #define MAYBE_Geoposition Geoposition 467 #define MAYBE_Geoposition Geoposition
450 #endif 468 #endif
451 IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, MAYBE_Geoposition) { 469 IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, MAYBE_Geoposition) {
452 ASSERT_NO_FATAL_FAILURE(Initialize(INITIALIZATION_DEFAULT)); 470 ASSERT_NO_FATAL_FAILURE(Initialize(INITIALIZATION_DEFAULT));
453 ASSERT_TRUE(WatchPositionAndGrantPermission()); 471 ASSERT_TRUE(WatchPositionAndGrantPermission());
454 ExpectPosition(fake_latitude(), fake_longitude()); 472 ExpectPosition(fake_latitude(), fake_longitude());
455 } 473 }
456 474
457 IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, ErrorOnPermissionDenied) { 475 IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, ErrorOnPermissionDenied) {
458 ASSERT_NO_FATAL_FAILURE(Initialize(INITIALIZATION_DEFAULT)); 476 ASSERT_NO_FATAL_FAILURE(Initialize(INITIALIZATION_DEFAULT));
459 EXPECT_TRUE(WatchPositionAndDenyPermission()); 477 EXPECT_TRUE(WatchPositionAndDenyPermission());
460 ExpectValueFromScript(GetErrorCodePermissionDenied(), "geoGetLastError()"); 478 ExpectValueFromScript(GetErrorCodePermissionDenied(), "geoGetLastError()");
479
480 EXPECT_EQ(CONTENT_SETTING_BLOCK,
481 GetHostContentSettingsMap()->GetContentSetting(
482 current_url(), current_url(), CONTENT_SETTINGS_TYPE_GEOLOCATION,
483 std::string()));
484
485 // Ensure a second request doesn't create a prompt in this tab.
486 WatchPositionAndObservePermissionRequest(false);
461 } 487 }
462 488
463 #if defined(OS_LINUX) 489 #if defined(OS_LINUX)
464 // http://crbug.com/527437 490 // http://crbug.com/527437
465 #define MAYBE_NoPromptForSecondTab DISABLED_NoPromptForSecondTab 491 #define MAYBE_NoPromptForSecondTab DISABLED_NoPromptForSecondTab
466 #else 492 #else
467 #define MAYBE_NoPromptForSecondTab NoPromptForSecondTab 493 #define MAYBE_NoPromptForSecondTab NoPromptForSecondTab
468 #endif 494 #endif
469 IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, MAYBE_NoPromptForSecondTab) { 495 IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, MAYBE_NoPromptForSecondTab) {
470 ASSERT_NO_FATAL_FAILURE(Initialize(INITIALIZATION_DEFAULT)); 496 ASSERT_NO_FATAL_FAILURE(Initialize(INITIALIZATION_DEFAULT));
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 ASSERT_TRUE(WatchPositionAndGrantPermission()); 559 ASSERT_TRUE(WatchPositionAndGrantPermission());
534 ExpectPosition(fake_latitude(), fake_longitude()); 560 ExpectPosition(fake_latitude(), fake_longitude());
535 561
536 // The regular profile knows nothing of what happened in incognito. It is 562 // The regular profile knows nothing of what happened in incognito. It is
537 // prompted and when granted the position gets to the script. 563 // prompted and when granted the position gets to the script.
538 ASSERT_NO_FATAL_FAILURE(Initialize(INITIALIZATION_DEFAULT)); 564 ASSERT_NO_FATAL_FAILURE(Initialize(INITIALIZATION_DEFAULT));
539 ASSERT_TRUE(WatchPositionAndGrantPermission()); 565 ASSERT_TRUE(WatchPositionAndGrantPermission());
540 ExpectPosition(fake_latitude(), fake_longitude()); 566 ExpectPosition(fake_latitude(), fake_longitude());
541 } 567 }
542 568
569 IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, TogglePersistGranted) {
570 // Initialize and turn persistence off.
571 ASSERT_NO_FATAL_FAILURE(Initialize(INITIALIZATION_DEFAULT));
572 TogglePersist(false);
573
574 ASSERT_TRUE(WatchPositionAndGrantPermission());
575 EXPECT_EQ(CONTENT_SETTING_ASK,
576 GetHostContentSettingsMap()->GetContentSetting(
577 current_url(), current_url(), CONTENT_SETTINGS_TYPE_GEOLOCATION,
578 std::string()));
579
580 // Expect the grant to be remembered at the blink layer, so a second request
581 // on this page doesn't create a request.
582 WatchPositionAndObservePermissionRequest(false);
583
584 // Navigate and ensure that a prompt is shown when we request again.
585 ASSERT_NO_FATAL_FAILURE(Initialize(INITIALIZATION_DEFAULT));
586 WatchPositionAndObservePermissionRequest(true);
587 }
588
589 IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, TogglePersistBlocked) {
590 // Initialize and turn persistence off.
591 ASSERT_NO_FATAL_FAILURE(Initialize(INITIALIZATION_DEFAULT));
592 TogglePersist(false);
593
594 ASSERT_TRUE(WatchPositionAndDenyPermission());
595 EXPECT_EQ(CONTENT_SETTING_ASK,
596 GetHostContentSettingsMap()->GetContentSetting(
597 current_url(), current_url(), CONTENT_SETTINGS_TYPE_GEOLOCATION,
598 std::string()));
599
600 // Expect the block to be remembered at the blink layer, so a second request
601 // on this page doesn't create a request.
602 WatchPositionAndObservePermissionRequest(false);
603
604 // Navigate and ensure that a prompt is shown when we request again.
605 ASSERT_NO_FATAL_FAILURE(Initialize(INITIALIZATION_DEFAULT));
606 WatchPositionAndObservePermissionRequest(true);
607 }
608
543 #if defined(OS_LINUX) 609 #if defined(OS_LINUX)
544 // http://crbug.com/527437 610 // http://crbug.com/527437
545 #define MAYBE_IFramesWithFreshPosition DISABLED_IFramesWithFreshPosition 611 #define MAYBE_IFramesWithFreshPosition DISABLED_IFramesWithFreshPosition
546 #else 612 #else
547 #define MAYBE_IFramesWithFreshPosition IFramesWithFreshPosition 613 #define MAYBE_IFramesWithFreshPosition IFramesWithFreshPosition
548 #endif 614 #endif
549 IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, MAYBE_IFramesWithFreshPosition) { 615 IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, MAYBE_IFramesWithFreshPosition) {
550 set_html_for_tests("/geolocation/two_iframes.html"); 616 set_html_for_tests("/geolocation/two_iframes.html");
551 ASSERT_NO_FATAL_FAILURE(Initialize(INITIALIZATION_DEFAULT)); 617 ASSERT_NO_FATAL_FAILURE(Initialize(INITIALIZATION_DEFAULT));
552 LoadIFrames(); 618 LoadIFrames();
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 // Calling watchPosition should trigger the last usage update. 824 // Calling watchPosition should trigger the last usage update.
759 WatchPositionAndObservePermissionRequest(false); 825 WatchPositionAndObservePermissionRequest(false);
760 ExpectPosition(fake_latitude(), fake_longitude()); 826 ExpectPosition(fake_latitude(), fake_longitude());
761 827
762 // Last usage has been updated. 828 // Last usage has been updated.
763 EXPECT_EQ(GetHostContentSettingsMap()->GetLastUsage( 829 EXPECT_EQ(GetHostContentSettingsMap()->GetLastUsage(
764 current_url().GetOrigin(), 830 current_url().GetOrigin(),
765 current_url().GetOrigin(), 831 current_url().GetOrigin(),
766 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), 13); 832 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), 13);
767 } 833 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/permissions/permission_context_base_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698