| OLD | NEW |
| 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/geolocation/geolocation_permission_context.h" | 5 #include "chrome/browser/geolocation/geolocation_permission_context.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <set> | 9 #include <set> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 PermissionRequestID RequestIDForTab(int tab, int request_id); | 129 PermissionRequestID RequestIDForTab(int tab, int request_id); |
| 130 InfoBarService* infobar_service() { | 130 InfoBarService* infobar_service() { |
| 131 return InfoBarService::FromWebContents(web_contents()); | 131 return InfoBarService::FromWebContents(web_contents()); |
| 132 } | 132 } |
| 133 InfoBarService* infobar_service_for_tab(int tab) { | 133 InfoBarService* infobar_service_for_tab(int tab) { |
| 134 return InfoBarService::FromWebContents(extra_tabs_[tab].get()); | 134 return InfoBarService::FromWebContents(extra_tabs_[tab].get()); |
| 135 } | 135 } |
| 136 | 136 |
| 137 void RequestGeolocationPermission(content::WebContents* web_contents, | 137 void RequestGeolocationPermission(content::WebContents* web_contents, |
| 138 const PermissionRequestID& id, | 138 const PermissionRequestID& id, |
| 139 const GURL& requesting_frame); | 139 const GURL& requesting_frame, |
| 140 bool user_gesture); |
| 140 | 141 |
| 141 void PermissionResponse(const PermissionRequestID& id, | 142 void PermissionResponse(const PermissionRequestID& id, |
| 142 ContentSetting content_setting); | 143 ContentSetting content_setting); |
| 143 void CheckPermissionMessageSent(int request_id, bool allowed); | 144 void CheckPermissionMessageSent(int request_id, bool allowed); |
| 144 void CheckPermissionMessageSentForTab(int tab, int request_id, bool allowed); | 145 void CheckPermissionMessageSentForTab(int tab, int request_id, bool allowed); |
| 145 void CheckPermissionMessageSentInternal(MockRenderProcessHost* process, | 146 void CheckPermissionMessageSentInternal(MockRenderProcessHost* process, |
| 146 int request_id, | 147 int request_id, |
| 147 bool allowed); | 148 bool allowed); |
| 148 void AddNewTab(const GURL& url); | 149 void AddNewTab(const GURL& url); |
| 149 void CheckTabContentsState(const GURL& requesting_frame, | 150 void CheckTabContentsState(const GURL& requesting_frame, |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 int request_id) { | 190 int request_id) { |
| 190 return PermissionRequestID( | 191 return PermissionRequestID( |
| 191 extra_tabs_[tab]->GetRenderProcessHost()->GetID(), | 192 extra_tabs_[tab]->GetRenderProcessHost()->GetID(), |
| 192 extra_tabs_[tab]->GetMainFrame()->GetRoutingID(), | 193 extra_tabs_[tab]->GetMainFrame()->GetRoutingID(), |
| 193 request_id); | 194 request_id); |
| 194 } | 195 } |
| 195 | 196 |
| 196 void GeolocationPermissionContextTests::RequestGeolocationPermission( | 197 void GeolocationPermissionContextTests::RequestGeolocationPermission( |
| 197 content::WebContents* web_contents, | 198 content::WebContents* web_contents, |
| 198 const PermissionRequestID& id, | 199 const PermissionRequestID& id, |
| 199 const GURL& requesting_frame) { | 200 const GURL& requesting_frame, |
| 201 bool user_gesture) { |
| 200 geolocation_permission_context_->RequestPermission( | 202 geolocation_permission_context_->RequestPermission( |
| 201 web_contents, id, requesting_frame, | 203 web_contents, id, requesting_frame, user_gesture, |
| 202 base::Bind(&GeolocationPermissionContextTests::PermissionResponse, | 204 base::Bind(&GeolocationPermissionContextTests::PermissionResponse, |
| 203 base::Unretained(this), id)); | 205 base::Unretained(this), id)); |
| 204 content::RunAllBlockingPoolTasksUntilIdle(); | 206 content::RunAllBlockingPoolTasksUntilIdle(); |
| 205 } | 207 } |
| 206 | 208 |
| 207 void GeolocationPermissionContextTests::PermissionResponse( | 209 void GeolocationPermissionContextTests::PermissionResponse( |
| 208 const PermissionRequestID& id, | 210 const PermissionRequestID& id, |
| 209 ContentSetting content_setting) { | 211 ContentSetting content_setting) { |
| 210 responses_[id.render_process_id()] = | 212 responses_[id.render_process_id()] = |
| 211 std::make_pair(id.request_id(), content_setting == CONTENT_SETTING_ALLOW); | 213 std::make_pair(id.request_id(), content_setting == CONTENT_SETTING_ALLOW); |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 } | 405 } |
| 404 | 406 |
| 405 // Tests ---------------------------------------------------------------------- | 407 // Tests ---------------------------------------------------------------------- |
| 406 | 408 |
| 407 TEST_F(GeolocationPermissionContextTests, SinglePermissionBubble) { | 409 TEST_F(GeolocationPermissionContextTests, SinglePermissionBubble) { |
| 408 GURL requesting_frame("https://www.example.com/geolocation"); | 410 GURL requesting_frame("https://www.example.com/geolocation"); |
| 409 NavigateAndCommit(requesting_frame); | 411 NavigateAndCommit(requesting_frame); |
| 410 BubbleManagerDocumentLoadCompleted(); | 412 BubbleManagerDocumentLoadCompleted(); |
| 411 | 413 |
| 412 EXPECT_EQ(0U, GetNumberOfPrompts()); | 414 EXPECT_EQ(0U, GetNumberOfPrompts()); |
| 413 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame); | 415 RequestGeolocationPermission( |
| 416 web_contents(), RequestID(0), requesting_frame, true); |
| 414 ASSERT_EQ(1U, GetNumberOfPrompts()); | 417 ASSERT_EQ(1U, GetNumberOfPrompts()); |
| 415 } | 418 } |
| 416 | 419 |
| 417 TEST_F(GeolocationPermissionContextTests, | 420 TEST_F(GeolocationPermissionContextTests, |
| 418 SinglePermissionBubbleFailsOnInsecureOrigin) { | 421 SinglePermissionBubbleFailsOnInsecureOrigin) { |
| 419 GURL requesting_frame("http://www.example.com/geolocation"); | 422 GURL requesting_frame("http://www.example.com/geolocation"); |
| 420 NavigateAndCommit(requesting_frame); | 423 NavigateAndCommit(requesting_frame); |
| 421 BubbleManagerDocumentLoadCompleted(); | 424 BubbleManagerDocumentLoadCompleted(); |
| 422 | 425 |
| 423 EXPECT_EQ(0U, GetNumberOfPrompts()); | 426 EXPECT_EQ(0U, GetNumberOfPrompts()); |
| 424 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame); | 427 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame, |
| 428 true); |
| 425 ASSERT_EQ(0U, GetNumberOfPrompts()); | 429 ASSERT_EQ(0U, GetNumberOfPrompts()); |
| 426 } | 430 } |
| 427 | 431 |
| 428 #if BUILDFLAG(ANDROID_JAVA_UI) | 432 #if BUILDFLAG(ANDROID_JAVA_UI) |
| 429 TEST_F(GeolocationPermissionContextTests, SinglePermissionInfobar) { | 433 TEST_F(GeolocationPermissionContextTests, SinglePermissionInfobar) { |
| 430 GURL requesting_frame("https://www.example.com/geolocation"); | 434 GURL requesting_frame("https://www.example.com/geolocation"); |
| 431 NavigateAndCommit(requesting_frame); | 435 NavigateAndCommit(requesting_frame); |
| 432 EXPECT_EQ(0U, infobar_service()->infobar_count()); | 436 EXPECT_EQ(0U, infobar_service()->infobar_count()); |
| 433 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame); | 437 RequestGeolocationPermission( |
| 438 web_contents(), RequestID(0), requesting_frame, true); |
| 434 ASSERT_EQ(1U, infobar_service()->infobar_count()); | 439 ASSERT_EQ(1U, infobar_service()->infobar_count()); |
| 435 infobars::InfoBar* infobar = infobar_service()->infobar_at(0); | 440 infobars::InfoBar* infobar = infobar_service()->infobar_at(0); |
| 436 ConfirmInfoBarDelegate* infobar_delegate = | 441 ConfirmInfoBarDelegate* infobar_delegate = |
| 437 infobar->delegate()->AsConfirmInfoBarDelegate(); | 442 infobar->delegate()->AsConfirmInfoBarDelegate(); |
| 438 ASSERT_TRUE(infobar_delegate); | 443 ASSERT_TRUE(infobar_delegate); |
| 439 infobar_delegate->Cancel(); | 444 infobar_delegate->Cancel(); |
| 440 infobar_service()->RemoveInfoBar(infobar); | 445 infobar_service()->RemoveInfoBar(infobar); |
| 441 EXPECT_EQ(1U, closed_infobar_tracker_.size()); | 446 EXPECT_EQ(1U, closed_infobar_tracker_.size()); |
| 442 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar)); | 447 EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar)); |
| 443 } | 448 } |
| 444 | 449 |
| 445 // Infobar-only tests; Android doesn't support permission bubbles. | 450 // Infobar-only tests; Android doesn't support permission bubbles. |
| 446 TEST_F(GeolocationPermissionContextTests, GeolocationEnabledDisabled) { | 451 TEST_F(GeolocationPermissionContextTests, GeolocationEnabledDisabled) { |
| 447 GURL requesting_frame("https://www.example.com/geolocation"); | 452 GURL requesting_frame("https://www.example.com/geolocation"); |
| 448 NavigateAndCommit(requesting_frame); | 453 NavigateAndCommit(requesting_frame); |
| 449 MockLocationSettings::SetLocationStatus(true, true); | 454 MockLocationSettings::SetLocationStatus(true, true); |
| 450 EXPECT_EQ(0U, infobar_service()->infobar_count()); | 455 EXPECT_EQ(0U, infobar_service()->infobar_count()); |
| 451 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame); | 456 RequestGeolocationPermission( |
| 457 web_contents(), RequestID(0), requesting_frame, true); |
| 452 EXPECT_EQ(1U, infobar_service()->infobar_count()); | 458 EXPECT_EQ(1U, infobar_service()->infobar_count()); |
| 453 ConfirmInfoBarDelegate* infobar_delegate_0 = | 459 ConfirmInfoBarDelegate* infobar_delegate_0 = |
| 454 infobar_service()->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate(); | 460 infobar_service()->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate(); |
| 455 ASSERT_TRUE(infobar_delegate_0); | 461 ASSERT_TRUE(infobar_delegate_0); |
| 456 base::string16 text_0 = infobar_delegate_0->GetButtonLabel( | 462 base::string16 text_0 = infobar_delegate_0->GetButtonLabel( |
| 457 ConfirmInfoBarDelegate::BUTTON_OK); | 463 ConfirmInfoBarDelegate::BUTTON_OK); |
| 458 | 464 |
| 459 Reload(); | 465 Reload(); |
| 460 MockLocationSettings::SetLocationStatus(true, false); | 466 MockLocationSettings::SetLocationStatus(true, false); |
| 461 EXPECT_EQ(0U, infobar_service()->infobar_count()); | 467 EXPECT_EQ(0U, infobar_service()->infobar_count()); |
| 462 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame); | 468 RequestGeolocationPermission( |
| 469 web_contents(), RequestID(0), requesting_frame, true); |
| 463 EXPECT_EQ(0U, infobar_service()->infobar_count()); | 470 EXPECT_EQ(0U, infobar_service()->infobar_count()); |
| 464 } | 471 } |
| 465 | 472 |
| 466 TEST_F(GeolocationPermissionContextTests, MasterEnabledGoogleAppsEnabled) { | 473 TEST_F(GeolocationPermissionContextTests, MasterEnabledGoogleAppsEnabled) { |
| 467 GURL requesting_frame("https://www.example.com/geolocation"); | 474 GURL requesting_frame("https://www.example.com/geolocation"); |
| 468 NavigateAndCommit(requesting_frame); | 475 NavigateAndCommit(requesting_frame); |
| 469 MockLocationSettings::SetLocationStatus(true, true); | 476 MockLocationSettings::SetLocationStatus(true, true); |
| 470 EXPECT_EQ(0U, infobar_service()->infobar_count()); | 477 EXPECT_EQ(0U, infobar_service()->infobar_count()); |
| 471 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame); | 478 RequestGeolocationPermission( |
| 479 web_contents(), RequestID(0), requesting_frame, true); |
| 472 EXPECT_EQ(1U, infobar_service()->infobar_count()); | 480 EXPECT_EQ(1U, infobar_service()->infobar_count()); |
| 473 ConfirmInfoBarDelegate* infobar_delegate = | 481 ConfirmInfoBarDelegate* infobar_delegate = |
| 474 infobar_service()->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate(); | 482 infobar_service()->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate(); |
| 475 ASSERT_TRUE(infobar_delegate); | 483 ASSERT_TRUE(infobar_delegate); |
| 476 infobar_delegate->Accept(); | 484 infobar_delegate->Accept(); |
| 477 CheckTabContentsState(requesting_frame, CONTENT_SETTING_ALLOW); | 485 CheckTabContentsState(requesting_frame, CONTENT_SETTING_ALLOW); |
| 478 CheckPermissionMessageSent(0, true); | 486 CheckPermissionMessageSent(0, true); |
| 479 } | 487 } |
| 480 | 488 |
| 481 TEST_F(GeolocationPermissionContextTests, MasterEnabledGoogleAppsDisabled) { | 489 TEST_F(GeolocationPermissionContextTests, MasterEnabledGoogleAppsDisabled) { |
| 482 GURL requesting_frame("https://www.example.com/geolocation"); | 490 GURL requesting_frame("https://www.example.com/geolocation"); |
| 483 NavigateAndCommit(requesting_frame); | 491 NavigateAndCommit(requesting_frame); |
| 484 MockLocationSettings::SetLocationStatus(true, false); | 492 MockLocationSettings::SetLocationStatus(true, false); |
| 485 EXPECT_EQ(0U, infobar_service()->infobar_count()); | 493 EXPECT_EQ(0U, infobar_service()->infobar_count()); |
| 486 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame); | 494 RequestGeolocationPermission( |
| 495 web_contents(), RequestID(0), requesting_frame, true); |
| 487 EXPECT_EQ(0U, infobar_service()->infobar_count()); | 496 EXPECT_EQ(0U, infobar_service()->infobar_count()); |
| 488 } | 497 } |
| 489 #endif | 498 #endif |
| 490 | 499 |
| 491 TEST_F(GeolocationPermissionContextTests, QueuedPermission) { | 500 TEST_F(GeolocationPermissionContextTests, QueuedPermission) { |
| 492 GURL requesting_frame_0("https://www.example.com/geolocation"); | 501 GURL requesting_frame_0("https://www.example.com/geolocation"); |
| 493 GURL requesting_frame_1("https://www.example-2.com/geolocation"); | 502 GURL requesting_frame_1("https://www.example-2.com/geolocation"); |
| 494 EXPECT_EQ( | 503 EXPECT_EQ( |
| 495 CONTENT_SETTING_ASK, | 504 CONTENT_SETTING_ASK, |
| 496 GetGeolocationContentSetting(requesting_frame_0, requesting_frame_1)); | 505 GetGeolocationContentSetting(requesting_frame_0, requesting_frame_1)); |
| 497 EXPECT_EQ( | 506 EXPECT_EQ( |
| 498 CONTENT_SETTING_ASK, | 507 CONTENT_SETTING_ASK, |
| 499 GetGeolocationContentSetting(requesting_frame_1, requesting_frame_1)); | 508 GetGeolocationContentSetting(requesting_frame_1, requesting_frame_1)); |
| 500 | 509 |
| 501 NavigateAndCommit(requesting_frame_0); | 510 NavigateAndCommit(requesting_frame_0); |
| 502 BubbleManagerDocumentLoadCompleted(); | 511 BubbleManagerDocumentLoadCompleted(); |
| 503 | 512 |
| 504 // Check that no permission requests have happened yet. | 513 // Check that no permission requests have happened yet. |
| 505 EXPECT_EQ(0U, GetNumberOfPrompts()); | 514 EXPECT_EQ(0U, GetNumberOfPrompts()); |
| 506 | 515 |
| 507 // Request permission for two frames. | 516 // Request permission for two frames. |
| 508 RequestGeolocationPermission( | 517 RequestGeolocationPermission( |
| 509 web_contents(), RequestID(0), requesting_frame_0); | 518 web_contents(), RequestID(0), requesting_frame_0, true); |
| 510 RequestGeolocationPermission( | 519 RequestGeolocationPermission( |
| 511 web_contents(), RequestID(1), requesting_frame_1); | 520 web_contents(), RequestID(1), requesting_frame_1, true); |
| 512 // Ensure only one infobar is created. | 521 // Ensure only one infobar is created. |
| 513 ASSERT_EQ(1U, GetNumberOfPrompts()); | 522 ASSERT_EQ(1U, GetNumberOfPrompts()); |
| 514 base::string16 text_0 = GetPromptText(); | 523 base::string16 text_0 = GetPromptText(); |
| 515 | 524 |
| 516 // Accept the first frame. | 525 // Accept the first frame. |
| 517 AcceptPrompt(); | 526 AcceptPrompt(); |
| 518 CheckTabContentsState(requesting_frame_0, CONTENT_SETTING_ALLOW); | 527 CheckTabContentsState(requesting_frame_0, CONTENT_SETTING_ALLOW); |
| 519 CheckPermissionMessageSent(0, true); | 528 CheckPermissionMessageSent(0, true); |
| 520 | 529 |
| 521 #if BUILDFLAG(ANDROID_JAVA_UI) | 530 #if BUILDFLAG(ANDROID_JAVA_UI) |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 557 TEST_F(GeolocationPermissionContextTests, HashIsIgnored) { | 566 TEST_F(GeolocationPermissionContextTests, HashIsIgnored) { |
| 558 GURL url_a("https://www.example.com/geolocation#a"); | 567 GURL url_a("https://www.example.com/geolocation#a"); |
| 559 GURL url_b("https://www.example.com/geolocation#b"); | 568 GURL url_b("https://www.example.com/geolocation#b"); |
| 560 | 569 |
| 561 // Navigate to the first url. | 570 // Navigate to the first url. |
| 562 NavigateAndCommit(url_a); | 571 NavigateAndCommit(url_a); |
| 563 BubbleManagerDocumentLoadCompleted(); | 572 BubbleManagerDocumentLoadCompleted(); |
| 564 | 573 |
| 565 // Check permission is requested. | 574 // Check permission is requested. |
| 566 ASSERT_EQ(0U, GetNumberOfPrompts()); | 575 ASSERT_EQ(0U, GetNumberOfPrompts()); |
| 567 RequestGeolocationPermission(web_contents(), RequestID(0), url_a); | 576 #if BUILDFLAG(ANDROID_JAVA_UI) |
| 577 const bool user_gesture = false; |
| 578 #else |
| 579 const bool user_gesture = true; |
| 580 #endif |
| 581 RequestGeolocationPermission(web_contents(), RequestID(0), url_a, |
| 582 user_gesture); |
| 568 ASSERT_EQ(1U, GetNumberOfPrompts()); | 583 ASSERT_EQ(1U, GetNumberOfPrompts()); |
| 569 | 584 |
| 570 // Change the hash, we'll still be on the same page. | 585 // Change the hash, we'll still be on the same page. |
| 571 NavigateAndCommit(url_b); | 586 NavigateAndCommit(url_b); |
| 572 BubbleManagerDocumentLoadCompleted(); | 587 BubbleManagerDocumentLoadCompleted(); |
| 573 | 588 |
| 574 // Accept. | 589 // Accept. |
| 575 AcceptPrompt(); | 590 AcceptPrompt(); |
| 576 CheckTabContentsState(url_a, CONTENT_SETTING_ALLOW); | 591 CheckTabContentsState(url_a, CONTENT_SETTING_ALLOW); |
| 577 CheckTabContentsState(url_b, CONTENT_SETTING_ALLOW); | 592 CheckTabContentsState(url_b, CONTENT_SETTING_ALLOW); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 593 #else | 608 #else |
| 594 #define MAYBE_PermissionForFileScheme DISABLED_PermissionForFileScheme | 609 #define MAYBE_PermissionForFileScheme DISABLED_PermissionForFileScheme |
| 595 #endif | 610 #endif |
| 596 TEST_F(GeolocationPermissionContextTests, MAYBE_PermissionForFileScheme) { | 611 TEST_F(GeolocationPermissionContextTests, MAYBE_PermissionForFileScheme) { |
| 597 GURL requesting_frame("file://example/geolocation.html"); | 612 GURL requesting_frame("file://example/geolocation.html"); |
| 598 NavigateAndCommit(requesting_frame); | 613 NavigateAndCommit(requesting_frame); |
| 599 BubbleManagerDocumentLoadCompleted(); | 614 BubbleManagerDocumentLoadCompleted(); |
| 600 | 615 |
| 601 // Check permission is requested. | 616 // Check permission is requested. |
| 602 ASSERT_EQ(0U, GetNumberOfPrompts()); | 617 ASSERT_EQ(0U, GetNumberOfPrompts()); |
| 603 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame); | 618 RequestGeolocationPermission( |
| 619 web_contents(), RequestID(0), requesting_frame, true); |
| 604 EXPECT_EQ(1U, GetNumberOfPrompts()); | 620 EXPECT_EQ(1U, GetNumberOfPrompts()); |
| 605 | 621 |
| 606 // Accept the frame. | 622 // Accept the frame. |
| 607 AcceptPrompt(); | 623 AcceptPrompt(); |
| 608 CheckTabContentsState(requesting_frame, CONTENT_SETTING_ALLOW); | 624 CheckTabContentsState(requesting_frame, CONTENT_SETTING_ALLOW); |
| 609 CheckPermissionMessageSent(0, true); | 625 CheckPermissionMessageSent(0, true); |
| 610 | 626 |
| 611 // Make sure the setting is not stored. | 627 // Make sure the setting is not stored. |
| 612 EXPECT_EQ( | 628 EXPECT_EQ( |
| 613 CONTENT_SETTING_ASK, | 629 CONTENT_SETTING_ASK, |
| 614 GetGeolocationContentSetting(requesting_frame, requesting_frame)); | 630 GetGeolocationContentSetting(requesting_frame, requesting_frame)); |
| 615 } | 631 } |
| 616 | 632 |
| 617 TEST_F(GeolocationPermissionContextTests, CancelGeolocationPermissionRequest) { | 633 TEST_F(GeolocationPermissionContextTests, CancelGeolocationPermissionRequest) { |
| 618 GURL frame_0("https://www.example.com/geolocation"); | 634 GURL frame_0("https://www.example.com/geolocation"); |
| 619 GURL frame_1("https://www.example-2.com/geolocation"); | 635 GURL frame_1("https://www.example-2.com/geolocation"); |
| 620 EXPECT_EQ( | 636 EXPECT_EQ( |
| 621 CONTENT_SETTING_ASK, GetGeolocationContentSetting(frame_0, frame_0)); | 637 CONTENT_SETTING_ASK, GetGeolocationContentSetting(frame_0, frame_0)); |
| 622 EXPECT_EQ( | 638 EXPECT_EQ( |
| 623 CONTENT_SETTING_ASK, GetGeolocationContentSetting(frame_1, frame_0)); | 639 CONTENT_SETTING_ASK, GetGeolocationContentSetting(frame_1, frame_0)); |
| 624 | 640 |
| 625 NavigateAndCommit(frame_0); | 641 NavigateAndCommit(frame_0); |
| 626 BubbleManagerDocumentLoadCompleted(); | 642 BubbleManagerDocumentLoadCompleted(); |
| 627 | 643 |
| 628 ASSERT_EQ(0U, GetNumberOfPrompts()); | 644 ASSERT_EQ(0U, GetNumberOfPrompts()); |
| 629 | 645 |
| 630 // Request permission for two frames. | 646 // Request permission for two frames. |
| 631 RequestGeolocationPermission(web_contents(), RequestID(0), frame_0); | 647 RequestGeolocationPermission( |
| 632 RequestGeolocationPermission(web_contents(), RequestID(1), frame_1); | 648 web_contents(), RequestID(0), frame_0, true); |
| 649 RequestGeolocationPermission( |
| 650 web_contents(), RequestID(1), frame_1, true); |
| 633 | 651 |
| 634 // Get the first permission request text. | 652 // Get the first permission request text. |
| 635 ASSERT_EQ(1U, GetNumberOfPrompts()); | 653 ASSERT_EQ(1U, GetNumberOfPrompts()); |
| 636 base::string16 text_0 = GetPromptText(); | 654 base::string16 text_0 = GetPromptText(); |
| 637 ASSERT_FALSE(text_0.empty()); | 655 ASSERT_FALSE(text_0.empty()); |
| 638 | 656 |
| 639 // Simulate the frame going away; the request should be removed. | 657 // Simulate the frame going away; the request should be removed. |
| 640 #if !BUILDFLAG(ANDROID_JAVA_UI) | 658 #if !BUILDFLAG(ANDROID_JAVA_UI) |
| 641 PermissionBubbleManager* manager = | 659 PermissionBubbleManager* manager = |
| 642 PermissionBubbleManager::FromWebContents(web_contents()); | 660 PermissionBubbleManager::FromWebContents(web_contents()); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 664 | 682 |
| 665 TEST_F(GeolocationPermissionContextTests, InvalidURL) { | 683 TEST_F(GeolocationPermissionContextTests, InvalidURL) { |
| 666 // Navigate to the first url. | 684 // Navigate to the first url. |
| 667 GURL invalid_embedder("about:blank"); | 685 GURL invalid_embedder("about:blank"); |
| 668 GURL requesting_frame; | 686 GURL requesting_frame; |
| 669 NavigateAndCommit(invalid_embedder); | 687 NavigateAndCommit(invalid_embedder); |
| 670 BubbleManagerDocumentLoadCompleted(); | 688 BubbleManagerDocumentLoadCompleted(); |
| 671 | 689 |
| 672 // Nothing should be displayed. | 690 // Nothing should be displayed. |
| 673 EXPECT_EQ(0U, GetNumberOfPrompts()); | 691 EXPECT_EQ(0U, GetNumberOfPrompts()); |
| 674 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame); | 692 RequestGeolocationPermission( |
| 693 web_contents(), RequestID(0), requesting_frame, true); |
| 675 EXPECT_EQ(0U, GetNumberOfPrompts()); | 694 EXPECT_EQ(0U, GetNumberOfPrompts()); |
| 676 CheckPermissionMessageSent(0, false); | 695 CheckPermissionMessageSent(0, false); |
| 677 } | 696 } |
| 678 | 697 |
| 679 TEST_F(GeolocationPermissionContextTests, SameOriginMultipleTabs) { | 698 TEST_F(GeolocationPermissionContextTests, SameOriginMultipleTabs) { |
| 680 GURL url_a("https://www.example.com/geolocation"); | 699 GURL url_a("https://www.example.com/geolocation"); |
| 681 GURL url_b("https://www.example-2.com/geolocation"); | 700 GURL url_b("https://www.example-2.com/geolocation"); |
| 682 NavigateAndCommit(url_a); // Tab A0 | 701 NavigateAndCommit(url_a); // Tab A0 |
| 683 AddNewTab(url_b); // Tab B (extra_tabs_[0]) | 702 AddNewTab(url_b); // Tab B (extra_tabs_[0]) |
| 684 AddNewTab(url_a); // Tab A1 (extra_tabs_[1]) | 703 AddNewTab(url_a); // Tab A1 (extra_tabs_[1]) |
| 685 BubbleManagerDocumentLoadCompleted(); | 704 BubbleManagerDocumentLoadCompleted(); |
| 686 BubbleManagerDocumentLoadCompleted(extra_tabs_[0].get()); | 705 BubbleManagerDocumentLoadCompleted(extra_tabs_[0].get()); |
| 687 BubbleManagerDocumentLoadCompleted(extra_tabs_[1].get()); | 706 BubbleManagerDocumentLoadCompleted(extra_tabs_[1].get()); |
| 688 #if !BUILDFLAG(ANDROID_JAVA_UI) | 707 #if !BUILDFLAG(ANDROID_JAVA_UI) |
| 689 PermissionBubbleManager* manager_a0 = | 708 PermissionBubbleManager* manager_a0 = |
| 690 PermissionBubbleManager::FromWebContents(web_contents()); | 709 PermissionBubbleManager::FromWebContents(web_contents()); |
| 691 PermissionBubbleManager* manager_b = | 710 PermissionBubbleManager* manager_b = |
| 692 PermissionBubbleManager::FromWebContents(extra_tabs_[0].get()); | 711 PermissionBubbleManager::FromWebContents(extra_tabs_[0].get()); |
| 693 PermissionBubbleManager* manager_a1 = | 712 PermissionBubbleManager* manager_a1 = |
| 694 PermissionBubbleManager::FromWebContents(extra_tabs_[1].get()); | 713 PermissionBubbleManager::FromWebContents(extra_tabs_[1].get()); |
| 695 #endif | 714 #endif |
| 696 | 715 |
| 697 // Request permission in all three tabs. | 716 // Request permission in all three tabs. |
| 698 RequestGeolocationPermission(web_contents(), RequestID(0), url_a); | |
| 699 RequestGeolocationPermission( | 717 RequestGeolocationPermission( |
| 700 extra_tabs_[0].get(), RequestIDForTab(0, 0), url_b); | 718 web_contents(), RequestID(0), url_a, true); |
| 701 RequestGeolocationPermission( | 719 RequestGeolocationPermission( |
| 702 extra_tabs_[1].get(), RequestIDForTab(1, 0), url_a); | 720 extra_tabs_[0].get(), RequestIDForTab(0, 0), url_b, true); |
| 721 RequestGeolocationPermission( |
| 722 extra_tabs_[1].get(), RequestIDForTab(1, 0), url_a, true); |
| 703 ASSERT_EQ(1U, GetNumberOfPrompts()); // For A0. | 723 ASSERT_EQ(1U, GetNumberOfPrompts()); // For A0. |
| 704 #if !BUILDFLAG(ANDROID_JAVA_UI) | 724 #if !BUILDFLAG(ANDROID_JAVA_UI) |
| 705 ASSERT_EQ(1U, GetBubblesQueueSize(manager_b)); | 725 ASSERT_EQ(1U, GetBubblesQueueSize(manager_b)); |
| 706 ASSERT_EQ(1U, GetBubblesQueueSize(manager_a1)); | 726 ASSERT_EQ(1U, GetBubblesQueueSize(manager_a1)); |
| 707 #else | 727 #else |
| 708 ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count()); | 728 ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count()); |
| 709 ASSERT_EQ(1U, infobar_service_for_tab(1)->infobar_count()); | 729 ASSERT_EQ(1U, infobar_service_for_tab(1)->infobar_count()); |
| 710 #endif | 730 #endif |
| 711 | 731 |
| 712 // Accept the permission in tab A0. | 732 // Accept the permission in tab A0. |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 745 BubbleManagerDocumentLoadCompleted(); | 765 BubbleManagerDocumentLoadCompleted(); |
| 746 BubbleManagerDocumentLoadCompleted(extra_tabs_[0].get()); | 766 BubbleManagerDocumentLoadCompleted(extra_tabs_[0].get()); |
| 747 PermissionBubbleManager* manager_a0 = | 767 PermissionBubbleManager* manager_a0 = |
| 748 PermissionBubbleManager::FromWebContents(web_contents()); | 768 PermissionBubbleManager::FromWebContents(web_contents()); |
| 749 PermissionBubbleManager* manager_a1 = | 769 PermissionBubbleManager* manager_a1 = |
| 750 PermissionBubbleManager::FromWebContents(extra_tabs_[0].get()); | 770 PermissionBubbleManager::FromWebContents(extra_tabs_[0].get()); |
| 751 #endif | 771 #endif |
| 752 | 772 |
| 753 // Request permission in both tabs; the extra tab will have two permission | 773 // Request permission in both tabs; the extra tab will have two permission |
| 754 // requests from two origins. | 774 // requests from two origins. |
| 755 RequestGeolocationPermission(web_contents(), RequestID(0), url_a); | |
| 756 RequestGeolocationPermission( | 775 RequestGeolocationPermission( |
| 757 extra_tabs_[0].get(), RequestIDForTab(0, 0), url_a); | 776 web_contents(), RequestID(0), url_a, true); |
| 758 RequestGeolocationPermission( | 777 RequestGeolocationPermission( |
| 759 extra_tabs_[0].get(), RequestIDForTab(0, 1), url_b); | 778 extra_tabs_[0].get(), RequestIDForTab(0, 0), url_a, true); |
| 779 RequestGeolocationPermission( |
| 780 extra_tabs_[0].get(), RequestIDForTab(0, 1), url_b, true); |
| 760 #if !BUILDFLAG(ANDROID_JAVA_UI) | 781 #if !BUILDFLAG(ANDROID_JAVA_UI) |
| 761 ASSERT_EQ(1U, GetBubblesQueueSize(manager_a0)); | 782 ASSERT_EQ(1U, GetBubblesQueueSize(manager_a0)); |
| 762 ASSERT_EQ(1U, GetBubblesQueueSize(manager_a1)); | 783 ASSERT_EQ(1U, GetBubblesQueueSize(manager_a1)); |
| 763 #else | 784 #else |
| 764 ASSERT_EQ(1U, infobar_service()->infobar_count()); | 785 ASSERT_EQ(1U, infobar_service()->infobar_count()); |
| 765 ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count()); | 786 ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count()); |
| 766 #endif | 787 #endif |
| 767 | 788 |
| 768 // Accept the first request in tab A1. | 789 // Accept the first request in tab A1. |
| 769 #if !BUILDFLAG(ANDROID_JAVA_UI) | 790 #if !BUILDFLAG(ANDROID_JAVA_UI) |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 818 GetGeolocationContentSetting(requesting_frame_0, requesting_frame_0)); | 839 GetGeolocationContentSetting(requesting_frame_0, requesting_frame_0)); |
| 819 EXPECT_EQ( | 840 EXPECT_EQ( |
| 820 CONTENT_SETTING_ASK, | 841 CONTENT_SETTING_ASK, |
| 821 GetGeolocationContentSetting(requesting_frame_1, requesting_frame_0)); | 842 GetGeolocationContentSetting(requesting_frame_1, requesting_frame_0)); |
| 822 | 843 |
| 823 NavigateAndCommit(requesting_frame_0); | 844 NavigateAndCommit(requesting_frame_0); |
| 824 BubbleManagerDocumentLoadCompleted(); | 845 BubbleManagerDocumentLoadCompleted(); |
| 825 | 846 |
| 826 // Request permission for two frames. | 847 // Request permission for two frames. |
| 827 RequestGeolocationPermission( | 848 RequestGeolocationPermission( |
| 828 web_contents(), RequestID(0), requesting_frame_0); | 849 web_contents(), RequestID(0), requesting_frame_0, false); |
| 829 RequestGeolocationPermission( | 850 RequestGeolocationPermission( |
| 830 web_contents(), RequestID(1), requesting_frame_1); | 851 web_contents(), RequestID(1), requesting_frame_1, false); |
| 831 | 852 |
| 832 // Ensure only one prompt is created. | 853 // Ensure only one prompt is created. |
| 833 ASSERT_EQ(1U, GetNumberOfPrompts()); | 854 ASSERT_EQ(1U, GetNumberOfPrompts()); |
| 834 | 855 |
| 835 // Delete the tab contents. | 856 // Delete the tab contents. |
| 836 #if BUILDFLAG(ANDROID_JAVA_UI) | 857 #if BUILDFLAG(ANDROID_JAVA_UI) |
| 837 infobars::InfoBar* infobar = infobar_service()->infobar_at(0); | 858 infobars::InfoBar* infobar = infobar_service()->infobar_at(0); |
| 838 DeleteContents(); | 859 DeleteContents(); |
| 839 ASSERT_EQ(1U, closed_infobar_tracker_.size()); | 860 ASSERT_EQ(1U, closed_infobar_tracker_.size()); |
| 840 ASSERT_TRUE(closed_infobar_tracker_.Contains(infobar)); | 861 ASSERT_TRUE(closed_infobar_tracker_.Contains(infobar)); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 861 HostContentSettingsMap* map = | 882 HostContentSettingsMap* map = |
| 862 HostContentSettingsMapFactory::GetForProfile(profile()); | 883 HostContentSettingsMapFactory::GetForProfile(profile()); |
| 863 map->SetPrefClockForTesting(std::unique_ptr<base::Clock>(test_clock)); | 884 map->SetPrefClockForTesting(std::unique_ptr<base::Clock>(test_clock)); |
| 864 | 885 |
| 865 // The permission shouldn't have been used yet. | 886 // The permission shouldn't have been used yet. |
| 866 EXPECT_EQ(map->GetLastUsage(requesting_frame.GetOrigin(), | 887 EXPECT_EQ(map->GetLastUsage(requesting_frame.GetOrigin(), |
| 867 requesting_frame.GetOrigin(), | 888 requesting_frame.GetOrigin(), |
| 868 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), | 889 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), |
| 869 0); | 890 0); |
| 870 ASSERT_EQ(0U, GetNumberOfPrompts()); | 891 ASSERT_EQ(0U, GetNumberOfPrompts()); |
| 871 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame); | 892 RequestGeolocationPermission( |
| 893 web_contents(), RequestID(0), requesting_frame, false); |
| 872 ASSERT_EQ(1U, GetNumberOfPrompts()); | 894 ASSERT_EQ(1U, GetNumberOfPrompts()); |
| 873 | 895 |
| 874 AcceptPrompt(); | 896 AcceptPrompt(); |
| 875 CheckTabContentsState(requesting_frame, CONTENT_SETTING_ALLOW); | 897 CheckTabContentsState(requesting_frame, CONTENT_SETTING_ALLOW); |
| 876 CheckPermissionMessageSent(0, true); | 898 CheckPermissionMessageSent(0, true); |
| 877 | 899 |
| 878 // Permission has been used at the starting time. | 900 // Permission has been used at the starting time. |
| 879 EXPECT_EQ(map->GetLastUsage(requesting_frame.GetOrigin(), | 901 EXPECT_EQ(map->GetLastUsage(requesting_frame.GetOrigin(), |
| 880 requesting_frame.GetOrigin(), | 902 requesting_frame.GetOrigin(), |
| 881 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), | 903 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), |
| 882 10); | 904 10); |
| 883 | 905 |
| 884 test_clock->Advance(base::TimeDelta::FromSeconds(3)); | 906 test_clock->Advance(base::TimeDelta::FromSeconds(3)); |
| 885 RequestGeolocationPermission(web_contents(), RequestID(0), requesting_frame); | 907 RequestGeolocationPermission( |
| 908 web_contents(), RequestID(0), requesting_frame, false); |
| 886 | 909 |
| 887 // Permission has been used three seconds later. | 910 // Permission has been used three seconds later. |
| 888 EXPECT_EQ(map->GetLastUsage(requesting_frame.GetOrigin(), | 911 EXPECT_EQ(map->GetLastUsage(requesting_frame.GetOrigin(), |
| 889 requesting_frame.GetOrigin(), | 912 requesting_frame.GetOrigin(), |
| 890 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), | 913 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), |
| 891 13); | 914 13); |
| 892 } | 915 } |
| 893 | 916 |
| 894 TEST_F(GeolocationPermissionContextTests, LastUsageAuditedMultipleFrames) { | 917 TEST_F(GeolocationPermissionContextTests, LastUsageAuditedMultipleFrames) { |
| 895 base::SimpleTestClock* test_clock = new base::SimpleTestClock; | 918 base::SimpleTestClock* test_clock = new base::SimpleTestClock; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 913 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), | 936 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), |
| 914 0); | 937 0); |
| 915 | 938 |
| 916 NavigateAndCommit(requesting_frame_0); | 939 NavigateAndCommit(requesting_frame_0); |
| 917 BubbleManagerDocumentLoadCompleted(); | 940 BubbleManagerDocumentLoadCompleted(); |
| 918 | 941 |
| 919 EXPECT_EQ(0U, GetNumberOfPrompts()); | 942 EXPECT_EQ(0U, GetNumberOfPrompts()); |
| 920 | 943 |
| 921 // Request permission for two frames. | 944 // Request permission for two frames. |
| 922 RequestGeolocationPermission( | 945 RequestGeolocationPermission( |
| 923 web_contents(), RequestID(0), requesting_frame_0); | 946 web_contents(), RequestID(0), requesting_frame_0, false); |
| 924 RequestGeolocationPermission( | 947 RequestGeolocationPermission( |
| 925 web_contents(), RequestID(1), requesting_frame_1); | 948 web_contents(), RequestID(1), requesting_frame_1, false); |
| 926 | 949 |
| 927 // Ensure only one infobar is created. | 950 // Ensure only one infobar is created. |
| 928 ASSERT_EQ(1U, GetNumberOfPrompts()); | 951 ASSERT_EQ(1U, GetNumberOfPrompts()); |
| 929 | 952 |
| 930 // Accept the first frame. | 953 // Accept the first frame. |
| 931 AcceptPrompt(); | 954 AcceptPrompt(); |
| 932 #if BUILDFLAG(ANDROID_JAVA_UI) | 955 #if BUILDFLAG(ANDROID_JAVA_UI) |
| 933 infobar_service()->RemoveInfoBar(infobar_service()->infobar_at(0)); | 956 infobar_service()->RemoveInfoBar(infobar_service()->infobar_at(0)); |
| 934 #endif | 957 #endif |
| 935 CheckTabContentsState(requesting_frame_0, CONTENT_SETTING_ALLOW); | 958 CheckTabContentsState(requesting_frame_0, CONTENT_SETTING_ALLOW); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 963 requesting_frame_0.GetOrigin(), | 986 requesting_frame_0.GetOrigin(), |
| 964 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), | 987 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), |
| 965 10); | 988 10); |
| 966 EXPECT_EQ(map->GetLastUsage(requesting_frame_1.GetOrigin(), | 989 EXPECT_EQ(map->GetLastUsage(requesting_frame_1.GetOrigin(), |
| 967 requesting_frame_0.GetOrigin(), | 990 requesting_frame_0.GetOrigin(), |
| 968 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), | 991 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), |
| 969 11); | 992 11); |
| 970 | 993 |
| 971 test_clock->Advance(base::TimeDelta::FromSeconds(2)); | 994 test_clock->Advance(base::TimeDelta::FromSeconds(2)); |
| 972 RequestGeolocationPermission( | 995 RequestGeolocationPermission( |
| 973 web_contents(), RequestID(0), requesting_frame_0); | 996 web_contents(), RequestID(0), requesting_frame_0, false); |
| 974 | 997 |
| 975 // Verify that requesting permission in one frame doesn't update other where | 998 // Verify that requesting permission in one frame doesn't update other where |
| 976 // it is the embedder. | 999 // it is the embedder. |
| 977 EXPECT_EQ(map->GetLastUsage(requesting_frame_0.GetOrigin(), | 1000 EXPECT_EQ(map->GetLastUsage(requesting_frame_0.GetOrigin(), |
| 978 requesting_frame_0.GetOrigin(), | 1001 requesting_frame_0.GetOrigin(), |
| 979 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), | 1002 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), |
| 980 13); | 1003 13); |
| 981 EXPECT_EQ(map->GetLastUsage(requesting_frame_1.GetOrigin(), | 1004 EXPECT_EQ(map->GetLastUsage(requesting_frame_1.GetOrigin(), |
| 982 requesting_frame_0.GetOrigin(), | 1005 requesting_frame_0.GetOrigin(), |
| 983 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), | 1006 CONTENT_SETTINGS_TYPE_GEOLOCATION).ToDoubleT(), |
| 984 11); | 1007 11); |
| 985 } | 1008 } |
| OLD | NEW |