Index: webkit/tools/test_shell/test_geolocation_service.cc |
diff --git a/webkit/tools/test_shell/test_geolocation_service.cc b/webkit/tools/test_shell/test_geolocation_service.cc |
index 50fe3696cee51820598c87d02c0f8c5f0d730e8e..6653ecf1e1701352393e1f3d47ecfa59c3ee1ad6 100644 |
--- a/webkit/tools/test_shell/test_geolocation_service.cc |
+++ b/webkit/tools/test_shell/test_geolocation_service.cc |
@@ -7,22 +7,24 @@ |
#include "third_party/WebKit/WebKit/chromium/public/WebGeolocationServiceBridge.h" |
TestGeolocationService::TestGeolocationService() |
- : allowed_(false) { |
+ : allowed_(false), |
+ permission_set_(false) { |
} |
TestGeolocationService::~TestGeolocationService() { |
- |
} |
void TestGeolocationService::SetGeolocationPermission(bool allowed) { |
allowed_ = allowed; |
+ permission_set_ = true; |
+ TryToSendPermissions(); |
} |
void TestGeolocationService::requestPermissionForFrame( |
int bridgeId, const WebKit::WebURL& url) { |
- pending_permissions_.push_back(std::make_pair(bridgeId, allowed_)); |
- permission_timer_.Start(base::TimeDelta::FromMilliseconds(0), |
- this, &TestGeolocationService::SendPermission); |
+ DCHECK(bridges_map_.Lookup(bridgeId)) << "Unknown bridge " << bridgeId; |
+ pending_permissions_.push_back(bridgeId); |
+ TryToSendPermissions(); |
} |
int TestGeolocationService::attachBridge( |
@@ -32,15 +34,30 @@ int TestGeolocationService::attachBridge( |
void TestGeolocationService::detachBridge(int bridgeId) { |
bridges_map_.Remove(bridgeId); |
+ std::vector<int>::iterator i = pending_permissions_.begin(); |
+ while (i != pending_permissions_.end()) { |
+ if (*i == bridgeId) |
+ pending_permissions_.erase(i); |
+ else |
+ ++i; |
+ } |
+} |
+ |
+void TestGeolocationService::TryToSendPermissions() { |
+ if (permission_set_ && !permission_timer_.IsRunning()) |
+ permission_timer_.Start(base::TimeDelta::FromMilliseconds(0), |
+ this, &TestGeolocationService::SendPermission); |
} |
void TestGeolocationService::SendPermission() { |
- for (std::vector<std::pair<int, bool> >::const_iterator i = |
- pending_permissions_.begin(); i != pending_permissions_.end(); ++i) { |
+ DCHECK(permission_set_); |
+ std::vector<int> pending_permissions; |
+ pending_permissions.swap(pending_permissions_); |
+ for (std::vector<int>::const_iterator i = pending_permissions.begin(); |
+ i != pending_permissions.end(); ++i) { |
WebKit::WebGeolocationServiceBridge* bridge = |
- bridges_map_.Lookup(i->first); |
+ bridges_map_.Lookup(*i); |
DCHECK(bridge); |
bulach
2010/09/06 11:51:48
not entirely sure why you're copying the vector, i
joth
2010/09/06 12:08:57
I'm not copying the vector, I'm swapping it (impor
|
- bridge->setIsAllowed(i->second); |
+ bridge->setIsAllowed(allowed_); |
} |
- pending_permissions_.clear(); |
} |