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

Unified Diff: content/browser/geolocation/location_arbitrator_impl_unittest.cc

Issue 2028823002: Refactor to make BlimpLocationProvider accessible to content layer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixes try issue Created 4 years, 6 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
Index: content/browser/geolocation/location_arbitrator_impl_unittest.cc
diff --git a/content/browser/geolocation/location_arbitrator_impl_unittest.cc b/content/browser/geolocation/location_arbitrator_impl_unittest.cc
index 93b1645b65aed37fc912f56497b2177aa805be65..b5429c86d47a650add0b6250771865b3b026ee70 100644
--- a/content/browser/geolocation/location_arbitrator_impl_unittest.cc
+++ b/content/browser/geolocation/location_arbitrator_impl_unittest.cc
@@ -7,9 +7,11 @@
#include <memory>
#include "base/bind.h"
+#include "base/memory/ptr_util.h"
#include "content/browser/geolocation/fake_access_token_store.h"
#include "content/browser/geolocation/mock_location_provider.h"
#include "content/public/common/geoposition.h"
+#include "content/test/test_content_browser_client.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -64,16 +66,40 @@ void SetReferencePosition(MockLocationProvider* provider) {
namespace {
+class GeolocationContentBrowserClient : public TestContentBrowserClient {
+ public:
+ GeolocationContentBrowserClient() {}
+
+ void set_use_network(bool use_network) { use_network_ = use_network; }
+
+ LocationProvider* OverrideSystemLocationProvider() override {
+ provider_ = new MockLocationProvider;
+ return provider_;
+ }
+
+ bool UseNetworkLocationProviders() override { return use_network_; }
+
+ // This provider does not own the object. It is returned by
+ // GeolocationLocationAribtratorTest::GetSystemLocationProviderOverride().
+ // The caller takes ownership. This is just a reference we can use for
+ // mocking purposes.
+ MockLocationProvider* provider_ = nullptr;
+
+ private:
+ bool use_network_ = true;
+
+ DISALLOW_COPY_AND_ASSIGN(GeolocationContentBrowserClient);
+};
+
class TestingLocationArbitrator : public LocationArbitratorImpl {
public:
TestingLocationArbitrator(
const LocationArbitratorImpl::LocationUpdateCallback& callback,
AccessTokenStore* access_token_store)
: LocationArbitratorImpl(callback),
- cell_(NULL),
- gps_(NULL),
- access_token_store_(access_token_store) {
- }
+ cell_(nullptr),
+ gps_(nullptr),
+ access_token_store_(access_token_store) {}
base::Time GetTimeNow() const override { return GetTimeNowForTest(); }
@@ -81,22 +107,27 @@ class TestingLocationArbitrator : public LocationArbitratorImpl {
return access_token_store_.get();
}
- LocationProvider* NewNetworkLocationProvider(
+ std::unique_ptr<LocationProvider> NewNetworkLocationProvider(
AccessTokenStore* access_token_store,
net::URLRequestContextGetter* context,
const GURL& url,
const base::string16& access_token) override {
- return new MockLocationProvider(&cell_);
+ cell_ = new MockLocationProvider;
+ return base::WrapUnique(cell_);
}
- LocationProvider* NewSystemLocationProvider() override {
- return new MockLocationProvider(&gps_);
+ std::unique_ptr<LocationProvider> NewSystemLocationProvider() override {
+ gps_ = new MockLocationProvider;
+ return base::WrapUnique(gps_);
}
// Two location providers, with nice short names to make the tests more
// readable. Note |gps_| will only be set when there is a high accuracy
// observer registered (and |cell_| when there's at least one observer of any
// type).
+
+ // TODO(mvanouwerkerk): rename |cell_| to |network_location_provider_| and
+ // |gps_| to |system_location_provider_|
MockLocationProvider* cell_;
MockLocationProvider* gps_;
scoped_refptr<AccessTokenStore> access_token_store_;
@@ -115,6 +146,7 @@ class GeolocationLocationArbitratorTest : public testing::Test {
base::Unretained(observer_.get()));
arbitrator_.reset(new TestingLocationArbitrator(
callback, access_token_store_.get()));
+ override_content_browser_client_.reset(new GeolocationContentBrowserClient);
}
// testing::Test
@@ -144,15 +176,21 @@ class GeolocationLocationArbitratorTest : public testing::Test {
return arbitrator_->gps_;
}
+ MockLocationProvider* GetSystemLocationProviderOverride() {
+ return override_content_browser_client_->provider_;
+ }
+
scoped_refptr<FakeAccessTokenStore> access_token_store_;
std::unique_ptr<MockLocationObserver> observer_;
std::unique_ptr<TestingLocationArbitrator> arbitrator_;
base::MessageLoop loop_;
+ std::unique_ptr<GeolocationContentBrowserClient>
+ override_content_browser_client_;
};
TEST_F(GeolocationLocationArbitratorTest, CreateDestroy) {
EXPECT_TRUE(access_token_store_.get());
- EXPECT_TRUE(arbitrator_ != NULL);
+ EXPECT_TRUE(arbitrator_);
arbitrator_.reset();
SUCCEED();
}
@@ -165,22 +203,24 @@ TEST_F(GeolocationLocationArbitratorTest, OnPermissionGranted) {
// motions to create the provider (see next test).
EXPECT_FALSE(cell());
EXPECT_FALSE(gps());
+ EXPECT_FALSE(GetSystemLocationProviderOverride());
}
TEST_F(GeolocationLocationArbitratorTest, NormalUsage) {
ASSERT_TRUE(access_token_store_.get());
- ASSERT_TRUE(arbitrator_ != NULL);
+ ASSERT_TRUE(arbitrator_);
EXPECT_FALSE(cell());
EXPECT_FALSE(gps());
+ EXPECT_FALSE(GetSystemLocationProviderOverride());
arbitrator_->StartProviders(false);
EXPECT_TRUE(access_token_store_->access_token_map_.empty());
- EXPECT_TRUE(access_token_store_->access_token_map_.empty());
access_token_store_->NotifyDelegateTokensLoaded();
ASSERT_TRUE(cell());
EXPECT_TRUE(gps());
+ EXPECT_FALSE(GetSystemLocationProviderOverride());
EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, cell()->state_);
EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, gps()->state_);
EXPECT_FALSE(observer_->last_position_.Validate());
@@ -202,11 +242,83 @@ TEST_F(GeolocationLocationArbitratorTest, NormalUsage) {
EXPECT_TRUE(cell()->is_permission_granted_);
}
+TEST_F(GeolocationLocationArbitratorTest, CustomSystemProviderOnly) {
+ override_content_browser_client_->set_use_network(false);
+ SetBrowserClientForTesting(override_content_browser_client_.get());
+ ASSERT_TRUE(arbitrator_);
+
+ EXPECT_FALSE(cell());
+ EXPECT_FALSE(gps());
+ EXPECT_FALSE(GetSystemLocationProviderOverride());
+ arbitrator_->StartProviders(false);
+
+ ASSERT_FALSE(cell());
+ EXPECT_FALSE(gps());
+ EXPECT_TRUE(GetSystemLocationProviderOverride());
+ EXPECT_EQ(MockLocationProvider::LOW_ACCURACY,
+ GetSystemLocationProviderOverride()->state_);
+ EXPECT_FALSE(observer_->last_position_.Validate());
+ EXPECT_EQ(Geoposition::ERROR_CODE_NONE, observer_->last_position_.error_code);
+
+ SetReferencePosition(GetSystemLocationProviderOverride());
+
+ EXPECT_TRUE(observer_->last_position_.Validate() ||
+ observer_->last_position_.error_code !=
+ Geoposition::ERROR_CODE_NONE);
+ EXPECT_EQ(GetSystemLocationProviderOverride()->position_.latitude,
+ observer_->last_position_.latitude);
+
+ EXPECT_FALSE(GetSystemLocationProviderOverride()->is_permission_granted_);
+ EXPECT_FALSE(arbitrator_->HasPermissionBeenGranted());
+ arbitrator_->OnPermissionGranted();
+ EXPECT_TRUE(arbitrator_->HasPermissionBeenGranted());
+ EXPECT_TRUE(GetSystemLocationProviderOverride()->is_permission_granted_);
+}
+
+TEST_F(GeolocationLocationArbitratorTest,
+ CustomSystemAndDefaultNetworkProviders) {
+ override_content_browser_client_->set_use_network(true);
+ content::SetBrowserClientForTesting(override_content_browser_client_.get());
+ ASSERT_TRUE(arbitrator_);
+
+ EXPECT_FALSE(cell());
+ EXPECT_FALSE(gps());
+ EXPECT_FALSE(GetSystemLocationProviderOverride());
+ arbitrator_->StartProviders(false);
+
+ EXPECT_TRUE(access_token_store_->access_token_map_.empty());
+
+ access_token_store_->NotifyDelegateTokensLoaded();
+
+ ASSERT_TRUE(cell());
+ EXPECT_FALSE(gps());
+ EXPECT_TRUE(GetSystemLocationProviderOverride());
+ EXPECT_EQ(MockLocationProvider::LOW_ACCURACY,
+ GetSystemLocationProviderOverride()->state_);
+ EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, cell()->state_);
+ EXPECT_FALSE(observer_->last_position_.Validate());
+ EXPECT_EQ(Geoposition::ERROR_CODE_NONE, observer_->last_position_.error_code);
+
+ SetReferencePosition(cell());
+
+ EXPECT_TRUE(observer_->last_position_.Validate() ||
+ observer_->last_position_.error_code !=
+ Geoposition::ERROR_CODE_NONE);
+ EXPECT_EQ(cell()->position_.latitude, observer_->last_position_.latitude);
+
+ EXPECT_FALSE(cell()->is_permission_granted_);
+ EXPECT_FALSE(arbitrator_->HasPermissionBeenGranted());
+ arbitrator_->OnPermissionGranted();
+ EXPECT_TRUE(arbitrator_->HasPermissionBeenGranted());
+ EXPECT_TRUE(cell()->is_permission_granted_);
+}
+
TEST_F(GeolocationLocationArbitratorTest, SetObserverOptions) {
arbitrator_->StartProviders(false);
access_token_store_->NotifyDelegateTokensLoaded();
ASSERT_TRUE(cell());
ASSERT_TRUE(gps());
+ EXPECT_FALSE(GetSystemLocationProviderOverride());
EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, cell()->state_);
EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, gps()->state_);
SetReferencePosition(cell());
@@ -215,6 +327,7 @@ TEST_F(GeolocationLocationArbitratorTest, SetObserverOptions) {
arbitrator_->StartProviders(true);
EXPECT_EQ(MockLocationProvider::HIGH_ACCURACY, cell()->state_);
EXPECT_EQ(MockLocationProvider::HIGH_ACCURACY, gps()->state_);
+ EXPECT_FALSE(GetSystemLocationProviderOverride());
}
TEST_F(GeolocationLocationArbitratorTest, Arbitration) {
@@ -222,6 +335,7 @@ TEST_F(GeolocationLocationArbitratorTest, Arbitration) {
access_token_store_->NotifyDelegateTokensLoaded();
ASSERT_TRUE(cell());
ASSERT_TRUE(gps());
+ EXPECT_FALSE(GetSystemLocationProviderOverride());
SetPositionFix(cell(), 1, 2, 150);
@@ -298,6 +412,7 @@ TEST_F(GeolocationLocationArbitratorTest, TwoOneShotsIsNewPositionBetter) {
access_token_store_->NotifyDelegateTokensLoaded();
ASSERT_TRUE(cell());
ASSERT_TRUE(gps());
+ EXPECT_FALSE(GetSystemLocationProviderOverride());
// Set the initial position.
SetPositionFix(cell(), 3, 139, 100);
@@ -308,9 +423,8 @@ TEST_F(GeolocationLocationArbitratorTest, TwoOneShotsIsNewPositionBetter) {
// To test 240956, perform a throwaway alloc.
// This convinces the allocator to put the providers in a new memory location.
- MockLocationProvider* fakeMockProvider = NULL;
- LocationProvider* fakeProvider =
- new MockLocationProvider(&fakeMockProvider);
+ std::unique_ptr<MockLocationProvider> dummy_provider(
+ new MockLocationProvider);
arbitrator_->StartProviders(false);
access_token_store_->NotifyDelegateTokensLoaded();
@@ -321,9 +435,6 @@ TEST_F(GeolocationLocationArbitratorTest, TwoOneShotsIsNewPositionBetter) {
// Update with a less accurate position to verify 240956.
SetPositionFix(cell(), 3, 139, 150);
CheckLastPositionInfo(3, 139, 150);
-
- // No delete required for fakeMockProvider. It points to fakeProvider.
- delete fakeProvider;
}
} // namespace content
« no previous file with comments | « content/browser/geolocation/location_arbitrator_impl.cc ('k') | content/browser/geolocation/mock_location_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698