Skip to content

Commit

Permalink
added iOS part
Browse files Browse the repository at this point in the history
Signed-off-by: Vadym Struts <[email protected]>
  • Loading branch information
vadimstruts committed Oct 10, 2024
1 parent 58897f2 commit b54f416
Show file tree
Hide file tree
Showing 26 changed files with 571 additions and 319 deletions.
19 changes: 12 additions & 7 deletions browser/ui/webui/webcompat_reporter/webcompat_reporter_ui.cc
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ namespace {
constexpr char kUISourceHistogramName[] = "Brave.Webcompat.UISource";
constexpr int kMaxScreenshotPixelCount = 1280 * 720;

const std::string BoolToString(bool value) {
return value ? "true" : "false";
}

} // namespace

WebcompatReporterDOMHandler::WebcompatReporterDOMHandler(Profile* profile)
Expand All @@ -76,15 +80,16 @@ void WebcompatReporterDOMHandler::InitAdditionalParameters(Profile* profile) {
brave_vpn::BraveVpnService* vpn_service =
brave_vpn::BraveVpnServiceFactory::GetForProfile(profile);
if (vpn_service != nullptr) {
pending_report_.brave_vpn_connected = vpn_service->IsConnected();
pending_report_.brave_vpn_connected =
BoolToString(vpn_service->IsConnected());
}
#endif

PrefService* profile_prefs = profile->GetPrefs();
pending_report_.languages =
profile_prefs->GetString(language::prefs::kAcceptLanguages);
pending_report_.language_farbling =
profile_prefs->GetBoolean(brave_shields::prefs::kReduceLanguageEnabled);
pending_report_.language_farbling = BoolToString(
profile_prefs->GetBoolean(brave_shields::prefs::kReduceLanguageEnabled));
pending_report_.channel = brave::GetChannelName();
}

Expand Down Expand Up @@ -213,8 +218,8 @@ void WebcompatReporterDOMHandler::HandleSubmitReport(
submission_args.FindString(kFPBlockSettingField);
const base::Value* details_arg = submission_args.Find(kDetailsField);
const base::Value* contact_arg = submission_args.Find(kContactField);
pending_report_.shields_enabled =
submission_args.FindBool(kShieldsEnabledField).value_or(false);
pending_report_.shields_enabled = BoolToString(
submission_args.FindBool(kShieldsEnabledField).value_or(false));

const auto ui_source_int = submission_args.FindInt(kUISourceField);
if (ui_source_int) {
Expand All @@ -232,10 +237,10 @@ void WebcompatReporterDOMHandler::HandleSubmitReport(
pending_report_.fp_block_setting = *fp_block_setting_arg;
}
if (details_arg != nullptr) {
pending_report_.details = details_arg->Clone();
pending_report_.details = details_arg->GetString();
}
if (contact_arg != nullptr) {
pending_report_.contact = contact_arg->Clone();
pending_report_.contact = contact_arg->GetString();
}

auto* reporter_service =
Expand Down
2 changes: 2 additions & 0 deletions browser/webcompat_reporter/sources.gni
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
# You can obtain one at https://mozilla.org/MPL/2.0/. */

brave_browser_webcompat_reporter_sources = [
"//brave/browser/webcompat_reporter/webcompat_reporter_service_delegate.cc",
"//brave/browser/webcompat_reporter/webcompat_reporter_service_delegate.h",
"//brave/browser/webcompat_reporter/webcompat_reporter_service_factory.cc",
"//brave/browser/webcompat_reporter/webcompat_reporter_service_factory.h",
]
Expand Down
49 changes: 49 additions & 0 deletions browser/webcompat_reporter/webcompat_reporter_service_delegate.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/* Copyright (c) 2024 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 https://mozilla.org/MPL/2.0/. */

#include "brave/browser/webcompat_reporter/webcompat_reporter_service_delegate.h"

#include "brave/common/brave_channel_info.h"
#include "brave/components/brave_shields/content/browser/ad_block_service.h"
#include "brave/components/brave_shields/core/browser/ad_block_component_service_manager.h"
#include "brave/components/brave_shields/core/browser/filter_list_catalog_entry.h"

namespace webcompat_reporter {

WebcompatReporterServiceDelegateImpl::WebcompatReporterServiceDelegateImpl(
brave_shields::AdBlockService* adblock_service)
: adblock_service_(adblock_service) {}

WebcompatReporterServiceDelegateImpl::~WebcompatReporterServiceDelegateImpl() =
default;

std::optional<std::vector<std::string>>
WebcompatReporterServiceDelegateImpl::GetAdblockFilterListNames() const {
if (!adblock_service_) {
return std::nullopt;
}

std::vector<std::string> ad_block_list_names;
brave_shields::AdBlockComponentServiceManager* service_manager =
adblock_service_->component_service_manager();
CHECK(service_manager);
for (const brave_shields::FilterListCatalogEntry& entry :
service_manager->GetFilterListCatalog()) {
if (service_manager->IsFilterListEnabled(entry.uuid)) {
ad_block_list_names.push_back(entry.title);
}
}

if (ad_block_list_names.empty()) {
return std::nullopt;
}

return ad_block_list_names;
}

std::string WebcompatReporterServiceDelegateImpl::GetChannelName() const {
return brave::GetChannelName();
}
} // namespace webcompat_reporter
41 changes: 41 additions & 0 deletions browser/webcompat_reporter/webcompat_reporter_service_delegate.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/* Copyright (c) 2024 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 https://mozilla.org/MPL/2.0/. */

#ifndef BRAVE_BROWSER_WEBCOMPAT_REPORTER_WEBCOMPAT_REPORTER_SERVICE_DELEGATE_H_
#define BRAVE_BROWSER_WEBCOMPAT_REPORTER_WEBCOMPAT_REPORTER_SERVICE_DELEGATE_H_

#include <string>
#include <vector>

#include "brave/components/webcompat_reporter/browser/webcompat_reporter_service.h"

namespace brave_shields {
class AdBlockService;
} // namespace brave_shields

namespace webcompat_reporter {

class WebcompatReporterServiceDelegateImpl
: public WebcompatReporterService::WebCompatServiceDelegate {
public:
explicit WebcompatReporterServiceDelegateImpl(
brave_shields::AdBlockService* adblock_service);
WebcompatReporterServiceDelegateImpl(
const WebcompatReporterServiceDelegateImpl&) = delete;
WebcompatReporterServiceDelegateImpl& operator=(
const WebcompatReporterServiceDelegateImpl&) = delete;
~WebcompatReporterServiceDelegateImpl() override;

std::optional<std::vector<std::string>> GetAdblockFilterListNames()
const override;
std::string GetChannelName() const override;

private:
raw_ptr<brave_shields::AdBlockService> adblock_service_;
};

} // namespace webcompat_reporter

#endif // BRAVE_BROWSER_WEBCOMPAT_REPORTER_WEBCOMPAT_REPORTER_SERVICE_DELEGATE_H_
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@

#include "brave/browser/webcompat_reporter/webcompat_reporter_service_factory.h"

#include <memory>
#include <utility>

#include "base/no_destructor.h"
#include "brave/browser/brave_browser_process.h"
#include "brave/browser/webcompat_reporter/webcompat_reporter_service_delegate.h"
#include "brave/components/brave_shields/content/browser/ad_block_service.h"
#include "brave/components/webcompat_reporter/browser/webcompat_reporter_service.h"
#include "chrome/browser/browser_process.h"
Expand Down Expand Up @@ -51,10 +53,15 @@ WebcompatReporterServiceFactory::~WebcompatReporterServiceFactory() = default;
KeyedService* WebcompatReporterServiceFactory::BuildServiceInstanceFor(
content::BrowserContext* context) const {
auto* default_storage_partition = context->GetDefaultStoragePartition();
if (!default_storage_partition) {
return nullptr;
}

auto shared_url_loader_factory =
default_storage_partition->GetURLLoaderFactoryForBrowserProcess();
return new WebcompatReporterService(
g_brave_browser_process->ad_block_service(),
std::make_unique<WebcompatReporterServiceDelegateImpl>(
g_brave_browser_process->ad_block_service()),
g_browser_process->component_updater(), shared_url_loader_factory);
}

Expand Down
53 changes: 30 additions & 23 deletions components/webcompat_reporter/browser/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,6 @@ static_library("browser") {

deps = [
"//base",
"//brave/common",
"//brave/components/brave_referrals/browser",
"//brave/components/brave_shields/content/browser",
"//brave/components/brave_shields/core/browser",
"//brave/components/brave_shields/core/common",
"//brave/components/brave_shields/core/common:mojom",
Expand All @@ -28,31 +25,41 @@ static_library("browser") {
"//brave/components/version_info",
"//brave/components/webcompat_reporter/buildflags",
"//brave/components/webcompat_reporter/common:mojom",
"//content/public/browser",
"//net",
"//services/network/public/cpp",
]

if (!is_ios) {
deps += [
"//brave/common",
"//brave/components/brave_referrals/browser",
"//brave/components/brave_shields/content/browser",
"//content/public/browser",
]
}
}

source_set("unittests") {
testonly = true
if (!is_ios) {
source_set("unittests") {
testonly = true

sources = [
"webcompat_report_uploader_unittest.cc",
"webcompat_reporter_service_unittest.cc",
]
sources = [
"webcompat_report_uploader_unittest.cc",
"webcompat_reporter_service_unittest.cc",
]

deps = [
":browser",
"//base",
"//base/test:test_support",
"//brave/components/brave_shields/content/browser",
"//brave/components/brave_stats/browser",
"//brave/components/version_info",
"//brave/components/webcompat_reporter/common:mojom",
"//chrome/test:test_support",
"//components/component_updater:test_support",
"//testing/gtest",
"//url",
]
deps = [
":browser",
"//base",
"//base/test:test_support",
"//brave/components/brave_shields/content/browser",
"//brave/components/brave_stats/browser",
"//brave/components/version_info",
"//brave/components/webcompat_reporter/common:mojom",
"//chrome/test:test_support",
"//components/component_updater:test_support",
"//testing/gtest",
"//url",
]
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,8 @@ Report& Report::operator=(const Report& other) {
languages = other.languages;
language_farbling = other.language_farbling;
brave_vpn_connected = other.brave_vpn_connected;
SetOptValue(details, other.details);
SetOptValue(contact, other.contact);
details = other.details;
contact = other.contact;
SetOptValue(ad_block_components, other.ad_block_components);
screenshot_png = other.screenshot_png;
}
Expand Down Expand Up @@ -100,7 +100,7 @@ void WebcompatReportUploader::SubmitReport(const Report& report) {
}

if (report.details) {
report_details_dict.Set(kDetailsField, report.details.value().Clone());
report_details_dict.Set(kDetailsField, report.details.value());
}

if (report.ad_block_components) {
Expand All @@ -109,7 +109,7 @@ void WebcompatReportUploader::SubmitReport(const Report& report) {
}

if (report.contact) {
report_details_dict.Set(kContactField, report.contact.value().Clone());
report_details_dict.Set(kContactField, report.contact.value());
}

if (report.channel) {
Expand Down Expand Up @@ -192,7 +192,9 @@ void WebcompatReportUploader::CreateAndStartURLLoader(
const GURL& upload_url,
const std::string& content_type,
const std::string& post_data) {
#if !BUILDFLAG(IS_IOS)
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
#endif // !BUILDFLAG(IS_IOS)

auto resource_request = std::make_unique<network::ResourceRequest>();
// upload_url only includes the origin and path, and not the fragment or
Expand Down Expand Up @@ -235,7 +237,9 @@ void WebcompatReportUploader::CreateAndStartURLLoader(

void WebcompatReportUploader::OnSimpleURLLoaderComplete(
std::unique_ptr<std::string> response_body) {
#if !BUILDFLAG(IS_IOS)
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
#endif // !BUILDFLAG(IS_IOS)

bool success = !!response_body;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,15 @@ struct Report {
std::optional<std::string> brave_version;
std::optional<std::string> channel;
std::optional<GURL> report_url;
std::optional<bool> shields_enabled;
std::optional<std::string> shields_enabled;
std::optional<std::string> ad_block_setting;
std::optional<std::string> fp_block_setting;
std::optional<std::string> ad_block_list_names;
std::optional<std::string> languages;
std::optional<bool> language_farbling;
std::optional<bool> brave_vpn_connected;
std::optional<base::Value> details;
std::optional<base::Value> contact;
std::optional<std::string> language_farbling;
std::optional<std::string> brave_vpn_connected;
std::optional<std::string> details;
std::optional<std::string> contact;
std::optional<base::Value> ad_block_components;

std::optional<std::vector<unsigned char>> screenshot_png;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,9 @@ TEST_F(WebcompatReportUploaderUnitTest, GenerateReport) {

report.channel = "dev";
report.brave_version = "1.231.45";
report.shields_enabled = true;
report.language_farbling = true;
report.brave_vpn_connected = true;
report.shields_enabled = "true";
report.language_farbling = "true";
report.brave_vpn_connected = "true";
report.ad_block_setting = "ad_block_setting";
report.fp_block_setting = "fp_block_setting";
report.ad_block_list_names = "ad_block_list_names";
Expand All @@ -107,8 +107,8 @@ TEST_F(WebcompatReportUploaderUnitTest, GenerateReport) {
test_dict.Set("key1", "val1");
test_dict.Set("key1", "val1");
report.ad_block_components = base::Value(test_dict.Clone());
report.details = base::Value(test_dict.Clone());
report.contact = base::Value(test_dict.Clone());
report.details = "details";
report.contact = "contact";
report.report_url = GURL("https://abc.url/p1/p2");

std::string test_dict_string;
Expand All @@ -123,24 +123,24 @@ TEST_F(WebcompatReportUploaderUnitTest, GenerateReport) {
"adBlockComponentsInfo": %s,
"adBlockLists": "%s",
"adBlockSetting": "%s",
"additionalDetails": %s,
"additionalDetails": "%s",
"api_key": "%s",
"braveVPNEnabled": %s,
"braveVPNEnabled": "%s",
"channel": "%s",
"contactInfo": %s,
"contactInfo": "%s",
"domain": "%s",
"fpBlockSetting": "%s",
"languageFarblingEnabled": %s,
"languageFarblingEnabled": "%s",
"languages": "%s",
"shieldsEnabled": %s,
"shieldsEnabled": "%s",
"url": "%s",
"version": "%s"
})",
test_dict_string.c_str(), report.ad_block_list_names->c_str(),
report.ad_block_setting->c_str(), test_dict_string.c_str(),
report.ad_block_setting->c_str(), report.details->c_str(),
brave_stats::GetAPIKey().c_str(),
report.brave_vpn_connected ? "true" : "false",
report.channel->c_str(), test_dict_string.c_str(),
report.channel->c_str(), report.contact->c_str(),
url::Origin::Create(report.report_url.value()).Serialize().c_str(),
report.fp_block_setting->c_str(),
report.language_farbling ? "true" : "false",
Expand Down
Loading

0 comments on commit b54f416

Please sign in to comment.