Index: blimp/engine/app/blimp_content_browser_client.cc |
diff --git a/blimp/engine/app/blimp_content_browser_client.cc b/blimp/engine/app/blimp_content_browser_client.cc |
index 90ea2f52e4c78637305c63ea9346ec75d5085f3b..fad04ea106d8b1bdb669241b45fa6f69f273d711 100644 |
--- a/blimp/engine/app/blimp_content_browser_client.cc |
+++ b/blimp/engine/app/blimp_content_browser_client.cc |
@@ -2,11 +2,14 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#include "base/memory/weak_ptr.h" |
#include "blimp/engine/app/blimp_content_browser_client.h" |
#include "blimp/engine/app/blimp_browser_main_parts.h" |
#include "blimp/engine/app/settings_manager.h" |
#include "blimp/engine/feature/geolocation/blimp_location_provider.h" |
+#include "blimp/engine/feature/geolocation/engine_geolocation_feature.h" |
#include "blimp/engine/mojo/blob_channel_service.h" |
+#include "blimp/engine/session/blimp_engine_session.h" |
#include "content/public/browser/geolocation_delegate.h" |
#include "services/shell/public/cpp/interface_registry.h" |
@@ -17,16 +20,23 @@ namespace { |
// A provider of services needed by Geolocation. |
class BlimpGeolocationDelegate : public content::GeolocationDelegate { |
public: |
- BlimpGeolocationDelegate() = default; |
+ explicit BlimpGeolocationDelegate( |
+ base::WeakPtr<EngineGeolocationFeature> feature) { |
Wez
2016/07/12 21:35:12
nit: Looks like you mean to just pass WeakPtr<Blim
CJ
2016/07/13 21:49:19
Done.
|
+ feature_ = feature; |
+ } |
bool UseNetworkLocationProviders() final { return false; } |
- std::unique_ptr<content::LocationProvider> OverrideSystemLocationProvider() |
- final { |
- return base::WrapUnique(new BlimpLocationProvider()); |
+ std::unique_ptr<content::LocationProvider> |
+ OverrideSystemLocationProvider() final { |
+ BlimpLocationProvider* location_provider = new BlimpLocationProvider(); |
+ location_provider->SetDelegate(feature_); |
+ return base::WrapUnique(location_provider); |
} |
private: |
+ base::WeakPtr<BlimpLocationProvider::Delegate> feature_; |
Wez
2016/07/12 21:35:12
You're assigning this from an EngineGeolocationFea
CJ
2016/07/13 21:49:19
It does. EngineGeolocationFeature is a BlimpLocati
Wez
2016/07/14 01:19:21
Right, but it's strange to require that the caller
CJ
2016/07/14 23:55:08
Acknowledged.
|
+ |
DISALLOW_COPY_AND_ASSIGN(BlimpGeolocationDelegate); |
}; |
@@ -62,7 +72,12 @@ BlimpBrowserContext* BlimpContentBrowserClient::GetBrowserContext() { |
content::GeolocationDelegate* |
BlimpContentBrowserClient::CreateGeolocationDelegate() { |
- return new BlimpGeolocationDelegate(); |
+ EngineGeolocationFeature* geolocation_feature = blimp_browser_main_parts() |
+ ->GetBlimpEngineSession() |
+ ->GetGeolocationFeature(); |
Wez
2016/07/12 21:35:12
nit: Is this the git cl format preferred line-wrap
CJ
2016/07/13 21:49:19
Yes.
|
+ BlimpGeolocationDelegate* delegate = |
+ new BlimpGeolocationDelegate(geolocation_feature->GetWeakPtr()); |
Wez
2016/07/12 21:35:13
Rather than expose WeakPtr<EngineGelocationFeature
CJ
2016/07/13 21:49:19
BlimpGeolocationDelegate has nothing to do with En
Wez
2016/07/14 01:19:21
I'm not sure what you mean by "has nothing to do w
CJ
2016/07/14 23:55:08
Done.
|
+ return delegate; |
} |
void BlimpContentBrowserClient::ExposeInterfacesToRenderer( |