|  | // Copyright 2020 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef CHROME_BROWSER_WEBSHARE_SHARE_SERVICE_IMPL_H_ | 
|  | #define CHROME_BROWSER_WEBSHARE_SHARE_SERVICE_IMPL_H_ | 
|  |  | 
|  | #include <optional> | 
|  | #include <string> | 
|  | #include <string_view> | 
|  | #include <vector> | 
|  |  | 
|  | #include "base/files/file_path.h" | 
|  | #include "base/memory/weak_ptr.h" | 
|  | #include "build/build_config.h" | 
|  | #include "chrome/browser/webshare/safe_browsing_request.h" | 
|  | #include "content/public/browser/document_service.h" | 
|  | #include "third_party/blink/public/mojom/webshare/webshare.mojom.h" | 
|  |  | 
|  | #if BUILDFLAG(IS_CHROMEOS) | 
|  | #include "chrome/browser/webshare/chromeos/sharesheet_client.h" | 
|  | #endif | 
|  |  | 
|  | class GURL; | 
|  |  | 
|  | namespace content { | 
|  | class RenderFrameHost; | 
|  | } | 
|  |  | 
|  | enum class WebShareMethod { kShare = 0, kMaxValue = kShare }; | 
|  |  | 
|  | // UMA metric name for Web Share API count. | 
|  | inline constexpr char kWebShareApiCountMetric[] = "WebShare.ApiCount"; | 
|  |  | 
|  | inline constexpr size_t kMaxSharedFileCount = 10; | 
|  | inline constexpr uint64_t kMaxSharedFileBytes = 50 * 1024 * 1024; | 
|  |  | 
|  | class ShareServiceImpl | 
|  | : public content::DocumentService<blink::mojom::ShareService> { | 
|  | public: | 
|  | ShareServiceImpl(const ShareServiceImpl&) = delete; | 
|  | ShareServiceImpl& operator=(const ShareServiceImpl&) = delete; | 
|  |  | 
|  | static void Create( | 
|  | content::RenderFrameHost* render_frame_host, | 
|  | mojo::PendingReceiver<blink::mojom::ShareService> receiver); | 
|  |  | 
|  | static bool IsDangerousFilename(const base::FilePath& path); | 
|  | static bool IsDangerousMimeType(std::string_view content_type); | 
|  |  | 
|  | // blink::mojom::ShareService: | 
|  | void Share(const std::string& title, | 
|  | const std::string& text, | 
|  | const GURL& share_url, | 
|  | std::vector<blink::mojom::SharedFilePtr> files, | 
|  | ShareCallback callback) override; | 
|  |  | 
|  | private: | 
|  | void OnSafeBrowsingResultReceived( | 
|  | const std::string& title, | 
|  | const std::string& text, | 
|  | const GURL& share_url, | 
|  | std::vector<blink::mojom::SharedFilePtr> files, | 
|  | ShareCallback callback, | 
|  | bool is_safe); | 
|  |  | 
|  | ShareServiceImpl(content::RenderFrameHost& render_frame_host, | 
|  | mojo::PendingReceiver<blink::mojom::ShareService> receiver); | 
|  | ~ShareServiceImpl() override; | 
|  |  | 
|  | std::optional<SafeBrowsingRequest> safe_browsing_request_; | 
|  |  | 
|  | #if BUILDFLAG(IS_CHROMEOS) | 
|  | webshare::SharesheetClient sharesheet_client_; | 
|  | #endif | 
|  |  | 
|  | base::WeakPtrFactory<ShareServiceImpl> weak_factory_{this}; | 
|  | }; | 
|  |  | 
|  | #endif  // CHROME_BROWSER_WEBSHARE_SHARE_SERVICE_IMPL_H_ |