Added import from Vivaldi (#13990)

This commit is contained in:
Cepera
2022-07-14 17:18:10 +03:00
committed by GitHub
parent b72f2e23bc
commit 5aa6867d67
21 changed files with 183 additions and 115 deletions
@@ -14,9 +14,14 @@
namespace {
bool ShouldUseBraveImporter(importer::ImporterType type) {
if (type == importer::TYPE_CHROME || type == importer::TYPE_EDGE_CHROMIUM)
return true;
switch (type) {
case importer::TYPE_CHROME:
case importer::TYPE_EDGE_CHROMIUM:
case importer::TYPE_VIVALDI:
return true;
default:
return false;
}
return false;
}
} // namespace
+35 -30
View File
@@ -11,16 +11,18 @@
namespace {
// Note: append-only enumeration! Never remove any existing values, as this enum
// is used to bucket a UMA histogram, and removing values breaks that.
//
// If changes are absolutely required, we can version the histogram (ex .2, .3).
// We need to let folks from stats know so we can update the server side also.
enum class ImporterSource {
kNone,
kBrave,
kBookmarksHTMLFile,
kChrome,
kFirefox,
kBookmarksHTMLFile,
kMicrosoft, // includes IE, Legacy Edge, Chromium Edge
kOpera,
kSafari,
kIE,
kEdge,
kEdgeChromium,
kOther, // includes Vivaldi and can include others
kSize
};
} // namespace
@@ -28,36 +30,39 @@ enum class ImporterSource {
void RecordImporterP3A(importer::ImporterType type) {
ImporterSource metric;
switch (type) {
case importer::TYPE_UNKNOWN:
metric = ImporterSource::kNone;
break;
case importer::TYPE_UNKNOWN:
metric = ImporterSource::kNone;
break;
#if BUILDFLAG(IS_WIN)
case importer::TYPE_IE:
metric = ImporterSource::kIE;
break;
case importer::TYPE_EDGE:
metric = ImporterSource::kEdge;
break;
case importer::TYPE_IE:
metric = ImporterSource::kMicrosoft;
break;
case importer::TYPE_EDGE:
metric = ImporterSource::kMicrosoft;
break;
#endif
case importer::TYPE_FIREFOX:
metric = ImporterSource::kFirefox;
break;
case importer::TYPE_FIREFOX:
metric = ImporterSource::kFirefox;
break;
#if BUILDFLAG(IS_MAC)
case importer::TYPE_SAFARI:
metric = ImporterSource::kSafari;
break;
case importer::TYPE_SAFARI:
metric = ImporterSource::kSafari;
break;
#endif
case importer::TYPE_BOOKMARKS_FILE:
metric = ImporterSource::kBookmarksHTMLFile;
break;
case importer::TYPE_CHROME:
metric = ImporterSource::kChrome;
break;
case importer::TYPE_EDGE_CHROMIUM:
metric = ImporterSource::kEdgeChromium;
break;
case importer::TYPE_BOOKMARKS_FILE:
metric = ImporterSource::kBookmarksHTMLFile;
break;
case importer::TYPE_CHROME:
metric = ImporterSource::kChrome;
break;
case importer::TYPE_EDGE_CHROMIUM:
metric = ImporterSource::kMicrosoft;
break;
case importer::TYPE_VIVALDI:
metric = ImporterSource::kOther;
break;
}
UMA_HISTOGRAM_ENUMERATION("Brave.Importer.ImporterSource", metric,
UMA_HISTOGRAM_ENUMERATION("Brave.Importer.ImporterSource.2", metric,
ImporterSource::kSize);
}
@@ -10,6 +10,7 @@
#include "base/values.h"
#include "brave/common/importer/chrome_importer_utils.h"
#include "brave/grit/brave_generated_resources.h"
#include "chrome/common/importer/importer_type.h"
#include "chrome/grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
@@ -49,20 +50,34 @@ void DetectChromeProfiles(std::vector<importer::SourceProfile>* profiles) {
base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
base::BlockingType::WILL_BLOCK);
AddChromeToProfiles(
profiles, GetChromeSourceProfiles(GetChromeUserDataFolder()),
profiles,
GetChromeSourceProfiles(GetChromeUserDataFolder().Append(
base::FilePath::StringType(FILE_PATH_LITERAL("Local State")))),
GetChromeUserDataFolder(), "Chrome ", importer::TYPE_CHROME);
#if !BUILDFLAG(IS_LINUX)
AddChromeToProfiles(
profiles, GetChromeSourceProfiles(GetCanaryUserDataFolder()),
profiles,
GetChromeSourceProfiles(GetCanaryUserDataFolder().Append(
base::FilePath::StringType(FILE_PATH_LITERAL("Local State")))),
GetCanaryUserDataFolder(), "Chrome Canary ", importer::TYPE_CHROME);
#endif
AddChromeToProfiles(
profiles, GetChromeSourceProfiles(GetChromiumUserDataFolder()),
profiles,
GetChromeSourceProfiles(GetChromiumUserDataFolder().Append(
base::FilePath::StringType(FILE_PATH_LITERAL("Local State")))),
GetChromiumUserDataFolder(), "Chromium ", importer::TYPE_CHROME);
AddChromeToProfiles(
profiles, GetChromeSourceProfiles(GetEdgeUserDataFolder()),
profiles,
GetChromeSourceProfiles(GetEdgeUserDataFolder().Append(
base::FilePath::StringType(FILE_PATH_LITERAL("Local State")))),
GetEdgeUserDataFolder(), "Microsoft Edge ", importer::TYPE_EDGE_CHROMIUM);
AddChromeToProfiles(
profiles,
GetChromeSourceProfiles(GetVivaldiUserDataFolder().Append(
base::FilePath::StringType(FILE_PATH_LITERAL("Local State")))),
GetVivaldiUserDataFolder(), "Vivaldi ", importer::TYPE_VIVALDI);
}
} // namespace
@@ -0,0 +1,14 @@
/* Copyright 2022 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "chrome/browser/importer/importer_uma.h"
#define TYPE_FIREFOX \
TYPE_CHROME: \
case TYPE_EDGE_CHROMIUM: \
case TYPE_VIVALDI: \
break; \
case TYPE_FIREFOX
#include "src/chrome/browser/importer/importer_uma.cc"
@@ -0,0 +1,14 @@
/* Copyright (c) 2022 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef BRAVE_CHROMIUM_SRC_CHROME_COMMON_IMPORTER_IMPORTER_TYPE_H_
#define BRAVE_CHROMIUM_SRC_CHROME_COMMON_IMPORTER_IMPORTER_TYPE_H_
#define TYPE_FIREFOX \
TYPE_CHROME = 1, TYPE_EDGE_CHROMIUM = 10, TYPE_VIVALDI = 11, TYPE_FIREFOX
#include "src/chrome/common/importer/importer_type.h"
#undef TYPE_FIREFOX
#endif // BRAVE_CHROMIUM_SRC_CHROME_COMMON_IMPORTER_IMPORTER_TYPE_H_
@@ -10,9 +10,9 @@
#include "chrome/common/importer/importer_type.h"
#if !BUILDFLAG(IS_WIN)
#define TYPE_BOOKMARKS_FILE TYPE_EDGE_CHROMIUM
#define TYPE_BOOKMARKS_FILE TYPE_VIVALDI
#else
#define TYPE_EDGE TYPE_EDGE_CHROMIUM
#define TYPE_EDGE TYPE_VIVALDI
#endif
#include "src/chrome/common/importer/profile_import_process_param_traits_macros.h"
#if !BUILDFLAG(IS_WIN)
+9 -11
View File
@@ -8,10 +8,10 @@
#include <memory>
#include <utility>
#include "base/values.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/json/json_reader.h"
#include "base/values.h"
#include "brave/common/importer/importer_constants.h"
#include "brave/common/importer/scoped_copy_file.h"
#include "chrome/common/importer/importer_data_types.h"
@@ -72,17 +72,9 @@ bool HasPaymentMethods(const base::FilePath& payments_path) {
} // namespace
base::Value::List GetChromeSourceProfiles(
const base::FilePath& user_data_folder) {
const base::FilePath& local_state_path) {
base::Value::List profiles;
base::FilePath local_state_path =
user_data_folder.Append(
base::FilePath::StringType(FILE_PATH_LITERAL("Local State")));
if (!base::PathExists(local_state_path)) {
base::Value::Dict entry;
entry.Set("id", "Default");
entry.Set("name", "Default");
profiles.Append(std::move(entry));
} else {
if (base::PathExists(local_state_path)) {
std::string local_state_content;
base::ReadFileToString(local_state_path, &local_state_content);
absl::optional<base::Value> local_state =
@@ -113,6 +105,12 @@ base::Value::List GetChromeSourceProfiles(
}
}
}
if (profiles.empty()) {
base::Value::Dict entry;
entry.Set("id", "Default");
entry.Set("name", "Default");
profiles.Append(std::move(entry));
}
return profiles;
}
+3 -2
View File
@@ -25,8 +25,9 @@ base::FilePath GetChromiumUserDataFolder();
base::FilePath GetEdgeUserDataFolder();
base::Value::List GetChromeSourceProfiles(
const base::FilePath& user_data_folder);
base::FilePath GetVivaldiUserDataFolder();
base::Value::List GetChromeSourceProfiles(const base::FilePath& local_state);
bool ChromeImporterCanImport(const base::FilePath& profile,
uint16_t* services_supported);
@@ -21,6 +21,17 @@ base::FilePath GetChromeUserDataFolder() {
return result;
}
base::FilePath GetVivaldiUserDataFolder() {
base::FilePath result;
if (!base::PathService::Get(base::DIR_HOME, &result))
return base::FilePath();
result = result.Append(".config");
result = result.Append("vivaldi");
return result;
}
base::FilePath GetChromiumUserDataFolder() {
base::FilePath result;
if (!base::PathService::Get(base::DIR_HOME, &result))
@@ -15,6 +15,11 @@ base::FilePath GetChromeUserDataFolder() {
return result.Append("Application Support/Google/Chrome");
}
base::FilePath GetVivaldiUserDataFolder() {
base::FilePath result = base::mac::GetUserLibraryPath();
return result.Append("Application Support/Vivaldi");
}
base::FilePath GetCanaryUserDataFolder() {
base::FilePath result = base::mac::GetUserLibraryPath();
return result.Append("Application Support/Google/Chrome Canary");
@@ -13,6 +13,12 @@
#include "testing/gtest/include/gtest/gtest.h"
namespace {
base::FilePath GetTestProfilePath() {
base::FilePath test_dir;
base::PathService::Get(brave::DIR_TEST_DATA, &test_dir);
return test_dir.AppendASCII("import").AppendASCII("chrome").AppendASCII(
"default");
}
// This sample prefs file is fetched after installing two extensions and one
// theme from webstore with fresh profile.
base::FilePath GetTestPreferencesPath() {
@@ -39,3 +45,23 @@ TEST(ChromeImporterUtilsTest, BasicTest) {
// We don't import theme, pre-installed extensions and installed by default.
EXPECT_EQ(2UL, extensions_list.size());
}
TEST(ChromeImporterUtilsTest, GetChromeUserDataFolder) {
EXPECT_EQ(GetChromeSourceProfiles(base::FilePath(FILE_PATH_LITERAL("fake"))),
base::JSONReader::Read(R"([{"id": "Default", "name": "Default" }])")
->GetList());
EXPECT_EQ(GetChromeSourceProfiles(GetTestProfilePath().Append(
base::FilePath::StringType(FILE_PATH_LITERAL("Local State")))),
base::JSONReader::Read(R"([
{"id": "Default", "name": "Profile 1"},
{"id": "Profile 2", "name": "Profile 2"}
])")
->GetList());
EXPECT_EQ(GetChromeSourceProfiles(
GetTestProfilePath().Append(base::FilePath::StringType(
FILE_PATH_LITERAL("No Profile Local State")))),
base::JSONReader::Read(R"([{"id": "Default", "name": "Default" }])")
->GetList());
}
@@ -20,6 +20,17 @@ base::FilePath GetChromeUserDataFolder() {
return result;
}
base::FilePath GetVivaldiUserDataFolder() {
base::FilePath result;
if (!base::PathService::Get(base::DIR_LOCAL_APP_DATA, &result))
return base::FilePath();
result = result.AppendASCII("Vivaldi");
result = result.AppendASCII("User Data");
return result;
}
base::FilePath GetCanaryUserDataFolder() {
base::FilePath result;
if (!base::PathService::Get(base::DIR_LOCAL_APP_DATA, &result))
+1
View File
@@ -16,5 +16,6 @@ constexpr char kChromeExtensionsPreferencesFile[] =
"Secure Preferences";
#endif
constexpr char kChromeExtensionsListPath[] = "extensions.settings";
constexpr char kChromeLocalStateFile[] = "Local State";
#endif // BRAVE_COMMON_IMPORTER_IMPORTER_CONSTANTS_H_
+1 -1
View File
@@ -32,7 +32,7 @@ constexpr inline auto kCollectedHistograms =
"Brave.Core.TabCount",
"Brave.Core.TorEverUsed",
"Brave.Core.WindowCount.2",
"Brave.Importer.ImporterSource",
"Brave.Importer.ImporterSource.2",
"Brave.NTP.CustomizeUsageStatus",
"Brave.NTP.NewTabsCreated",
"Brave.NTP.SponsoredImagesEnabled",
@@ -1,17 +0,0 @@
diff --git a/chrome/browser/importer/importer_uma.cc b/chrome/browser/importer/importer_uma.cc
index d858676745103908f16a41392c0da42c3683c555..ebdd7bdf2c893dacba09bea9c174ce4f5bb176eb 100644
--- a/chrome/browser/importer/importer_uma.cc
+++ b/chrome/browser/importer/importer_uma.cc
@@ -59,6 +59,12 @@ void LogImporterUseToMetrics(const std::string& metric_postfix,
case TYPE_BOOKMARKS_FILE:
metrics_type = IMPORTER_METRICS_BOOKMARKS_FILE;
break;
+ case TYPE_CHROME:
+ // TODO: Wire this up if we want to record metrics on users who import from Chrome
+ break;
+ case TYPE_EDGE_CHROMIUM:
+ // TODO: Wire this up if we want to record metrics on users who import from Chrome
+ break;
}
// Note: This leaks memory, which is the expected behavior as the factory
@@ -1,21 +0,0 @@
diff --git a/chrome/common/importer/importer_type.h b/chrome/common/importer/importer_type.h
index 783aeeb86b265b9abf6c1d5c8a77c726daea277d..e7f580e9136ffa37b24a08336ae7f8cdcee353f7 100644
--- a/chrome/common/importer/importer_type.h
+++ b/chrome/common/importer/importer_type.h
@@ -19,6 +19,8 @@ enum ImporterType {
TYPE_IE = 0,
#endif
// Value 1 was the (now deleted) Firefox 2 profile importer.
+ // We use it for the Chrome profile importer now.
+ TYPE_CHROME = 1,
TYPE_FIREFOX = 2,
#if BUILDFLAG(IS_MAC)
TYPE_SAFARI = 3,
@@ -28,6 +30,7 @@ enum ImporterType {
#if BUILDFLAG(IS_WIN)
TYPE_EDGE = 6,
#endif
+ TYPE_EDGE_CHROMIUM = 10
};
} // namespace importer
@@ -0,0 +1,18 @@
{
"profile":
{
"info_cache":
{
"Default":
{
"name": "Profile 1"
},
"Profile 2":
{
"name": "Profile 2"
}
}
}
}
@@ -0,0 +1,3 @@
{
}
@@ -17,7 +17,6 @@
#include "base/threading/thread_task_runner_handle.h"
#include "brave/utility/importer/brave_external_process_importer_bridge.h"
#include "brave/utility/importer/chrome_importer.h"
#include "brave/utility/importer/edge_importer.h"
#include "build/build_config.h"
#include "chrome/common/importer/profile_import.mojom.h"
#include "chrome/utility/importer/external_process_importer_bridge.h"
@@ -33,7 +32,9 @@ scoped_refptr<Importer> CreateImporterByType(importer::ImporterType type) {
case importer::TYPE_CHROME:
return new ChromeImporter();
case importer::TYPE_EDGE_CHROMIUM:
return new EdgeImporter();
return new ChromeImporter();
case importer::TYPE_VIVALDI:
return new ChromeImporter();
default:
NOTREACHED();
return nullptr;
-21
View File
@@ -1,21 +0,0 @@
/* Copyright (c) 2022 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef BRAVE_UTILITY_IMPORTER_EDGE_IMPORTER_H_
#define BRAVE_UTILITY_IMPORTER_EDGE_IMPORTER_H_
#include "brave/utility/importer/chrome_importer.h"
class EdgeImporter : public ChromeImporter {
public:
EdgeImporter() = default;
EdgeImporter(const EdgeImporter&) = delete;
EdgeImporter& operator=(const EdgeImporter&) = delete;
protected:
~EdgeImporter() override {}
};
#endif // BRAVE_UTILITY_IMPORTER_EDGE_IMPORTER_H_
-1
View File
@@ -16,7 +16,6 @@ if (!is_android) {
"//brave/utility/importer/brave_profile_import_impl.h",
"//brave/utility/importer/chrome_importer.cc",
"//brave/utility/importer/chrome_importer.h",
"//brave/utility/importer/edge_importer.h",
]
brave_utility_importer_deps += [