Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(892)

Unified Diff: content/browser/geofencing/geofencing_manager_unittest.cc

Issue 645763003: Refactor GeofencingManager to have one instance per StoragePartition. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comments Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/geofencing/geofencing_manager.cc ('k') | content/browser/geofencing/geofencing_provider.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/geofencing/geofencing_manager_unittest.cc
diff --git a/content/browser/geofencing/geofencing_manager_unittest.cc b/content/browser/geofencing/geofencing_manager_unittest.cc
index 78828acc93d67a398a65963ccf30ea1d2111d034..6970b7171ca488c18c515b77d5bcdc2c6c99f61b 100644
--- a/content/browser/geofencing/geofencing_manager_unittest.cc
+++ b/content/browser/geofencing/geofencing_manager_unittest.cc
@@ -5,14 +5,13 @@
#include "base/callback.h"
#include "base/message_loop/message_loop.h"
#include "content/browser/geofencing/geofencing_manager.h"
-#include "content/browser/geofencing/geofencing_provider.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/test/test_browser_thread.h"
+#include "content/browser/geofencing/geofencing_service.h"
+#include "content/browser/service_worker/service_worker_context_wrapper.h"
+#include "content/public/test/test_browser_thread_bundle.h"
#include "content/public/test/test_utils.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/public/platform/WebCircularGeofencingRegion.h"
-#include "url/gurl.h"
using blink::WebCircularGeofencingRegion;
typedef std::map<std::string, WebCircularGeofencingRegion> RegionMap;
@@ -22,6 +21,8 @@ namespace {
static const char* kTestRegionId = "region-id";
static const int64 kTestServiceWorkerRegistrationId = 123;
static const int64 kTestServiceWorkerRegistrationId2 = 456;
+static const int64 kTestGeofencingRegistrationId = 42;
+static const int64 kTestGeofencingRegistrationId2 = 43;
bool RegionsMatch(const WebCircularGeofencingRegion& expected,
const WebCircularGeofencingRegion& arg) {
@@ -33,20 +34,21 @@ bool RegionsMatch(const WebCircularGeofencingRegion& expected,
namespace content {
-class TestGeofencingProvider : public GeofencingProvider {
+class TestGeofencingService : public GeofencingService {
public:
+ MOCK_METHOD0(IsServiceAvailable, bool());
MOCK_METHOD2(RegisterRegion,
- void(const WebCircularGeofencingRegion& region,
- const RegisterCallback& callback));
- MOCK_METHOD1(UnregisterRegion, void(int registration_id));
+ int64(const WebCircularGeofencingRegion& region,
+ GeofencingRegistrationDelegate* delegate));
+ MOCK_METHOD1(UnregisterRegion, void(int64 geofencing_registration_id));
};
-ACTION_P2(CallRegisterCallback, status, id) {
- arg1.Run(status, id);
+ACTION_P(SaveDelegate, delegate) {
+ *delegate = arg1;
}
-ACTION_P(SaveRegisterCallback, callback) {
- *callback = arg1;
+ACTION_P(QuitRunner, runner) {
+ runner->Quit();
}
MATCHER_P(WebCircularGeofencingRegionEq, expected, "") {
@@ -78,25 +80,30 @@ class StatusCatcher {
class GeofencingManagerTest : public testing::Test {
public:
- GeofencingManagerTest()
- : message_loop_(),
- io_thread_(BrowserThread::IO, &message_loop_),
- provider_(0),
- manager_(0),
- test_origin_("https://example.com/") {
+ GeofencingManagerTest() : service_(nullptr) {
test_region_.latitude = 37.421999;
test_region_.longitude = -122.084015;
test_region_.radius = 100;
expected_regions_[kTestRegionId] = test_region_;
}
- virtual void SetUp() { manager_ = new GeofencingManager(); }
+ virtual void SetUp() {
+ service_ = new TestGeofencingService();
+ ON_CALL(*service_, IsServiceAvailable())
+ .WillByDefault(testing::Return(false));
+ manager_ = new GeofencingManager(nullptr /* ServiceWorkerContextWrapper */);
+ manager_->SetServiceForTesting(service_);
+ }
- virtual void TearDown() { delete manager_; }
+ virtual void TearDown() {
+ manager_ = nullptr;
+ delete service_;
+ service_ = nullptr;
+ }
- void SetProviderForTests() {
- provider_ = new TestGeofencingProvider();
- manager_->SetProviderForTests(scoped_ptr<GeofencingProvider>(provider_));
+ void SetHasProviderForTests() {
+ ON_CALL(*service_, IsServiceAvailable())
+ .WillByDefault(testing::Return(true));
}
GeofencingStatus RegisterRegionSync(
@@ -105,48 +112,46 @@ class GeofencingManagerTest : public testing::Test {
const WebCircularGeofencingRegion& region) {
StatusCatcher result;
manager_->RegisterRegion(
- nullptr, /* browser_context */
service_worker_registration_id,
- test_origin_,
id,
region,
base::Bind(&StatusCatcher::Done, base::Unretained(&result)));
return result.Wait();
}
- GeofencingStatus RegisterRegionSyncWithProviderResult(
+ GeofencingStatus RegisterRegionSyncWithServiceResult(
int64 service_worker_registration_id,
const std::string& id,
const WebCircularGeofencingRegion& region,
- GeofencingStatus provider_status,
- int provider_result) {
+ GeofencingStatus service_status,
+ int64 geofencing_registration_id) {
StatusCatcher result;
+ GeofencingRegistrationDelegate* delegate = 0;
EXPECT_CALL(
- *provider_,
+ *service_,
RegisterRegion(WebCircularGeofencingRegionEq(region), testing::_))
- .WillOnce(CallRegisterCallback(provider_status, provider_result));
+ .WillOnce(testing::DoAll(SaveDelegate(&delegate),
+ testing::Return(geofencing_registration_id)));
manager_->RegisterRegion(
- nullptr, /* browser_context */
service_worker_registration_id,
- test_origin_,
id,
region,
base::Bind(&StatusCatcher::Done, base::Unretained(&result)));
+ CHECK(delegate);
+ delegate->RegistrationFinished(geofencing_registration_id, service_status);
return result.Wait();
}
GeofencingStatus UnregisterRegionSync(int64 service_worker_registration_id,
const std::string& id,
- bool should_call_provider,
- int provider_id = 0) {
+ bool should_call_service,
+ int64 geofencing_registration_id = 0) {
StatusCatcher result;
- if (should_call_provider) {
- EXPECT_CALL(*provider_, UnregisterRegion(provider_id));
+ if (should_call_service) {
+ EXPECT_CALL(*service_, UnregisterRegion(geofencing_registration_id));
}
manager_->UnregisterRegion(
- nullptr, /* browser_context */
service_worker_registration_id,
- test_origin_,
id,
base::Bind(&StatusCatcher::Done, base::Unretained(&result)));
return result.Wait();
@@ -155,10 +160,8 @@ class GeofencingManagerTest : public testing::Test {
void VerifyRegions(int64 service_worker_registration_id,
const RegionMap& expected_regions) {
RegionMap regions;
- EXPECT_EQ(GeofencingStatus::GEOFENCING_STATUS_OK,
- manager_->GetRegisteredRegions(nullptr, /* browser_context */
- service_worker_registration_id,
- test_origin_,
+ EXPECT_EQ(GEOFENCING_STATUS_OK,
+ manager_->GetRegisteredRegions(service_worker_registration_id,
&regions));
EXPECT_EQ(expected_regions.size(), regions.size());
for (RegionMap::const_iterator it = expected_regions.begin();
@@ -170,236 +173,242 @@ class GeofencingManagerTest : public testing::Test {
}
protected:
- base::MessageLoop message_loop_;
- TestBrowserThread io_thread_;
- TestGeofencingProvider* provider_;
- GeofencingManager* manager_;
+ TestBrowserThreadBundle threads_;
+ TestGeofencingService* service_;
+ scoped_refptr<GeofencingManager> manager_;
WebCircularGeofencingRegion test_region_;
RegionMap expected_regions_;
- GURL test_origin_;
};
-TEST_F(GeofencingManagerTest, RegisterRegion_NoProvider) {
- EXPECT_EQ(GeofencingStatus::
- GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE,
+TEST_F(GeofencingManagerTest, RegisterRegion_NoService) {
+ EXPECT_EQ(GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE,
RegisterRegionSync(
kTestServiceWorkerRegistrationId, kTestRegionId, test_region_));
}
-TEST_F(GeofencingManagerTest, UnregisterRegion_NoProvider) {
- EXPECT_EQ(GeofencingStatus::
- GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE,
+TEST_F(GeofencingManagerTest, UnregisterRegion_NoService) {
+ EXPECT_EQ(GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE,
UnregisterRegionSync(
kTestServiceWorkerRegistrationId, kTestRegionId, false));
}
-TEST_F(GeofencingManagerTest, GetRegisteredRegions_NoProvider) {
+TEST_F(GeofencingManagerTest, GetRegisteredRegions_NoService) {
RegionMap regions;
- EXPECT_EQ(GeofencingStatus::
- GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE,
- manager_->GetRegisteredRegions(nullptr, /* browser_context */
- kTestServiceWorkerRegistrationId,
- test_origin_,
+ EXPECT_EQ(GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE,
+ manager_->GetRegisteredRegions(kTestServiceWorkerRegistrationId,
&regions));
EXPECT_TRUE(regions.empty());
}
-TEST_F(GeofencingManagerTest, RegisterRegion_FailsInProvider) {
- SetProviderForTests();
+TEST_F(GeofencingManagerTest, RegisterRegion_FailsInService) {
+ SetHasProviderForTests();
EXPECT_EQ(
- GeofencingStatus::GEOFENCING_STATUS_ERROR,
- RegisterRegionSyncWithProviderResult(kTestServiceWorkerRegistrationId,
- kTestRegionId,
- test_region_,
- GEOFENCING_STATUS_ERROR,
- -1));
+ GEOFENCING_STATUS_ERROR,
+ RegisterRegionSyncWithServiceResult(kTestServiceWorkerRegistrationId,
+ kTestRegionId,
+ test_region_,
+ GEOFENCING_STATUS_ERROR,
+ -1));
}
-TEST_F(GeofencingManagerTest, RegisterRegion_SucceedsInProvider) {
- SetProviderForTests();
+TEST_F(GeofencingManagerTest, RegisterRegion_SucceedsInService) {
+ SetHasProviderForTests();
EXPECT_EQ(
- GeofencingStatus::GEOFENCING_STATUS_OK,
- RegisterRegionSyncWithProviderResult(kTestServiceWorkerRegistrationId,
- kTestRegionId,
- test_region_,
- GEOFENCING_STATUS_OK,
- 0));
+ GEOFENCING_STATUS_OK,
+ RegisterRegionSyncWithServiceResult(kTestServiceWorkerRegistrationId,
+ kTestRegionId,
+ test_region_,
+ GEOFENCING_STATUS_OK,
+ kTestGeofencingRegistrationId));
VerifyRegions(kTestServiceWorkerRegistrationId, expected_regions_);
}
TEST_F(GeofencingManagerTest, RegisterRegion_AlreadyRegistered) {
- SetProviderForTests();
+ SetHasProviderForTests();
EXPECT_EQ(
- GeofencingStatus::GEOFENCING_STATUS_OK,
- RegisterRegionSyncWithProviderResult(kTestServiceWorkerRegistrationId,
- kTestRegionId,
- test_region_,
- GEOFENCING_STATUS_OK,
- 0));
+ GEOFENCING_STATUS_OK,
+ RegisterRegionSyncWithServiceResult(kTestServiceWorkerRegistrationId,
+ kTestRegionId,
+ test_region_,
+ GEOFENCING_STATUS_OK,
+ kTestGeofencingRegistrationId));
VerifyRegions(kTestServiceWorkerRegistrationId, expected_regions_);
WebCircularGeofencingRegion region2;
region2.latitude = 43.2;
region2.longitude = 1.45;
region2.radius = 8.5;
- EXPECT_EQ(GeofencingStatus::GEOFENCING_STATUS_ERROR,
+ EXPECT_EQ(GEOFENCING_STATUS_ERROR,
RegisterRegionSync(
kTestServiceWorkerRegistrationId, kTestRegionId, region2));
VerifyRegions(kTestServiceWorkerRegistrationId, expected_regions_);
}
TEST_F(GeofencingManagerTest, UnregisterRegion_NotRegistered) {
- SetProviderForTests();
- EXPECT_EQ(GeofencingStatus::GEOFENCING_STATUS_ERROR,
+ SetHasProviderForTests();
+ EXPECT_EQ(GEOFENCING_STATUS_UNREGISTRATION_FAILED_NOT_REGISTERED,
UnregisterRegionSync(
kTestServiceWorkerRegistrationId, kTestRegionId, false));
}
TEST_F(GeofencingManagerTest, UnregisterRegion_Success) {
- SetProviderForTests();
- int provider_id = 123;
-
- EXPECT_EQ(
- GeofencingStatus::GEOFENCING_STATUS_OK,
- RegisterRegionSyncWithProviderResult(kTestServiceWorkerRegistrationId,
- kTestRegionId,
- test_region_,
- GEOFENCING_STATUS_OK,
- provider_id));
+ SetHasProviderForTests();
EXPECT_EQ(
- GeofencingStatus::GEOFENCING_STATUS_OK,
- UnregisterRegionSync(
- kTestServiceWorkerRegistrationId, kTestRegionId, true, provider_id));
+ GEOFENCING_STATUS_OK,
+ RegisterRegionSyncWithServiceResult(kTestServiceWorkerRegistrationId,
+ kTestRegionId,
+ test_region_,
+ GEOFENCING_STATUS_OK,
+ kTestGeofencingRegistrationId));
+
+ EXPECT_EQ(GEOFENCING_STATUS_OK,
+ UnregisterRegionSync(kTestServiceWorkerRegistrationId,
+ kTestRegionId,
+ true,
+ kTestGeofencingRegistrationId));
VerifyRegions(kTestServiceWorkerRegistrationId, RegionMap());
}
TEST_F(GeofencingManagerTest, GetRegisteredRegions_RegistrationInProgress) {
- SetProviderForTests();
+ SetHasProviderForTests();
StatusCatcher result;
- GeofencingProvider::RegisterCallback callback;
+ GeofencingRegistrationDelegate* delegate = nullptr;
EXPECT_CALL(
- *provider_,
+ *service_,
RegisterRegion(WebCircularGeofencingRegionEq(test_region_), testing::_))
- .WillOnce(SaveRegisterCallback(&callback));
+ .WillOnce(testing::DoAll(SaveDelegate(&delegate),
+ testing::Return(kTestGeofencingRegistrationId)));
manager_->RegisterRegion(
- nullptr, /* browser_context */
kTestServiceWorkerRegistrationId,
- test_origin_,
kTestRegionId,
test_region_,
base::Bind(&StatusCatcher::Done, base::Unretained(&result)));
// At this point the manager should have tried registering the region with
- // the provider, resulting in |callback| being set. Until the callback is
+ // the service, resulting in |delegate| being set. Until the callback is
// called the registration is not complete though.
- EXPECT_FALSE(callback.is_null());
+ EXPECT_NE(delegate, nullptr);
VerifyRegions(kTestServiceWorkerRegistrationId, RegionMap());
// Now call the callback, and verify the registration completed succesfully.
- callback.Run(GEOFENCING_STATUS_OK, 123);
- EXPECT_EQ(GeofencingStatus::GEOFENCING_STATUS_OK, result.Wait());
+ delegate->RegistrationFinished(kTestGeofencingRegistrationId,
+ GEOFENCING_STATUS_OK);
+ EXPECT_EQ(GEOFENCING_STATUS_OK, result.Wait());
VerifyRegions(kTestServiceWorkerRegistrationId, expected_regions_);
}
TEST_F(GeofencingManagerTest, UnregisterRegion_RegistrationInProgress) {
- SetProviderForTests();
+ SetHasProviderForTests();
StatusCatcher result;
- GeofencingProvider::RegisterCallback callback;
+ GeofencingRegistrationDelegate* delegate = nullptr;
EXPECT_CALL(
- *provider_,
+ *service_,
RegisterRegion(WebCircularGeofencingRegionEq(test_region_), testing::_))
- .WillOnce(SaveRegisterCallback(&callback));
+ .WillOnce(testing::DoAll(SaveDelegate(&delegate),
+ testing::Return(kTestGeofencingRegistrationId)));
manager_->RegisterRegion(
- nullptr, /* browser_context */
kTestServiceWorkerRegistrationId,
- test_origin_,
kTestRegionId,
test_region_,
base::Bind(&StatusCatcher::Done, base::Unretained(&result)));
// At this point the manager should have tried registering the region with
- // the provider, resulting in |callback| being set. Until the callback is
+ // the service, resulting in |delegate| being set. Until the callback is
// called the registration is not complete though.
- EXPECT_FALSE(callback.is_null());
+ EXPECT_NE(delegate, nullptr);
- EXPECT_EQ(GeofencingStatus::GEOFENCING_STATUS_ERROR,
+ EXPECT_EQ(GEOFENCING_STATUS_UNREGISTRATION_FAILED_NOT_REGISTERED,
UnregisterRegionSync(
kTestServiceWorkerRegistrationId, kTestRegionId, false));
}
TEST_F(GeofencingManagerTest, GetRegisteredRegions_NoRegions) {
- SetProviderForTests();
+ SetHasProviderForTests();
VerifyRegions(kTestServiceWorkerRegistrationId, RegionMap());
}
TEST_F(GeofencingManagerTest, RegisterRegion_SeparateServiceWorkers) {
- SetProviderForTests();
- int provider_id1 = 12;
- int provider_id2 = 34;
+ SetHasProviderForTests();
EXPECT_EQ(
- GeofencingStatus::GEOFENCING_STATUS_OK,
- RegisterRegionSyncWithProviderResult(kTestServiceWorkerRegistrationId,
- kTestRegionId,
- test_region_,
- GEOFENCING_STATUS_OK,
- provider_id1));
+ GEOFENCING_STATUS_OK,
+ RegisterRegionSyncWithServiceResult(kTestServiceWorkerRegistrationId,
+ kTestRegionId,
+ test_region_,
+ GEOFENCING_STATUS_OK,
+ kTestGeofencingRegistrationId));
VerifyRegions(kTestServiceWorkerRegistrationId, expected_regions_);
VerifyRegions(kTestServiceWorkerRegistrationId2, RegionMap());
EXPECT_EQ(
- GeofencingStatus::GEOFENCING_STATUS_OK,
- RegisterRegionSyncWithProviderResult(kTestServiceWorkerRegistrationId2,
- kTestRegionId,
- test_region_,
- GEOFENCING_STATUS_OK,
- provider_id2));
+ GEOFENCING_STATUS_OK,
+ RegisterRegionSyncWithServiceResult(kTestServiceWorkerRegistrationId2,
+ kTestRegionId,
+ test_region_,
+ GEOFENCING_STATUS_OK,
+ kTestGeofencingRegistrationId2));
VerifyRegions(kTestServiceWorkerRegistrationId, expected_regions_);
VerifyRegions(kTestServiceWorkerRegistrationId2, expected_regions_);
}
TEST_F(GeofencingManagerTest, UnregisterRegion_SeparateServiceWorkers) {
- SetProviderForTests();
- int provider_id1 = 12;
- int provider_id2 = 34;
+ SetHasProviderForTests();
EXPECT_EQ(
- GeofencingStatus::GEOFENCING_STATUS_OK,
- RegisterRegionSyncWithProviderResult(kTestServiceWorkerRegistrationId,
- kTestRegionId,
- test_region_,
- GEOFENCING_STATUS_OK,
- provider_id1));
+ GEOFENCING_STATUS_OK,
+ RegisterRegionSyncWithServiceResult(kTestServiceWorkerRegistrationId,
+ kTestRegionId,
+ test_region_,
+ GEOFENCING_STATUS_OK,
+ kTestGeofencingRegistrationId));
EXPECT_EQ(
- GeofencingStatus::GEOFENCING_STATUS_OK,
- RegisterRegionSyncWithProviderResult(kTestServiceWorkerRegistrationId2,
- kTestRegionId,
- test_region_,
- GEOFENCING_STATUS_OK,
- provider_id2));
-
- EXPECT_EQ(
- GeofencingStatus::GEOFENCING_STATUS_OK,
- UnregisterRegionSync(
- kTestServiceWorkerRegistrationId, kTestRegionId, true, provider_id1));
+ GEOFENCING_STATUS_OK,
+ RegisterRegionSyncWithServiceResult(kTestServiceWorkerRegistrationId2,
+ kTestRegionId,
+ test_region_,
+ GEOFENCING_STATUS_OK,
+ kTestGeofencingRegistrationId2));
+
+ EXPECT_EQ(GEOFENCING_STATUS_OK,
+ UnregisterRegionSync(kTestServiceWorkerRegistrationId,
+ kTestRegionId,
+ true,
+ kTestGeofencingRegistrationId));
VerifyRegions(kTestServiceWorkerRegistrationId, RegionMap());
VerifyRegions(kTestServiceWorkerRegistrationId2, expected_regions_);
- EXPECT_EQ(GeofencingStatus::GEOFENCING_STATUS_OK,
+ EXPECT_EQ(GEOFENCING_STATUS_OK,
UnregisterRegionSync(kTestServiceWorkerRegistrationId2,
kTestRegionId,
true,
- provider_id2));
+ kTestGeofencingRegistrationId2));
VerifyRegions(kTestServiceWorkerRegistrationId, RegionMap());
VerifyRegions(kTestServiceWorkerRegistrationId2, RegionMap());
}
+TEST_F(GeofencingManagerTest, ShutdownCleansRegistrations) {
+ SetHasProviderForTests();
+ scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner());
+ EXPECT_EQ(
+ GEOFENCING_STATUS_OK,
+ RegisterRegionSyncWithServiceResult(kTestServiceWorkerRegistrationId,
+ kTestRegionId,
+ test_region_,
+ GEOFENCING_STATUS_OK,
+ kTestGeofencingRegistrationId));
+
+ EXPECT_CALL(*service_, UnregisterRegion(kTestGeofencingRegistrationId))
+ .WillOnce(QuitRunner(runner));
+ manager_->Shutdown();
+ runner->Run();
+}
+
} // namespace content
« no previous file with comments | « content/browser/geofencing/geofencing_manager.cc ('k') | content/browser/geofencing/geofencing_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698