summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorbulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-02 14:04:49 +0000
committerbulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-02 14:04:49 +0000
commit993fa4ae373288425267e4892403560abcc2b1ff (patch)
tree79eeb365cb8a6d14fa99cb18ecabcffd25700198 /chrome/browser
parente6269fd0e957510a2536a77e5a2fcabf799ccd20 (diff)
downloadchromium_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.cc20
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() {