Commit e52c739e authored by Denis Kuznetsov's avatar Denis Kuznetsov Committed by Commit Bot

OOBE: Add a way to simulate getting list of recommended apps

Bug: 1024092
Change-Id: I76cf85b16b2d3bc65445dd8559357529f0798011
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2404453Reviewed-by: default avatarRoman Sorokin [CET] <rsorokin@chromium.org>
Commit-Queue: Denis Kuznetsov [CET] <antrim@chromium.org>
Cr-Commit-Position: refs/heads/master@{#807401}
parent 15bdf695
......@@ -1668,6 +1668,8 @@ source_set("chromeos") {
"login/screens/network_screen.h",
"login/screens/packaged_license_screen.cc",
"login/screens/packaged_license_screen.h",
"login/screens/recommend_apps/fake_recommend_apps_fetcher.cc",
"login/screens/recommend_apps/fake_recommend_apps_fetcher.h",
"login/screens/recommend_apps/recommend_apps_fetcher.cc",
"login/screens/recommend_apps/recommend_apps_fetcher.h",
"login/screens/recommend_apps/recommend_apps_fetcher_delegate.h",
......
// Copyright 2020 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 "chrome/browser/chromeos/login/screens/recommend_apps/fake_recommend_apps_fetcher.h"
#include "base/strings/stringprintf.h"
#include "base/timer/timer.h"
#include "chrome/browser/chromeos/login/screens/recommend_apps/recommend_apps_fetcher_delegate.h"
namespace chromeos {
namespace {
constexpr base::TimeDelta kFakeLoadingTime = base::TimeDelta::FromSeconds(3);
constexpr const int kMaxAppCount = 21;
} // namespace
FakeRecommendAppsFetcher::FakeRecommendAppsFetcher(
RecommendAppsFetcherDelegate* delegate,
int fake_apps_count)
: delegate_(delegate), fake_apps_count_(fake_apps_count) {}
FakeRecommendAppsFetcher::~FakeRecommendAppsFetcher() = default;
void FakeRecommendAppsFetcher::OnTimer() {
base::Value apps(base::Value::Type::LIST);
for (int i = 0; i < std::min(std::max(0, fake_apps_count_), kMaxAppCount);
i++) {
base::Value app(base::Value::Type::DICTIONARY);
app.SetKey("name", base::Value(base::StringPrintf("Fake App %d", (i + 1))));
app.SetKey("package_name", base::Value(base::StringPrintf(
"com.example.fake.app%d", (i + 1))));
apps.Append(std::move(app));
}
delegate_->OnLoadSuccess(std::move(apps));
}
void FakeRecommendAppsFetcher::Start() {
delay_timer_.Start(FROM_HERE, kFakeLoadingTime,
base::BindOnce(&FakeRecommendAppsFetcher::OnTimer,
weak_ptr_factory_.GetWeakPtr()));
}
void FakeRecommendAppsFetcher::Retry() {
delay_timer_.Start(FROM_HERE, kFakeLoadingTime,
base::BindOnce(&FakeRecommendAppsFetcher::OnTimer,
weak_ptr_factory_.GetWeakPtr()));
}
} // namespace chromeos
// Copyright 2020 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.
#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_RECOMMEND_APPS_FAKE_RECOMMEND_APPS_FETCHER_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_RECOMMEND_APPS_FAKE_RECOMMEND_APPS_FETCHER_H_
#include <string>
#include "base/memory/weak_ptr.h"
#include "base/timer/timer.h"
#include "base/values.h"
#include "chrome/browser/chromeos/login/screens/recommend_apps/recommend_apps_fetcher.h"
namespace chromeos {
class RecommendAppsFetcherDelegate;
// This class fakes network request for the Recommend Apps screen.
// It returns fixed number of fake apps after small delay.
class FakeRecommendAppsFetcher : public RecommendAppsFetcher {
public:
FakeRecommendAppsFetcher(RecommendAppsFetcherDelegate* delegate,
int fake_apps_count);
FakeRecommendAppsFetcher(const FakeRecommendAppsFetcher&) = delete;
FakeRecommendAppsFetcher& operator=(const FakeRecommendAppsFetcher&) = delete;
~FakeRecommendAppsFetcher() override;
// Provide a retry method to download the app list again.
// RecommendAppsFetcher:
void Start() override;
void Retry() override;
private:
void OnTimer();
RecommendAppsFetcherDelegate* delegate_;
int fake_apps_count_;
base::OneShotTimer delay_timer_;
base::WeakPtrFactory<FakeRecommendAppsFetcher> weak_ptr_factory_{this};
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_RECOMMEND_APPS_FAKE_RECOMMEND_APPS_FETCHER_H_
......@@ -7,9 +7,15 @@
#include "ash/public/ash_interfaces.h"
#include "ash/public/mojom/cros_display_config.mojom.h"
#include "base/callback.h"
#include "base/command_line.h"
#include "base/logging.h"
#include "base/strings/string_number_conversions.h"
#include "base/system/sys_info.h"
#include "chrome/browser/chromeos/login/screens/recommend_apps/fake_recommend_apps_fetcher.h"
#include "chrome/browser/chromeos/login/screens/recommend_apps/recommend_apps_fetcher_impl.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chromeos/constants/chromeos_switches.h"
#include "content/public/browser/storage_partition.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
......@@ -30,6 +36,20 @@ std::unique_ptr<RecommendAppsFetcher> RecommendAppsFetcher::Create(
if (g_factory_callback)
return g_factory_callback->Run(delegate);
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
chromeos::switches::kFakeArcRecommendedAppsForTesting)) {
LOG(WARNING) << "Using fake recommended apps fetcher";
std::string num_apps_str =
base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
chromeos::switches::kFakeArcRecommendedAppsForTesting);
int fake_apps_count = 0;
if (!base::StringToInt(num_apps_str, &fake_apps_count)) {
fake_apps_count = 3;
}
return std::make_unique<FakeRecommendAppsFetcher>(delegate,
fake_apps_count);
}
mojo::PendingRemote<ash::mojom::CrosDisplayConfigController> display_config;
ash::BindCrosDisplayConfigController(
display_config.InitWithNewPipeAndPassReceiver());
......
......@@ -64,11 +64,11 @@ struct FakeAppInfo {
const std::string name;
};
class FakeRecommendAppsFetcher : public RecommendAppsFetcher {
class StubRecommendAppsFetcher : public RecommendAppsFetcher {
public:
explicit FakeRecommendAppsFetcher(RecommendAppsFetcherDelegate* delegate)
explicit StubRecommendAppsFetcher(RecommendAppsFetcherDelegate* delegate)
: delegate_(delegate) {}
~FakeRecommendAppsFetcher() override = default;
~StubRecommendAppsFetcher() override = default;
bool started() const { return started_; }
int retries() const { return retries_; }
......@@ -228,7 +228,7 @@ class RecommendAppsScreenTest : public OobeBaseTest {
RecommendAppsScreen* recommend_apps_screen_;
base::Optional<RecommendAppsScreen::Result> screen_result_;
FakeRecommendAppsFetcher* recommend_apps_fetcher_ = nullptr;
StubRecommendAppsFetcher* recommend_apps_fetcher_ = nullptr;
LoginManagerMixin login_manager_{&mixin_host_};
......@@ -245,7 +245,7 @@ class RecommendAppsScreenTest : public OobeBaseTest {
EXPECT_EQ(delegate, recommend_apps_screen_);
EXPECT_FALSE(recommend_apps_fetcher_);
auto fetcher = std::make_unique<FakeRecommendAppsFetcher>(delegate);
auto fetcher = std::make_unique<StubRecommendAppsFetcher>(delegate);
recommend_apps_fetcher_ = fetcher.get();
return fetcher;
}
......
......@@ -341,6 +341,12 @@ const char kFakeDriveFsLauncherChrootPath[] =
const char kFakeDriveFsLauncherSocketPath[] =
"fake-drivefs-launcher-socket-path";
// Specifies number of recommended (fake) ARC apps during user onboarding.
// App descriptions are generated locally instead of being fetched from server.
// Limited to ChromeOS-on-linux and test images only.
const char kFakeArcRecommendedAppsForTesting[] =
"fake-arc-recommended-apps-for-testing";
// Fingerprint sensor location indicates the physical sensor's location. The
// value is a string with possible values: "power-button-top-left",
// "keyboard-bottom-left", keyboard-bottom-right", "keyboard-top-right".
......
......@@ -145,6 +145,8 @@ extern const char kFakeDriveFsLauncherChrootPath[];
COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const char kFakeDriveFsLauncherSocketPath[];
COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const char kFakeArcRecommendedAppsForTesting[];
COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const char kFingerprintSensorLocation[];
COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const char kForceCertVerifierBuiltin[];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment