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

Unified Diff: Source/modules/geolocation/GeolocationController.cpp

Issue 256843004: Get the WebGeolocationClient from WebFrameClient instead of WebViewClient. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: fix linking errors Created 6 years, 7 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: Source/modules/geolocation/GeolocationController.cpp
diff --git a/Source/modules/geolocation/GeolocationController.cpp b/Source/modules/geolocation/GeolocationController.cpp
index c5bf45367b4db0b5d8d78aaa07ca76608698a025..3a599227efb35c7f56f2c2384f285cf02a36b75a 100644
--- a/Source/modules/geolocation/GeolocationController.cpp
+++ b/Source/modules/geolocation/GeolocationController.cpp
@@ -28,6 +28,7 @@
#include "modules/geolocation/GeolocationController.h"
#include "core/inspector/InspectorController.h"
+#include "core/page/Page.h"
#include "modules/geolocation/GeolocationClient.h"
#include "modules/geolocation/GeolocationError.h"
#include "modules/geolocation/GeolocationInspectorAgent.h"
@@ -35,16 +36,32 @@
namespace WebCore {
-GeolocationController::GeolocationController(Page& page, GeolocationClient* client)
- : PageLifecycleObserver(&page)
+GeolocationController::GeolocationController(LocalFrame& frame, GeolocationClient* client)
+ : PageLifecycleObserver(frame.page())
, m_client(client)
, m_hasClientForTest(false)
, m_isClientUpdating(false)
, m_inspectorAgent()
{
- OwnPtr<GeolocationInspectorAgent> geolocationAgent(GeolocationInspectorAgent::create(this));
- m_inspectorAgent = geolocationAgent.get();
- page.inspectorController().registerModuleAgent(geolocationAgent.release());
+ // FIXME: Once GeolocationInspectorAgent is per frame, there will be a 1:1 relationship between
+ // it and this class. Until then, there's one GeolocationInspectorAgent per page that the main
+ // frame is responsible for creating.
+ if (frame.isMainFrame()) {
+ OwnPtr<GeolocationInspectorAgent> geolocationAgent(GeolocationInspectorAgent::create());
+ m_inspectorAgent = geolocationAgent.get();
+ frame.page()->inspectorController().registerModuleAgent(geolocationAgent.release());
+ } else {
+ m_inspectorAgent = GeolocationController::from(frame.page()->mainFrame())->m_inspectorAgent;
+ }
+
+ m_inspectorAgent->AddController(this);
+
+ if (!frame.isMainFrame()) {
+ // internals.setGeolocationClientMock is per page.
+ GeolocationController* mainController = GeolocationController::from(frame.page()->mainFrame());
+ if (mainController->hasClientForTest())
+ setClientForTest(mainController->client());
+ }
}
void GeolocationController::startUpdatingIfNeeded()
@@ -66,6 +83,11 @@ void GeolocationController::stopUpdatingIfNeeded()
GeolocationController::~GeolocationController()
{
ASSERT(m_observers.isEmpty());
+ if (page())
+ m_inspectorAgent->RemoveController(this);
+
+ if (m_hasClientForTest)
+ m_client->controllerForTestRemoved(this);
}
void GeolocationController::willBeDestroyed()
@@ -74,9 +96,9 @@ void GeolocationController::willBeDestroyed()
m_client->geolocationDestroyed();
}
-PassOwnPtrWillBeRawPtr<GeolocationController> GeolocationController::create(Page& page, GeolocationClient* client)
+PassOwnPtrWillBeRawPtr<GeolocationController> GeolocationController::create(LocalFrame& frame, GeolocationClient* client)
{
- return adoptPtrWillBeNoop(new GeolocationController(page, client));
+ return adoptPtrWillBeNoop(new GeolocationController(frame, client));
}
void GeolocationController::addObserver(Geolocation* observer, bool enableHighAccuracy)
@@ -161,6 +183,8 @@ void GeolocationController::setClientForTest(GeolocationClient* client)
{
m_client = client;
m_hasClientForTest = true;
+
+ client->controllerForTestAdded(this);
}
void GeolocationController::pageVisibilityChanged()
@@ -184,12 +208,12 @@ void GeolocationController::trace(Visitor* visitor)
visitor->trace(m_lastPosition);
visitor->trace(m_observers);
visitor->trace(m_highAccuracyObservers);
- WillBeHeapSupplement<Page>::trace(visitor);
+ WillBeHeapSupplement<LocalFrame>::trace(visitor);
}
-void provideGeolocationTo(Page& page, GeolocationClient* client)
+void provideGeolocationTo(LocalFrame& frame, GeolocationClient* client)
{
- WillBeHeapSupplement<Page>::provideTo(page, GeolocationController::supplementName(), GeolocationController::create(page, client));
+ WillBeHeapSupplement<LocalFrame>::provideTo(frame, GeolocationController::supplementName(), GeolocationController::create(frame, client));
}
} // namespace WebCore

Powered by Google App Engine
This is Rietveld 408576698