| // Copyright 2021 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_SAFE_BROWSING_REQUEST_H_ |
| #define CHROME_BROWSER_WEBSHARE_SAFE_BROWSING_REQUEST_H_ |
| |
| #include <memory> |
| |
| #include "base/functional/callback.h" |
| #include "base/memory/scoped_refptr.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/time/time.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "url/gurl.h" |
| |
| namespace safe_browsing { |
| class SafeBrowsingDatabaseManager; |
| } |
| |
| // Represents a single request to the Safe Browsing service to check whether |
| // a website is safe when sharing files with the Web Share API. It is used for |
| // PDFs for instance on Desktop platforms. Can be created and used on any one |
| // thread. |
| class SafeBrowsingRequest { |
| public: |
| // Constructs a request that check whether a website |url| is safe by |
| // consulting the |database_manager|, and invokes |callback| when done. |
| // |
| // It is guaranteed that |callback| will never be invoked synchronously, and |
| // it will not be invoked after |this| goes out of scope. |
| SafeBrowsingRequest(scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> |
| database_manager, |
| const GURL& url, |
| base::OnceCallback<void(bool)> callback); |
| ~SafeBrowsingRequest(); |
| |
| private: |
| class SafeBrowsingClient; |
| |
| SafeBrowsingRequest(const SafeBrowsingRequest&) = delete; |
| SafeBrowsingRequest& operator=(const SafeBrowsingRequest&) = delete; |
| |
| // Posted by the |client_| from the IO thread when it gets a response. |
| void OnResultReceived(bool is_url_safe); |
| |
| // The client interfacing with Safe Browsing. |
| std::unique_ptr<SafeBrowsingClient> client_; |
| |
| base::OnceCallback<void(bool)> callback_; |
| |
| base::WeakPtrFactory<SafeBrowsingRequest> weak_factory_{this}; |
| }; |
| |
| #endif // CHROME_BROWSER_WEBSHARE_SAFE_BROWSING_REQUEST_H_ |