summaryrefslogtreecommitdiffstats
path: root/chrome/browser/geolocation/geolocation_browsertest.cc
diff options
context:
space:
mode:
authorbulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-18 19:33:11 +0000
committerbulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-18 19:33:11 +0000
commit9384d383165e6e99e4430d9074a754ccebed34f9 (patch)
tree1dead35ee35b5b4119d713fe30f29586573d5b8e /chrome/browser/geolocation/geolocation_browsertest.cc
parente989df19ef4bce3cd257ef77c19b0f3f4e1376bd (diff)
downloadchromium_src-9384d383165e6e99e4430d9074a754ccebed34f9.zip
chromium_src-9384d383165e6e99e4430d9074a754ccebed34f9.tar.gz
chromium_src-9384d383165e6e99e4430d9074a754ccebed34f9.tar.bz2
Revert 39366 - Initial Geolocation implementation
Adds IPC plumbing. Adds Infobar buttons for requesting permission TEST=geolocation_browsertest.cc Review URL: http://codereview.chromium.org/548188 TBR=bulach@chromium.org Review URL: http://codereview.chromium.org/646027 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@39374 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/geolocation/geolocation_browsertest.cc')
-rw-r--r--chrome/browser/geolocation/geolocation_browsertest.cc248
1 files changed, 0 insertions, 248 deletions
diff --git a/chrome/browser/geolocation/geolocation_browsertest.cc b/chrome/browser/geolocation/geolocation_browsertest.cc
deleted file mode 100644
index 40c7bd9..0000000
--- a/chrome/browser/geolocation/geolocation_browsertest.cc
+++ /dev/null
@@ -1,248 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/string_util.h"
-#include "chrome/browser/app_modal_dialog.h"
-#include "chrome/browser/browser.h"
-#include "chrome/browser/browser_list.h"
-#include "chrome/browser/profile.h"
-#include "chrome/browser/renderer_host/render_view_host.h"
-#include "chrome/browser/tab_contents/tab_contents.h"
-#include "chrome/common/chrome_paths.h"
-#include "chrome/common/chrome_switches.h"
-#include "chrome/common/geoposition.h"
-#include "chrome/common/notification_details.h"
-#include "chrome/common/notification_service.h"
-#include "chrome/common/notification_type.h"
-#include "chrome/common/render_messages.h"
-#include "chrome/test/in_process_browser_test.h"
-#include "chrome/test/ui_test_utils.h"
-#include "net/base/net_util.h"
-
-// This is a browser test for Geolocation.
-// It exercises various integration points from javascript <-> browser:
-// 1. Infobar is displayed when a geolocation is requested from an unauthorized
-// origin.
-// 2. Denying the infobar triggers the correct error callback.
-// 3. Allowing the infobar does not trigger an error, and allow a geoposition to
-// be passed to javascript.
-// 4. Permissions persisted in disk are respected.
-// 5. Off the record profiles don't use saved permissions.
-class GeolocationBrowserTest
- : public InProcessBrowserTest, public NotificationObserver {
- public:
- GeolocationBrowserTest() : infobar_(NULL), current_browser_(NULL) {
- EnableDOMAutomation();
- }
-
- enum InitializationOptions {
- INITIALIZATION_NONE,
- INITIALIZATION_OFFTHERECORD,
- INITIALIZATION_NEWTAB,
- };
-
- void Initialize(InitializationOptions options) {
- if (!server_.get()) {
- server_ = StartHTTPServer();
- }
- GURL url = server_->TestServerPage("files/geolocation/simple.html");
- if (options == INITIALIZATION_OFFTHERECORD) {
- ui_test_utils::OpenURLOffTheRecord(browser()->profile(), url);
- current_browser_ = BrowserList::FindBrowserWithType(
- browser()->profile()->GetOffTheRecordProfile(), Browser::TYPE_NORMAL);
- } else if (options == INITIALIZATION_NEWTAB) {
- current_browser_ = browser();
- current_browser_->NewTab();
- ui_test_utils::NavigateToURL(current_browser_, url);
- } else {
- current_browser_ = browser();
- ui_test_utils::NavigateToURL(current_browser_, url);
- }
- EXPECT_TRUE(current_browser_);
-
- int watch_id = 0;
- EXPECT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractInt(
- current_browser_->GetSelectedTabContents()->render_view_host(), L"",
- UTF8ToWide("window.domAutomationController.send(geoStart());"),
- &watch_id));
- EXPECT_GT(watch_id, 0);
- }
-
- void SendGeoposition(bool wait_for_infobar, const Geoposition& geoposition) {
- if (wait_for_infobar) {
- // Observe infobar notification.
- registrar_.Add(
- this, NotificationType::TAB_CONTENTS_INFOBAR_ADDED,
- NotificationService::AllSources());
- }
-
- // Sending the Geoposition makes webkit trigger the permission request flow.
- // If the origin is already allowed, no infobar will be displayed.
- RenderViewHost* render_view_host =
- current_browser_->GetSelectedTabContents()->render_view_host();
- render_view_host->Send(
- new ViewMsg_Geolocation_PositionUpdated(
- render_view_host->routing_id(), geoposition));
-
- if (wait_for_infobar) {
- ui_test_utils::RunMessageLoop();
- EXPECT_TRUE(infobar_);
- registrar_.Remove(this, NotificationType::TAB_CONTENTS_INFOBAR_ADDED,
- NotificationService::AllSources());
- }
- }
-
- void WaitForJSPrompt() {
- AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog();
- ASSERT_TRUE(alert);
- alert->CloseModalDialog();
- }
-
- void SetInfobarResponse(bool allowed) {
- registrar_.Add(
- this, NotificationType::TAB_CONTENTS_INFOBAR_REMOVED,
- NotificationService::AllSources());
- ASSERT_TRUE(infobar_);
- if (allowed)
- infobar_->AsConfirmInfoBarDelegate()->Accept();
- else
- infobar_->AsConfirmInfoBarDelegate()->Cancel();
- current_browser_->GetSelectedTabContents()->RemoveInfoBar(infobar_);
- EXPECT_FALSE(infobar_);
- registrar_.Remove(this, NotificationType::TAB_CONTENTS_INFOBAR_REMOVED,
- NotificationService::AllSources());
- }
-
- void CheckValueFromJavascript(
- const std::string& expected, const std::string& function) {
- std::string js_call = StringPrintf(
- "window.domAutomationController.send(%s);", function.c_str());
- std::string value;
- EXPECT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString(
- current_browser_->GetSelectedTabContents()->render_view_host(), L"",
- UTF8ToWide(js_call),
- &value));
- EXPECT_EQ(expected, value);
- }
-
- // InProcessBrowserTest
- virtual void SetUpCommandLine(CommandLine* command_line) {
- InProcessBrowserTest::SetUpCommandLine(command_line);
- command_line->AppendSwitch(switches::kEnableGeolocation);
- }
-
- // NotificationObserver
- virtual void Observe(NotificationType type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- if (type.value == NotificationType::TAB_CONTENTS_INFOBAR_ADDED) {
- infobar_ = Details<InfoBarDelegate>(details).ptr();
- ASSERT_TRUE(infobar_->GetIcon());
- ASSERT_TRUE(infobar_->AsConfirmInfoBarDelegate());
- MessageLoopForUI::current()->Quit();
- } else if (type.value == NotificationType::TAB_CONTENTS_INFOBAR_REMOVED) {
- infobar_ = NULL;
- }
- }
-
- NotificationRegistrar registrar_;
- InfoBarDelegate* infobar_;
- Browser* current_browser_;
- scoped_refptr<HTTPTestServer> server_;
-};
-
-IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, DisplaysPermissionBar) {
- Initialize(INITIALIZATION_NONE);
- SendGeoposition(true, Geoposition());
-}
-
-IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, ErrorOnPermissionDenied) {
- Initialize(INITIALIZATION_NONE);
- SendGeoposition(true, Geoposition());
- // Infobar was displayed, deny access and check for error code.
- SetInfobarResponse(false);
- WaitForJSPrompt();
- CheckValueFromJavascript("1", "geoGetLastError()");
-}
-
-IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, NoInfobarForSecondTab) {
-#if 0
- Initialize(INITIALIZATION_NONE);
- SendGeoposition(true, Geoposition());
- SetInfobarResponse(true);
- WaitForJSPrompt();
- // Checks infobar will not be created a second tab.
- Initialize(INITIALIZATION_NEWTAB);
- SendGeoposition(false, Geoposition());
- WaitForJSPrompt();
- CheckValueFromJavascript("0", "geoGetLastError()");
-#endif
-}
-
-IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, NoInfobarForDeniedOrigin) {
-#if 0
- WritePermissionFile("{\"allowed\":false}");
- // Checks no infobar will be created.
- Initialize(INITIALIZATION_NONE);
- SendGeoposition(false, Geoposition());
- WaitForJSPrompt();
- CheckValueFromJavascript("1", "geoGetLastError()");
- // Checks infobar will not be created a second tab.
- Initialize(INITIALIZATION_NEWTAB);
- SendGeoposition(false, Geoposition());
- WaitForJSPrompt();
- CheckValueFromJavascript("1", "geoGetLastError()");
-#endif
-}
-
-IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, NoInfobarForAllowedOrigin) {
-#if 0
- WritePermissionFile("{\"allowed\":true}");
- // Checks no infobar will be created and there's no error callback.
- Initialize(INITIALIZATION_NONE);
- SendGeoposition(false, Geoposition());
- WaitForJSPrompt();
- CheckValueFromJavascript("0", "geoGetLastError()");
-#endif
-}
-
-IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, InfobarForOffTheRecord) {
-#if 0
- // Checks infobar will be created for regular profile.
- Initialize(INITIALIZATION_NONE);
- SendGeoposition(true, Geoposition());
- SetInfobarResponse(true);
- WaitForJSPrompt();
- CheckValueFromJavascript("0", "geoGetLastError()");
- // Go off the record, and checks infobar will be created and an error callback
- // is triggered.
- Initialize(INITIALIZATION_OFFTHERECORD);
- SendGeoposition(true, Geoposition());
- SetInfobarResponse(false);
- WaitForJSPrompt();
- CheckValueFromJavascript("1", "geoGetLastError()");
-#endif
-}
-
-IN_PROC_BROWSER_TEST_F(GeolocationBrowserTest, Geoposition) {
- // Checks infobar will be created.
- Initialize(INITIALIZATION_NONE);
- SendGeoposition(true, Geoposition());
- // Infobar was displayed, allow access and check there's no error code.
- SetInfobarResponse(true);
- WaitForJSPrompt();
- CheckValueFromJavascript("0", "geoGetLastError()");
- // Sends a Geoposition over IPC, and check it arrives in the javascript side.
- Geoposition geoposition;
- geoposition.latitude = 3.17;
- geoposition.longitude = 4.23;
- SendGeoposition(false, geoposition);
- WaitForJSPrompt();
- // Checks we have no error.
- CheckValueFromJavascript("0", "geoGetLastError()");
- CheckValueFromJavascript(
- DoubleToString(geoposition.latitude), "geoGetLastPositionLatitude()");
- CheckValueFromJavascript(
- DoubleToString(geoposition.longitude), "geoGetLastPositionLongitude()");
-}