| 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..d6657527e72e3441594abe3c3600fb4cf3ddd754 100644
|
| --- a/third_party/WebKit/Source/modules/installedapp/InstalledAppController.cpp
|
| +++ b/third_party/WebKit/Source/modules/installedapp/InstalledAppController.cpp
|
| @@ -93,6 +93,7 @@ InstalledAppController::InstalledAppController(
|
| WebRelatedAppsFetcher* relatedAppsFetcher)
|
| : Supplement<LocalFrame>(frame),
|
| ContextLifecycleObserver(frame.document()),
|
| + m_frame(&frame),
|
| m_relatedAppsFetcher(relatedAppsFetcher) {}
|
|
|
| void InstalledAppController::contextDestroyed(ExecutionContext*) {
|
| @@ -100,18 +101,55 @@ void InstalledAppController::contextDestroyed(ExecutionContext*) {
|
| }
|
|
|
| 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>());
|
| + WTF::RefPtr<SecurityOrigin> origin,
|
| + 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;
|
| + mojoRelatedApps.push_back(std::move(convertedApplication));
|
| + }
|
| +
|
| + if (!m_provider) {
|
| + DCHECK(m_frame);
|
| + m_frame->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), origin->toString(),
|
| + 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;
|
| + applications.push_back(app);
|
| + }
|
| + callbacks->onSuccess(
|
| + blink::WebVector<blink::WebRelatedApplication>(applications));
|
| }
|
|
|
| DEFINE_TRACE(InstalledAppController) {
|
| Supplement<LocalFrame>::trace(visitor);
|
| ContextLifecycleObserver::trace(visitor);
|
| + visitor->trace(m_frame);
|
| }
|
|
|
| } // namespace blink
|
|
|