Chromium Code Reviews| Index: third_party/WebKit/Source/modules/installedapp/InstalledAppController.cpp |
| diff --git a/third_party/WebKit/Source/modules/installedapp/InstalledAppController.cpp b/third_party/WebKit/Source/modules/installedapp/InstalledAppController.cpp |
| index 66ac9ff72ff4fa788e2cbf77050c09d5d9e58cb8..74a5597f86d239d807410837453a248d2567c1e5 100644 |
| --- a/third_party/WebKit/Source/modules/installedapp/InstalledAppController.cpp |
| +++ b/third_party/WebKit/Source/modules/installedapp/InstalledAppController.cpp |
| @@ -7,7 +7,6 @@ |
| #include "core/dom/Document.h" |
| #include "core/frame/LocalFrame.h" |
| #include "platform/RuntimeEnabledFeatures.h" |
| -#include "platform/weborigin/SecurityOrigin.h" |
| #include "public/platform/InterfaceProvider.h" |
| #include "wtf/Functional.h" |
| @@ -22,10 +21,8 @@ class InstalledAppController::GetRelatedAppsCallbacks |
| : public AppInstalledCallbacks { |
| public: |
| GetRelatedAppsCallbacks(InstalledAppController* controller, |
| - WTF::RefPtr<SecurityOrigin> url, |
| std::unique_ptr<AppInstalledCallbacks> callbacks) |
| : m_controller(controller), |
| - m_url(url), |
| m_callbacks(std::move(callbacks)) {} |
| // AppInstalledCallbacks overrides: |
| @@ -33,21 +30,18 @@ class InstalledAppController::GetRelatedAppsCallbacks |
| if (!m_controller) |
| return; |
| - m_controller->filterByInstalledApps(m_url, relatedApps, |
| - std::move(m_callbacks)); |
| + m_controller->filterByInstalledApps(relatedApps, std::move(m_callbacks)); |
| } |
| void onError() override { m_callbacks->onError(); } |
| private: |
| WeakPersistent<InstalledAppController> m_controller; |
| - WTF::RefPtr<SecurityOrigin> m_url; |
| std::unique_ptr<AppInstalledCallbacks> m_callbacks; |
| }; |
| InstalledAppController::~InstalledAppController() {} |
| void InstalledAppController::getInstalledRelatedApps( |
| - WTF::RefPtr<SecurityOrigin> url, |
| std::unique_ptr<AppInstalledCallbacks> callbacks) { |
| // When detached, the fetcher is no longer valid. |
| if (!m_relatedAppsFetcher) { |
| @@ -63,8 +57,7 @@ void InstalledAppController::getInstalledRelatedApps( |
| // TODO(mgiuca): This roundtrip to content could be eliminated if the Manifest |
| // class was moved from content into Blink. |
| m_relatedAppsFetcher->getManifestRelatedApplications( |
| - WTF::makeUnique<GetRelatedAppsCallbacks>(this, url, |
| - std::move(callbacks))); |
| + WTF::makeUnique<GetRelatedAppsCallbacks>(this, std::move(callbacks))); |
| } |
| void InstalledAppController::provideTo( |
| @@ -96,17 +89,53 @@ InstalledAppController::InstalledAppController( |
| m_relatedAppsFetcher(relatedAppsFetcher) {} |
| void InstalledAppController::contextDestroyed(ExecutionContext*) { |
| + m_provider.reset(); |
| m_relatedAppsFetcher = nullptr; |
| } |
| void InstalledAppController::filterByInstalledApps( |
| - WTF::RefPtr<SecurityOrigin> /*origin*/, |
| - const WebVector<WebRelatedApplication>& /*relatedApps*/, |
| - std::unique_ptr<AppInstalledCallbacks> callbacks) { |
| - // TODO(mgiuca): Call through to the browser to filter the list of |
| - // applications down to just those that are installed on the device. |
| - // For now, just return the empty list (no applications are installed). |
| - callbacks->onSuccess(WebVector<WebRelatedApplication>()); |
| + const blink::WebVector<blink::WebRelatedApplication>& relatedApps, |
| + std::unique_ptr<blink::AppInstalledCallbacks> callbacks) { |
| + WTF::Vector<mojom::blink::RelatedApplicationPtr> mojoRelatedApps; |
| + for (const auto& relatedApplication : relatedApps) { |
| + mojom::blink::RelatedApplicationPtr convertedApplication( |
| + mojom::blink::RelatedApplication::New()); |
| + DCHECK(!relatedApplication.platform.isEmpty()); |
| + convertedApplication->platform = relatedApplication.platform; |
| + convertedApplication->id = relatedApplication.id; |
| + convertedApplication->url = relatedApplication.url; |
|
haraken
2017/03/14 08:58:55
Would it be possible to type-map between RelatedAp
Matt Giuca
2017/03/14 23:21:03
This was discussed above (see #17 to #23). I think
|
| + mojoRelatedApps.push_back(std::move(convertedApplication)); |
| + } |
| + |
| + if (!m_provider) { |
| + supplementable()->interfaceProvider()->getInterface( |
| + mojo::MakeRequest(&m_provider)); |
| + // TODO(mgiuca): Set a connection error handler. This requires a refactor to |
| + // work like NavigatorShare.cpp (retain a persistent list of clients to |
| + // reject all of their promises). |
| + DCHECK(m_provider); |
| + } |
| + |
| + m_provider->FilterInstalledApps( |
| + std::move(mojoRelatedApps), |
| + convertToBaseCallback( |
| + WTF::bind(&InstalledAppController::OnFilterInstalledApps, |
| + wrapPersistent(this), WTF::passed(std::move(callbacks))))); |
| +} |
| + |
| +void InstalledAppController::OnFilterInstalledApps( |
| + std::unique_ptr<blink::AppInstalledCallbacks> callbacks, |
| + WTF::Vector<mojom::blink::RelatedApplicationPtr> result) { |
| + std::vector<blink::WebRelatedApplication> applications; |
| + for (const auto& res : result) { |
| + blink::WebRelatedApplication app; |
| + app.platform = res->platform; |
| + app.url = res->url; |
| + app.id = res->id; |
|
haraken
2017/03/14 08:58:55
Ditto.
|
| + applications.push_back(app); |
| + } |
| + callbacks->onSuccess( |
| + blink::WebVector<blink::WebRelatedApplication>(applications)); |
| } |
| DEFINE_TRACE(InstalledAppController) { |