| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
| 8 #include "base/string_number_conversions.h" | 8 #include "base/string_number_conversions.h" |
| 9 #include "base/stringprintf.h" | 9 #include "base/stringprintf.h" |
| 10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | 21 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| 22 #include "chrome/common/chrome_notification_types.h" | 22 #include "chrome/common/chrome_notification_types.h" |
| 23 #include "chrome/common/chrome_paths.h" | 23 #include "chrome/common/chrome_paths.h" |
| 24 #include "chrome/common/content_settings_pattern.h" | 24 #include "chrome/common/content_settings_pattern.h" |
| 25 #include "chrome/test/base/in_process_browser_test.h" | 25 #include "chrome/test/base/in_process_browser_test.h" |
| 26 #include "chrome/test/base/ui_test_utils.h" | 26 #include "chrome/test/base/ui_test_utils.h" |
| 27 #include "content/browser/geolocation/arbitrator_dependency_factories_for_test.h
" | 27 #include "content/browser/geolocation/arbitrator_dependency_factories_for_test.h
" |
| 28 #include "content/browser/geolocation/location_arbitrator.h" | 28 #include "content/browser/geolocation/location_arbitrator.h" |
| 29 #include "content/browser/geolocation/mock_location_provider.h" | 29 #include "content/browser/geolocation/mock_location_provider.h" |
| 30 #include "content/browser/renderer_host/render_view_host.h" | 30 #include "content/browser/renderer_host/render_view_host.h" |
| 31 #include "content/browser/tab_contents/tab_contents.h" | |
| 32 #include "content/public/browser/notification_service.h" | 31 #include "content/public/browser/notification_service.h" |
| 33 #include "content/public/browser/notification_details.h" | 32 #include "content/public/browser/notification_details.h" |
| 33 #include "content/public/browser/web_contents.h" |
| 34 #include "net/base/net_util.h" | 34 #include "net/base/net_util.h" |
| 35 #include "net/test/test_server.h" | 35 #include "net/test/test_server.h" |
| 36 | 36 |
| 37 using content::WebContents; |
| 38 |
| 37 namespace { | 39 namespace { |
| 38 | 40 |
| 39 // Used to block until an iframe is loaded via a javascript call. | 41 // Used to block until an iframe is loaded via a javascript call. |
| 40 // Note: NavigateToURLBlockUntilNavigationsComplete doesn't seem to work for | 42 // Note: NavigateToURLBlockUntilNavigationsComplete doesn't seem to work for |
| 41 // multiple embedded iframes, as notifications seem to be 'batched'. Instead, we | 43 // multiple embedded iframes, as notifications seem to be 'batched'. Instead, we |
| 42 // load and wait one single frame here by calling a javascript function. | 44 // load and wait one single frame here by calling a javascript function. |
| 43 class IFrameLoader : public content::NotificationObserver { | 45 class IFrameLoader : public content::NotificationObserver { |
| 44 public: | 46 public: |
| 45 IFrameLoader(Browser* browser, int iframe_id, const GURL& url) | 47 IFrameLoader(Browser* browser, int iframe_id, const GURL& url) |
| 46 : navigation_completed_(false), | 48 : navigation_completed_(false), |
| 47 javascript_completed_(false) { | 49 javascript_completed_(false) { |
| 48 NavigationController* controller = | 50 NavigationController* controller = |
| 49 &browser->GetSelectedTabContents()->GetController(); | 51 &browser->GetSelectedWebContents()->GetController(); |
| 50 registrar_.Add(this, content::NOTIFICATION_LOAD_STOP, | 52 registrar_.Add(this, content::NOTIFICATION_LOAD_STOP, |
| 51 content::Source<NavigationController>(controller)); | 53 content::Source<NavigationController>(controller)); |
| 52 registrar_.Add(this, chrome::NOTIFICATION_DOM_OPERATION_RESPONSE, | 54 registrar_.Add(this, chrome::NOTIFICATION_DOM_OPERATION_RESPONSE, |
| 53 content::NotificationService::AllSources()); | 55 content::NotificationService::AllSources()); |
| 54 std::string script = base::StringPrintf( | 56 std::string script = base::StringPrintf( |
| 55 "window.domAutomationController.setAutomationId(0);" | 57 "window.domAutomationController.setAutomationId(0);" |
| 56 "window.domAutomationController.send(addIFrame(%d, \"%s\"));", | 58 "window.domAutomationController.send(addIFrame(%d, \"%s\"));", |
| 57 iframe_id, | 59 iframe_id, |
| 58 url.spec().c_str()); | 60 url.spec().c_str()); |
| 59 browser->GetSelectedTabContents()->GetRenderViewHost()-> | 61 browser->GetSelectedWebContents()->GetRenderViewHost()-> |
| 60 ExecuteJavascriptInWebFrame(string16(), UTF8ToUTF16(script)); | 62 ExecuteJavascriptInWebFrame(string16(), UTF8ToUTF16(script)); |
| 61 ui_test_utils::RunMessageLoop(); | 63 ui_test_utils::RunMessageLoop(); |
| 62 | 64 |
| 63 EXPECT_EQ(base::StringPrintf("\"%d\"", iframe_id), javascript_response_); | 65 EXPECT_EQ(base::StringPrintf("\"%d\"", iframe_id), javascript_response_); |
| 64 registrar_.RemoveAll(); | 66 registrar_.RemoveAll(); |
| 65 // Now that we loaded the iframe, let's fetch its src. | 67 // Now that we loaded the iframe, let's fetch its src. |
| 66 script = base::StringPrintf( | 68 script = base::StringPrintf( |
| 67 "window.domAutomationController.send(getIFrameSrc(%d))", iframe_id); | 69 "window.domAutomationController.send(getIFrameSrc(%d))", iframe_id); |
| 68 std::string iframe_src; | 70 std::string iframe_src; |
| 69 EXPECT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( | 71 EXPECT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( |
| 70 browser->GetSelectedTabContents()->GetRenderViewHost(), | 72 browser->GetSelectedWebContents()->GetRenderViewHost(), |
| 71 L"", UTF8ToWide(script), &iframe_src)); | 73 L"", UTF8ToWide(script), &iframe_src)); |
| 72 iframe_url_ = GURL(iframe_src); | 74 iframe_url_ = GURL(iframe_src); |
| 73 } | 75 } |
| 74 | 76 |
| 75 GURL iframe_url() const { return iframe_url_; } | 77 GURL iframe_url() const { return iframe_url_; } |
| 76 | 78 |
| 77 virtual void Observe(int type, | 79 virtual void Observe(int type, |
| 78 const content::NotificationSource& source, | 80 const content::NotificationSource& source, |
| 79 const content::NotificationDetails& details) { | 81 const content::NotificationDetails& details) { |
| 80 if (type == content::NOTIFICATION_LOAD_STOP) { | 82 if (type == content::NOTIFICATION_LOAD_STOP) { |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 iframe_urls_.resize(number_iframes); | 275 iframe_urls_.resize(number_iframes); |
| 274 for (int i = 0; i < number_iframes; ++i) { | 276 for (int i = 0; i < number_iframes; ++i) { |
| 275 IFrameLoader loader(current_browser_, i, GURL()); | 277 IFrameLoader loader(current_browser_, i, GURL()); |
| 276 iframe_urls_[i] = loader.iframe_url(); | 278 iframe_urls_[i] = loader.iframe_url(); |
| 277 } | 279 } |
| 278 } | 280 } |
| 279 | 281 |
| 280 void AddGeolocationWatch(bool wait_for_infobar) { | 282 void AddGeolocationWatch(bool wait_for_infobar) { |
| 281 GeolocationNotificationObserver notification_observer(wait_for_infobar); | 283 GeolocationNotificationObserver notification_observer(wait_for_infobar); |
| 282 notification_observer.AddWatchAndWaitForNotification( | 284 notification_observer.AddWatchAndWaitForNotification( |
| 283 current_browser_->GetSelectedTabContents()->GetRenderViewHost(), | 285 current_browser_->GetSelectedWebContents()->GetRenderViewHost(), |
| 284 iframe_xpath_); | 286 iframe_xpath_); |
| 285 if (wait_for_infobar) { | 287 if (wait_for_infobar) { |
| 286 EXPECT_TRUE(notification_observer.infobar_); | 288 EXPECT_TRUE(notification_observer.infobar_); |
| 287 infobar_ = notification_observer.infobar_; | 289 infobar_ = notification_observer.infobar_; |
| 288 } | 290 } |
| 289 } | 291 } |
| 290 | 292 |
| 291 Geoposition GeopositionFromLatLong(double latitude, double longitude) { | 293 Geoposition GeopositionFromLatLong(double latitude, double longitude) { |
| 292 Geoposition geoposition; | 294 Geoposition geoposition; |
| 293 geoposition.latitude = latitude; | 295 geoposition.latitude = latitude; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 317 tab_contents_wrapper->content_settings(); | 319 tab_contents_wrapper->content_settings(); |
| 318 const GeolocationSettingsState& settings_state = | 320 const GeolocationSettingsState& settings_state = |
| 319 content_settings->geolocation_settings_state(); | 321 content_settings->geolocation_settings_state(); |
| 320 size_t state_map_size = settings_state.state_map().size(); | 322 size_t state_map_size = settings_state.state_map().size(); |
| 321 ASSERT_TRUE(infobar_); | 323 ASSERT_TRUE(infobar_); |
| 322 LOG(WARNING) << "will set infobar response"; | 324 LOG(WARNING) << "will set infobar response"; |
| 323 { | 325 { |
| 324 ui_test_utils::WindowedNotificationObserver observer( | 326 ui_test_utils::WindowedNotificationObserver observer( |
| 325 content::NOTIFICATION_LOAD_STOP, | 327 content::NOTIFICATION_LOAD_STOP, |
| 326 content::Source<NavigationController>( | 328 content::Source<NavigationController>( |
| 327 &tab_contents_wrapper->tab_contents()->GetController())); | 329 &tab_contents_wrapper->web_contents()->GetController())); |
| 328 if (allowed) | 330 if (allowed) |
| 329 infobar_->AsConfirmInfoBarDelegate()->Accept(); | 331 infobar_->AsConfirmInfoBarDelegate()->Accept(); |
| 330 else | 332 else |
| 331 infobar_->AsConfirmInfoBarDelegate()->Cancel(); | 333 infobar_->AsConfirmInfoBarDelegate()->Cancel(); |
| 332 observer.Wait(); | 334 observer.Wait(); |
| 333 } | 335 } |
| 334 | 336 |
| 335 tab_contents_wrapper->infobar_tab_helper()->RemoveInfoBar(infobar_); | 337 tab_contents_wrapper->infobar_tab_helper()->RemoveInfoBar(infobar_); |
| 336 LOG(WARNING) << "infobar response set"; | 338 LOG(WARNING) << "infobar response set"; |
| 337 infobar_ = NULL; | 339 infobar_ = NULL; |
| 338 EXPECT_GT(settings_state.state_map().size(), state_map_size); | 340 EXPECT_GT(settings_state.state_map().size(), state_map_size); |
| 339 GURL requesting_origin = requesting_url.GetOrigin(); | 341 GURL requesting_origin = requesting_url.GetOrigin(); |
| 340 EXPECT_EQ(1U, settings_state.state_map().count(requesting_origin)); | 342 EXPECT_EQ(1U, settings_state.state_map().count(requesting_origin)); |
| 341 ContentSetting expected_setting = | 343 ContentSetting expected_setting = |
| 342 allowed ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK; | 344 allowed ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK; |
| 343 EXPECT_EQ(expected_setting, | 345 EXPECT_EQ(expected_setting, |
| 344 settings_state.state_map().find(requesting_origin)->second); | 346 settings_state.state_map().find(requesting_origin)->second); |
| 345 } | 347 } |
| 346 | 348 |
| 347 void CheckStringValueFromJavascriptForTab( | 349 void CheckStringValueFromJavascriptForTab( |
| 348 const std::string& expected, const std::string& function, | 350 const std::string& expected, const std::string& function, |
| 349 TabContents* tab_contents) { | 351 WebContents* web_contents) { |
| 350 std::string script = base::StringPrintf( | 352 std::string script = base::StringPrintf( |
| 351 "window.domAutomationController.send(%s)", function.c_str()); | 353 "window.domAutomationController.send(%s)", function.c_str()); |
| 352 std::string result; | 354 std::string result; |
| 353 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( | 355 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( |
| 354 tab_contents->GetRenderViewHost(), | 356 web_contents->GetRenderViewHost(), |
| 355 iframe_xpath_, UTF8ToWide(script), &result)); | 357 iframe_xpath_, UTF8ToWide(script), &result)); |
| 356 EXPECT_EQ(expected, result); | 358 EXPECT_EQ(expected, result); |
| 357 } | 359 } |
| 358 | 360 |
| 359 void CheckStringValueFromJavascript( | 361 void CheckStringValueFromJavascript( |
| 360 const std::string& expected, const std::string& function) { | 362 const std::string& expected, const std::string& function) { |
| 361 CheckStringValueFromJavascriptForTab( | 363 CheckStringValueFromJavascriptForTab( |
| 362 expected, function, current_browser_->GetSelectedTabContents()); | 364 expected, function, current_browser_->GetSelectedWebContents()); |
| 363 } | 365 } |
| 364 | 366 |
| 365 InfoBarDelegate* infobar_; | 367 InfoBarDelegate* infobar_; |
| 366 Browser* current_browser_; | 368 Browser* current_browser_; |
| 367 // path element of a URL referencing the html content for this test. | 369 // path element of a URL referencing the html content for this test. |
| 368 std::string html_for_tests_; | 370 std::string html_for_tests_; |
| 369 // This member defines the iframe (or top-level page, if empty) where the | 371 // This member defines the iframe (or top-level page, if empty) where the |
| 370 // javascript calls will run. | 372 // javascript calls will run. |
| 371 std::wstring iframe_xpath_; | 373 std::wstring iframe_xpath_; |
| 372 // The current url for the top level page. | 374 // The current url for the top level page. |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 500 | 502 |
| 501 // Back to the first frame, enable navigation and refresh geoposition. | 503 // Back to the first frame, enable navigation and refresh geoposition. |
| 502 iframe_xpath_ = L"//iframe[@id='iframe_0']"; | 504 iframe_xpath_ = L"//iframe[@id='iframe_0']"; |
| 503 CheckStringValueFromJavascript("1", "geoSetMaxNavigateCount(1)"); | 505 CheckStringValueFromJavascript("1", "geoSetMaxNavigateCount(1)"); |
| 504 // MockLocationProvider must have been created. | 506 // MockLocationProvider must have been created. |
| 505 ASSERT_TRUE(MockLocationProvider::instance_); | 507 ASSERT_TRUE(MockLocationProvider::instance_); |
| 506 Geoposition fresh_position = GeopositionFromLatLong(3.17, 4.23); | 508 Geoposition fresh_position = GeopositionFromLatLong(3.17, 4.23); |
| 507 ui_test_utils::WindowedNotificationObserver observer( | 509 ui_test_utils::WindowedNotificationObserver observer( |
| 508 content::NOTIFICATION_LOAD_STOP, | 510 content::NOTIFICATION_LOAD_STOP, |
| 509 content::Source<NavigationController>( | 511 content::Source<NavigationController>( |
| 510 ¤t_browser_->GetSelectedTabContents()->GetController())); | 512 ¤t_browser_->GetSelectedWebContents()->GetController())); |
| 511 NotifyGeoposition(fresh_position); | 513 NotifyGeoposition(fresh_position); |
| 512 observer.Wait(); | 514 observer.Wait(); |
| 513 CheckGeoposition(fresh_position); | 515 CheckGeoposition(fresh_position); |
| 514 | 516 |
| 515 // Disable navigation for this frame. | 517 // Disable navigation for this frame. |
| 516 CheckStringValueFromJavascript("0", "geoSetMaxNavigateCount(0)"); | 518 CheckStringValueFromJavascript("0", "geoSetMaxNavigateCount(0)"); |
| 517 | 519 |
| 518 // Now go ahead an authorize the second frame. | 520 // Now go ahead an authorize the second frame. |
| 519 iframe_xpath_ = L"//iframe[@id='iframe_1']"; | 521 iframe_xpath_ = L"//iframe[@id='iframe_1']"; |
| 520 // Infobar was displayed, allow access and check there's no error code. | 522 // Infobar was displayed, allow access and check there's no error code. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 537 CheckGeoposition(MockLocationProvider::instance_->position_); | 539 CheckGeoposition(MockLocationProvider::instance_->position_); |
| 538 | 540 |
| 539 // Refresh geoposition, but let's not yet create the watch on the second frame | 541 // Refresh geoposition, but let's not yet create the watch on the second frame |
| 540 // so that it'll fetch from cache. | 542 // so that it'll fetch from cache. |
| 541 // MockLocationProvider must have been created. | 543 // MockLocationProvider must have been created. |
| 542 ASSERT_TRUE(MockLocationProvider::instance_); | 544 ASSERT_TRUE(MockLocationProvider::instance_); |
| 543 Geoposition cached_position = GeopositionFromLatLong(5.67, 8.09); | 545 Geoposition cached_position = GeopositionFromLatLong(5.67, 8.09); |
| 544 ui_test_utils::WindowedNotificationObserver observer( | 546 ui_test_utils::WindowedNotificationObserver observer( |
| 545 content::NOTIFICATION_LOAD_STOP, | 547 content::NOTIFICATION_LOAD_STOP, |
| 546 content::Source<NavigationController>( | 548 content::Source<NavigationController>( |
| 547 ¤t_browser_->GetSelectedTabContents()->GetController())); | 549 ¤t_browser_->GetSelectedWebContents()->GetController())); |
| 548 NotifyGeoposition(cached_position); | 550 NotifyGeoposition(cached_position); |
| 549 observer.Wait(); | 551 observer.Wait(); |
| 550 CheckGeoposition(cached_position); | 552 CheckGeoposition(cached_position); |
| 551 | 553 |
| 552 // Disable navigation for this frame. | 554 // Disable navigation for this frame. |
| 553 CheckStringValueFromJavascript("0", "geoSetMaxNavigateCount(0)"); | 555 CheckStringValueFromJavascript("0", "geoSetMaxNavigateCount(0)"); |
| 554 | 556 |
| 555 // Now go ahead an authorize the second frame. | 557 // Now go ahead an authorize the second frame. |
| 556 iframe_xpath_ = L"//iframe[@id='iframe_1']"; | 558 iframe_xpath_ = L"//iframe[@id='iframe_1']"; |
| 557 AddGeolocationWatch(true); | 559 AddGeolocationWatch(true); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 591 size_t num_infobars_after_cancel = infobar_helper->infobar_count(); | 593 size_t num_infobars_after_cancel = infobar_helper->infobar_count(); |
| 592 EXPECT_EQ(num_infobars_before_cancel, num_infobars_after_cancel + 1); | 594 EXPECT_EQ(num_infobars_before_cancel, num_infobars_after_cancel + 1); |
| 593 } | 595 } |
| 594 | 596 |
| 595 // Disabled, http://crbug.com/66959. | 597 // Disabled, http://crbug.com/66959. |
| 596 IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, DISABLED_InvalidUrlRequest) { | 598 IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, DISABLED_InvalidUrlRequest) { |
| 597 // Tests that an invalid URL (e.g. from a popup window) is rejected | 599 // Tests that an invalid URL (e.g. from a popup window) is rejected |
| 598 // correctly. Also acts as a regression test for http://crbug.com/40478 | 600 // correctly. Also acts as a regression test for http://crbug.com/40478 |
| 599 html_for_tests_ = "files/geolocation/invalid_request_url.html"; | 601 html_for_tests_ = "files/geolocation/invalid_request_url.html"; |
| 600 ASSERT_TRUE(Initialize(INITIALIZATION_NONE)); | 602 ASSERT_TRUE(Initialize(INITIALIZATION_NONE)); |
| 601 TabContents* original_tab = current_browser_->GetSelectedTabContents(); | 603 WebContents* original_tab = current_browser_->GetSelectedWebContents(); |
| 602 CheckStringValueFromJavascript("1", "requestGeolocationFromInvalidUrl()"); | 604 CheckStringValueFromJavascript("1", "requestGeolocationFromInvalidUrl()"); |
| 603 CheckStringValueFromJavascriptForTab("1", "isAlive()", original_tab); | 605 CheckStringValueFromJavascriptForTab("1", "isAlive()", original_tab); |
| 604 } | 606 } |
| 605 | 607 |
| 606 // Crashy, http://crbug.com/66400. | 608 // Crashy, http://crbug.com/66400. |
| 607 IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, DISABLED_NoInfoBarBeforeStart) { | 609 IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, DISABLED_NoInfoBarBeforeStart) { |
| 608 // See http://crbug.com/42789 | 610 // See http://crbug.com/42789 |
| 609 html_for_tests_ = "files/geolocation/iframes_different_origin.html"; | 611 html_for_tests_ = "files/geolocation/iframes_different_origin.html"; |
| 610 ASSERT_TRUE(Initialize(INITIALIZATION_IFRAMES)); | 612 ASSERT_TRUE(Initialize(INITIALIZATION_IFRAMES)); |
| 611 LoadIFrames(2); | 613 LoadIFrames(2); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 631 IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, TwoWatchesInOneFrame) { | 633 IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, TwoWatchesInOneFrame) { |
| 632 html_for_tests_ = "files/geolocation/two_watches.html"; | 634 html_for_tests_ = "files/geolocation/two_watches.html"; |
| 633 ASSERT_TRUE(Initialize(INITIALIZATION_NONE)); | 635 ASSERT_TRUE(Initialize(INITIALIZATION_NONE)); |
| 634 // First, set the JavaScript to navigate when it receives |final_position|. | 636 // First, set the JavaScript to navigate when it receives |final_position|. |
| 635 const Geoposition final_position = GeopositionFromLatLong(3.17, 4.23); | 637 const Geoposition final_position = GeopositionFromLatLong(3.17, 4.23); |
| 636 std::string script = base::StringPrintf( | 638 std::string script = base::StringPrintf( |
| 637 "window.domAutomationController.send(geoSetFinalPosition(%f, %f))", | 639 "window.domAutomationController.send(geoSetFinalPosition(%f, %f))", |
| 638 final_position.latitude, final_position.longitude); | 640 final_position.latitude, final_position.longitude); |
| 639 std::string js_result; | 641 std::string js_result; |
| 640 EXPECT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( | 642 EXPECT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( |
| 641 current_browser_->GetSelectedTabContents()->GetRenderViewHost(), | 643 current_browser_->GetSelectedWebContents()->GetRenderViewHost(), |
| 642 L"", UTF8ToWide(script), &js_result)); | 644 L"", UTF8ToWide(script), &js_result)); |
| 643 EXPECT_EQ(js_result, "ok"); | 645 EXPECT_EQ(js_result, "ok"); |
| 644 | 646 |
| 645 // Send a position which both geolocation watches will receive. | 647 // Send a position which both geolocation watches will receive. |
| 646 AddGeolocationWatch(true); | 648 AddGeolocationWatch(true); |
| 647 SetInfobarResponse(current_url_, true); | 649 SetInfobarResponse(current_url_, true); |
| 648 CheckGeoposition(MockLocationProvider::instance_->position_); | 650 CheckGeoposition(MockLocationProvider::instance_->position_); |
| 649 | 651 |
| 650 // The second watch will now have cancelled. Ensure an update still makes | 652 // The second watch will now have cancelled. Ensure an update still makes |
| 651 // its way through to the first watcher. | 653 // its way through to the first watcher. |
| 652 ui_test_utils::WindowedNotificationObserver observer( | 654 ui_test_utils::WindowedNotificationObserver observer( |
| 653 content::NOTIFICATION_LOAD_STOP, | 655 content::NOTIFICATION_LOAD_STOP, |
| 654 content::Source<NavigationController>( | 656 content::Source<NavigationController>( |
| 655 ¤t_browser_->GetSelectedTabContents()->GetController())); | 657 ¤t_browser_->GetSelectedWebContents()->GetController())); |
| 656 NotifyGeoposition(final_position); | 658 NotifyGeoposition(final_position); |
| 657 observer.Wait(); | 659 observer.Wait(); |
| 658 CheckGeoposition(final_position); | 660 CheckGeoposition(final_position); |
| 659 } | 661 } |
| 660 | 662 |
| 661 // Hangs flakily, http://crbug.com/70588. | 663 // Hangs flakily, http://crbug.com/70588. |
| 662 IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, DISABLED_TabDestroyed) { | 664 IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, DISABLED_TabDestroyed) { |
| 663 html_for_tests_ = "files/geolocation/tab_destroyed.html"; | 665 html_for_tests_ = "files/geolocation/tab_destroyed.html"; |
| 664 ASSERT_TRUE(Initialize(INITIALIZATION_IFRAMES)); | 666 ASSERT_TRUE(Initialize(INITIALIZATION_IFRAMES)); |
| 665 LoadIFrames(3); | 667 LoadIFrames(3); |
| 666 | 668 |
| 667 iframe_xpath_ = L"//iframe[@id='iframe_0']"; | 669 iframe_xpath_ = L"//iframe[@id='iframe_0']"; |
| 668 AddGeolocationWatch(true); | 670 AddGeolocationWatch(true); |
| 669 | 671 |
| 670 iframe_xpath_ = L"//iframe[@id='iframe_1']"; | 672 iframe_xpath_ = L"//iframe[@id='iframe_1']"; |
| 671 AddGeolocationWatch(false); | 673 AddGeolocationWatch(false); |
| 672 | 674 |
| 673 iframe_xpath_ = L"//iframe[@id='iframe_2']"; | 675 iframe_xpath_ = L"//iframe[@id='iframe_2']"; |
| 674 AddGeolocationWatch(false); | 676 AddGeolocationWatch(false); |
| 675 | 677 |
| 676 std::string script = | 678 std::string script = |
| 677 "window.domAutomationController.setAutomationId(0);" | 679 "window.domAutomationController.setAutomationId(0);" |
| 678 "window.domAutomationController.send(window.close());"; | 680 "window.domAutomationController.send(window.close());"; |
| 679 bool result = | 681 bool result = |
| 680 ui_test_utils::ExecuteJavaScript( | 682 ui_test_utils::ExecuteJavaScript( |
| 681 current_browser_->GetSelectedTabContents()->GetRenderViewHost(), | 683 current_browser_->GetSelectedWebContents()->GetRenderViewHost(), |
| 682 L"", UTF8ToWide(script)); | 684 L"", UTF8ToWide(script)); |
| 683 EXPECT_EQ(result, true); | 685 EXPECT_EQ(result, true); |
| 684 } | 686 } |
| 685 | 687 |
| 686 } // namespace | 688 } // namespace |
| OLD | NEW |