diff options
author | bulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-02 14:04:49 +0000 |
---|---|---|
committer | bulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-02 14:04:49 +0000 |
commit | 993fa4ae373288425267e4892403560abcc2b1ff (patch) | |
tree | 79eeb365cb8a6d14fa99cb18ecabcffd25700198 /chrome/browser | |
parent | e6269fd0e957510a2536a77e5a2fcabf799ccd20 (diff) | |
download | chromium_src-993fa4ae373288425267e4892403560abcc2b1ff.zip chromium_src-993fa4ae373288425267e4892403560abcc2b1ff.tar.gz chromium_src-993fa4ae373288425267e4892403560abcc2b1ff.tar.bz2 |
Removes spurious JS callback triggered by MockLocationProvider::OnPermissionGranted.
(this generated an extra alert, which is closed when test finishes on gtk/win, but hangs on mac).
BUG=29424
TEST=GeolocationBrowserTest.*
Review URL: http://codereview.chromium.org/2474002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@48718 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r-- | chrome/browser/geolocation/mock_location_provider.cc | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/chrome/browser/geolocation/mock_location_provider.cc b/chrome/browser/geolocation/mock_location_provider.cc index 8543848..a7e2383 100644 --- a/chrome/browser/geolocation/mock_location_provider.cc +++ b/chrome/browser/geolocation/mock_location_provider.cc @@ -40,15 +40,17 @@ void MockLocationProvider::OnPermissionGranted(const GURL& requesting_frame) { permission_granted_url_ = requesting_frame; } -// Mock location provider that automatically calls back it's client when -// StartProvider is called. +// Mock location provider that automatically calls back it's client at most +// once, when StartProvider or OnPermissionGranted is called. Use +// |requires_permission_to_start| to select which event triggers the callback. class AutoMockLocationProvider : public MockLocationProvider { public: AutoMockLocationProvider(bool has_valid_location, bool requires_permission_to_start) : MockLocationProvider(&instance_), ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)), - requires_permission_to_start_(requires_permission_to_start) { + requires_permission_to_start_(requires_permission_to_start), + listeners_updated_(false) { if (has_valid_location) { position_.accuracy = 3; position_.latitude = 4.3; @@ -61,9 +63,7 @@ class AutoMockLocationProvider : public MockLocationProvider { virtual bool StartProvider() { MockLocationProvider::StartProvider(); if (!requires_permission_to_start_) { - MessageLoop::current()->PostTask( - FROM_HERE, task_factory_.NewRunnableMethod( - &MockLocationProvider::UpdateListeners)); + UpdateListenersIfNeeded(); } return true; } @@ -71,6 +71,13 @@ class AutoMockLocationProvider : public MockLocationProvider { void OnPermissionGranted(const GURL& requesting_frame) { MockLocationProvider::OnPermissionGranted(requesting_frame); if (requires_permission_to_start_) { + UpdateListenersIfNeeded(); + } + } + + void UpdateListenersIfNeeded() { + if (!listeners_updated_) { + listeners_updated_ = true; MessageLoop::current()->PostTask( FROM_HERE, task_factory_.NewRunnableMethod( &MockLocationProvider::UpdateListeners)); @@ -79,6 +86,7 @@ class AutoMockLocationProvider : public MockLocationProvider { ScopedRunnableMethodFactory<MockLocationProvider> task_factory_; const bool requires_permission_to_start_; + bool listeners_updated_; }; LocationProviderBase* NewMockLocationProvider() { |