Index: blimp/engine/app/blimp_browser_main_parts.cc |
diff --git a/blimp/engine/app/blimp_browser_main_parts.cc b/blimp/engine/app/blimp_browser_main_parts.cc |
index d1a95ecc0d3ecf3e83a9a69b31216c52174299eb..d5390e9a9f7815a64a5e9b7be7f1fd6eea95fba6 100644 |
--- a/blimp/engine/app/blimp_browser_main_parts.cc |
+++ b/blimp/engine/app/blimp_browser_main_parts.cc |
@@ -5,14 +5,18 @@ |
#include "blimp/engine/app/blimp_browser_main_parts.h" |
#include "base/command_line.h" |
+#include "base/memory/ptr_util.h" |
#include "base/threading/thread_restrictions.h" |
#include "blimp/common/proto/blimp_message.pb.h" |
#include "blimp/engine/app/blimp_engine_config.h" |
#include "blimp/engine/app/settings_manager.h" |
#include "blimp/engine/common/blimp_browser_context.h" |
+#include "blimp/engine/feature/geolocation/blimp_location_provider.h" |
#include "blimp/engine/session/blimp_engine_session.h" |
#include "blimp/net/blimp_connection.h" |
#include "content/public/browser/browser_thread.h" |
+#include "content/public/browser/geolocation_delegate.h" |
+#include "content/public/browser/geolocation_provider.h" |
#include "content/public/common/main_function_params.h" |
#include "net/base/net_module.h" |
#include "net/log/net_log.h" |
@@ -20,6 +24,25 @@ |
namespace blimp { |
namespace engine { |
+namespace { |
+// A provider of services needed by Geolocation. |
+class BlimpGeolocationDelegate : public content::GeolocationDelegate { |
+ public: |
+ BlimpGeolocationDelegate() = default; |
+ |
+ bool UseNetworkLocationProviders() final { return false; } |
+ |
+ std::unique_ptr<content::LocationProvider> OverrideSystemLocationProvider() |
+ final { |
+ return base::WrapUnique(new BlimpLocationProvider()); |
+ } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(BlimpGeolocationDelegate); |
+}; |
+ |
+} // anonymous namespace |
+ |
BlimpBrowserMainParts::BlimpBrowserMainParts( |
const content::MainFunctionParams& parameters) {} |
@@ -42,6 +65,8 @@ void BlimpBrowserMainParts::PreMainMessageLoopRun() { |
settings_manager_.reset(new SettingsManager); |
std::unique_ptr<BlimpBrowserContext> browser_context( |
new BlimpBrowserContext(false, net_log_.get())); |
+ content::GeolocationProvider::SetGeolocationDelegate( |
+ new BlimpGeolocationDelegate()); |
engine_session_.reset( |
new BlimpEngineSession(std::move(browser_context), net_log_.get(), |
engine_config_.get(), settings_manager_.get())); |