| Index: content/renderer/installedapp/related_apps_fetcher.cc | 
| diff --git a/content/renderer/installedapp/related_apps_fetcher.cc b/content/renderer/installedapp/related_apps_fetcher.cc | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..2d6db5a5c0f0be3e3dbc7dec2552e33c2fcca057 | 
| --- /dev/null | 
| +++ b/content/renderer/installedapp/related_apps_fetcher.cc | 
| @@ -0,0 +1,53 @@ | 
| +// Copyright 2017 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +#include "content/renderer/installedapp/related_apps_fetcher.h" | 
| + | 
| +#include "base/bind.h" | 
| +#include "content/public/common/manifest.h" | 
| +#include "content/renderer/manifest/manifest_debug_info.h" | 
| +#include "content/renderer/manifest/manifest_manager.h" | 
| +#include "third_party/WebKit/public/platform/WebString.h" | 
| +#include "third_party/WebKit/public/platform/modules/installedapp/WebRelatedApplication.h" | 
| + | 
| +namespace content { | 
| + | 
| +RelatedAppsFetcher::RelatedAppsFetcher(ManifestManager* manifest_manager) | 
| +    : manifest_manager_(manifest_manager) {} | 
| + | 
| +RelatedAppsFetcher::~RelatedAppsFetcher() {} | 
| + | 
| +void RelatedAppsFetcher::getManifestRelatedApplications( | 
| +    std::unique_ptr<blink::WebCallbacks< | 
| +        const blink::WebVector<blink::WebRelatedApplication>&, | 
| +        void>> callbacks) { | 
| +  manifest_manager_->GetManifest( | 
| +      base::Bind(&RelatedAppsFetcher::OnGetManifestForRelatedApplications, | 
| +                 base::Unretained(this), base::Passed(&callbacks))); | 
| +} | 
| + | 
| +void RelatedAppsFetcher::OnGetManifestForRelatedApplications( | 
| +    std::unique_ptr<blink::WebCallbacks< | 
| +        const blink::WebVector<blink::WebRelatedApplication>&, | 
| +        void>> callbacks, | 
| +    const GURL& /*url*/, | 
| +    const Manifest& manifest, | 
| +    const ManifestDebugInfo& /*manifest_debug_info*/) { | 
| +  std::vector<blink::WebRelatedApplication> related_apps; | 
| +  for (const auto& relatedApplication : manifest.related_applications) { | 
| +    blink::WebRelatedApplication webRelatedApplication; | 
| +    webRelatedApplication.platform = | 
| +        blink::WebString::fromUTF16(relatedApplication.platform); | 
| +    webRelatedApplication.id = | 
| +        blink::WebString::fromUTF16(relatedApplication.id); | 
| +    if (!relatedApplication.url.is_empty()) { | 
| +      webRelatedApplication.url = | 
| +          blink::WebString::fromUTF8(relatedApplication.url.spec()); | 
| +    } | 
| +    related_apps.push_back(std::move(webRelatedApplication)); | 
| +  } | 
| +  callbacks->onSuccess(std::move(related_apps)); | 
| +} | 
| + | 
| +}  // namespace content | 
|  |