1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
// Copyright 2019 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_ASH_ANDROID_SMS_ANDROID_SMS_APP_SETUP_CONTROLLER_IMPL_H_
#define CHROME_BROWSER_ASH_ANDROID_SMS_ANDROID_SMS_APP_SETUP_CONTROLLER_IMPL_H_
#include "base/gtest_prod_util.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/time/time.h"
#include "base/unguessable_token.h"
#include "chrome/browser/ash/android_sms/android_sms_app_setup_controller.h"
#include "chrome/browser/web_applications/externally_managed_app_manager.h"
#include "components/webapps/common/web_app_id.h"
#include "net/cookies/canonical_cookie.h"
#include "net/cookies/cookie_access_result.h"
#include "url/gurl.h"
class HostContentSettingsMap;
class Profile;
namespace network {
namespace mojom {
class CookieManager;
} // namespace mojom
} // namespace network
namespace ash {
namespace android_sms {
// Concrete AndroidSmsAppSetupController implementation.
class AndroidSmsAppSetupControllerImpl : public AndroidSmsAppSetupController {
public:
AndroidSmsAppSetupControllerImpl(
Profile* profile,
web_app::ExternallyManagedAppManager* externally_managed_app_manager,
HostContentSettingsMap* host_content_settings_map);
AndroidSmsAppSetupControllerImpl(const AndroidSmsAppSetupControllerImpl&) =
delete;
AndroidSmsAppSetupControllerImpl& operator=(
const AndroidSmsAppSetupControllerImpl&) = delete;
~AndroidSmsAppSetupControllerImpl() override;
private:
friend class AndroidSmsAppSetupControllerImplTest;
FRIEND_TEST_ALL_PREFIXES(AndroidSmsAppSetupControllerImplTest,
SetUpApp_Retry);
static const base::TimeDelta kInstallRetryDelay;
static const size_t kMaxInstallRetryCount;
// Thin wrapper around static PWA functions which is stubbed out for tests.
class PwaDelegate {
public:
PwaDelegate();
virtual ~PwaDelegate();
virtual std::optional<webapps::AppId> GetPwaForUrl(const GURL& install_url,
Profile* profile);
virtual network::mojom::CookieManager* GetCookieManager(Profile* profile);
virtual void RemovePwa(const webapps::AppId& app_id,
Profile* profile,
SuccessCallback callback);
};
// AndroidSmsAppSetupController:
void SetUpApp(const GURL& app_url,
const GURL& install_url,
SuccessCallback callback) override;
std::optional<webapps::AppId> GetPwa(const GURL& install_url) override;
void DeleteRememberDeviceByDefaultCookie(const GURL& app_url,
SuccessCallback callback) override;
void RemoveApp(const GURL& app_url,
const GURL& install_url,
const GURL& migrated_to_app_url,
SuccessCallback callback) override;
void OnAppRemoved(SuccessCallback callback,
const GURL& app_url,
const GURL& install_url,
const GURL& migrated_to_app_url,
bool uninstalled);
void OnSetRememberDeviceByDefaultCookieResult(const GURL& app_url,
const GURL& install_url,
SuccessCallback callback,
net::CookieAccessResult result);
void OnSetMigrationCookieResult(const GURL& app_url,
SuccessCallback callback,
net::CookieAccessResult result);
void TryInstallApp(const GURL& install_url,
const GURL& app_url,
size_t num_attempts_so_far,
SuccessCallback callback);
void OnAppInstallResult(
SuccessCallback callback,
size_t num_attempts_so_far,
const GURL& app_url,
const GURL& install_url,
web_app::ExternallyManagedAppManager::InstallResult result);
void SetMigrationCookie(const GURL& app_url,
const GURL& migrated_to_app_url,
SuccessCallback callback);
void OnDeleteRememberDeviceByDefaultCookieResult(const GURL& app_url,
SuccessCallback callback,
uint32_t num_deleted);
void OnDeleteMigrationCookieResult(const GURL& app_url,
const GURL& install_url,
SuccessCallback callback,
uint32_t num_deleted);
void SetPwaDelegateForTesting(std::unique_ptr<PwaDelegate> test_pwa_delegate);
raw_ptr<Profile> profile_;
raw_ptr<web_app::ExternallyManagedAppManager> externally_managed_app_manager_;
raw_ptr<HostContentSettingsMap> host_content_settings_map_;
std::unique_ptr<PwaDelegate> pwa_delegate_;
base::WeakPtrFactory<AndroidSmsAppSetupControllerImpl> weak_ptr_factory_{
this};
};
} // namespace android_sms
} // namespace ash
#endif // CHROME_BROWSER_ASH_ANDROID_SMS_ANDROID_SMS_APP_SETUP_CONTROLLER_IMPL_H_
|