Skip to content

Commit

Permalink
feat: allow setting of global fallback user agent
Browse files Browse the repository at this point in the history
  • Loading branch information
MarshallOfSound committed May 2, 2019
1 parent 6b16695 commit c5a07d8
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 34 deletions.
30 changes: 27 additions & 3 deletions atom/app/atom_content_client.cc
Expand Up @@ -173,6 +173,14 @@ void ConvertStringWithSeparatorToVector(std::vector<std::string>* vec,
base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
}

std::string RemoveWhitespace(const std::string& str) {
std::string trimmed;
if (base::RemoveChars(str, " ", &trimmed))
return trimmed;
else
return str;
}

} // namespace

AtomContentClient::AtomContentClient() {}
Expand All @@ -184,9 +192,25 @@ std::string AtomContentClient::GetProduct() const {
}

std::string AtomContentClient::GetUserAgent() const {
return content::BuildUserAgentFromProduct("Chrome/" CHROME_VERSION_STRING
" " ATOM_PRODUCT_NAME
"/" ATOM_VERSION_STRING);
if (user_agent_override_.empty()) {
auto* browser = Browser::Get();
std::string name = RemoveWhitespace(browser->GetName());
std::string user_agent;
if (name == ATOM_PRODUCT_NAME) {
user_agent = "Chrome/" CHROME_VERSION_STRING " " ATOM_PRODUCT_NAME
"/" ATOM_VERSION_STRING;
} else {
user_agent = base::StringPrintf(
"%s/%s Chrome/%s " ATOM_PRODUCT_NAME "/" ATOM_VERSION_STRING,
name.c_str(), browser->GetVersion().c_str(), CHROME_VERSION_STRING);
}
return content::BuildUserAgentFromProduct(user_agent);
}
return user_agent_override_;
}

void AtomContentClient::SetUserAgent(const std::string& user_agent) {
user_agent_override_ = user_agent;
}

base::string16 AtomContentClient::GetLocalizedString(int message_id) const {
Expand Down
6 changes: 5 additions & 1 deletion atom/app/atom_content_client.h
Expand Up @@ -18,10 +18,12 @@ class AtomContentClient : public brightray::ContentClient {
AtomContentClient();
~AtomContentClient() override;

std::string GetUserAgent() const override;
void SetUserAgent(const std::string& user_agent);

protected:
// content::ContentClient:
std::string GetProduct() const override;
std::string GetUserAgent() const override;
base::string16 GetLocalizedString(int message_id) const override;
void AddAdditionalSchemes(Schemes* schemes) override;
void AddPepperPlugins(
Expand All @@ -31,6 +33,8 @@ class AtomContentClient : public brightray::ContentClient {
std::vector<media::CdmHostFilePath>* cdm_host_file_paths) override;

private:
std::string user_agent_override_ = "";

DISALLOW_COPY_AND_ASSIGN(AtomContentClient);
};

Expand Down
14 changes: 14 additions & 0 deletions atom/browser/api/atom_api_app.cc
Expand Up @@ -1236,6 +1236,18 @@ void App::EnableMixedSandbox(mate::Arguments* args) {
command_line->AppendSwitch(switches::kEnableMixedSandbox);
}

void App::SetUserAgentFallback(const std::string& user_agent) {
AtomContentClient* client =
static_cast<AtomContentClient*>(GetContentClient());
client->SetUserAgent(user_agent);
}

std::string App::GetUserAgentFallback() {
AtomContentClient* client =
static_cast<AtomContentClient*>(GetContentClient());
return client->GetUserAgent();
}

#if defined(OS_MACOSX)
bool App::MoveToApplicationsFolder(mate::Arguments* args) {
return ui::cocoa::AtomBundleMover::Move(args);
Expand Down Expand Up @@ -1342,6 +1354,8 @@ void App::BuildPrototype(v8::Isolate* isolate,
.SetMethod("startAccessingSecurityScopedResource",
&App::StartAccessingSecurityScopedResource)
#endif
.SetProperty("userAgentFallback", &App::GetUserAgentFallback,
&App::SetUserAgentFallback)
.SetMethod("enableSandbox", &App::EnableSandbox)
.SetMethod("enableMixedSandbox", &App::EnableMixedSandbox);
}
Expand Down
2 changes: 2 additions & 0 deletions atom/browser/api/atom_api_app.h
Expand Up @@ -205,6 +205,8 @@ class App : public AtomBrowserClient::Delegate,
const std::string& info_type);
void EnableSandbox(mate::Arguments* args);
void EnableMixedSandbox(mate::Arguments* args);
void SetUserAgentFallback(const std::string& user_agent);
std::string GetUserAgentFallback();

#if defined(OS_MACOSX)
bool MoveToApplicationsFolder(mate::Arguments* args);
Expand Down
24 changes: 3 additions & 21 deletions atom/browser/atom_browser_context.cc
Expand Up @@ -51,14 +51,6 @@ namespace atom {

namespace {

std::string RemoveWhitespace(const std::string& str) {
std::string trimmed;
if (base::RemoveChars(str, " ", &trimmed))
return trimmed;
else
return str;
}

// Convert string to lower case and escape it.
std::string MakePartitionName(const std::string& input) {
return net::EscapePath(base::ToLowerASCII(input));
Expand All @@ -78,19 +70,9 @@ AtomBrowserContext::AtomBrowserContext(const std::string& partition,
storage_policy_(new SpecialStoragePolicy),
in_memory_(in_memory),
weak_factory_(this) {
// Construct user agent string.
Browser* browser = Browser::Get();
std::string name = RemoveWhitespace(browser->GetName());
std::string user_agent;
if (name == ATOM_PRODUCT_NAME) {
user_agent = "Chrome/" CHROME_VERSION_STRING " " ATOM_PRODUCT_NAME
"/" ATOM_VERSION_STRING;
} else {
user_agent = base::StringPrintf(
"%s/%s Chrome/%s " ATOM_PRODUCT_NAME "/" ATOM_VERSION_STRING,
name.c_str(), browser->GetVersion().c_str(), CHROME_VERSION_STRING);
}
user_agent_ = content::BuildUserAgentFromProduct(user_agent);
AtomContentClient* client =
static_cast<AtomContentClient*>(GetContentClient());
user_agent_ = client->GetUserAgent();

// Read options.
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
Expand Down
8 changes: 0 additions & 8 deletions brightray/common/content_client.cc
Expand Up @@ -20,10 +20,6 @@ std::string GetProductInternal() {
GetApplicationVersion().c_str());
}

std::string GetBrightrayUserAgent() {
return content::BuildUserAgentFromProduct(GetProductInternal());
}

ContentClient::ContentClient() {}

ContentClient::~ContentClient() {}
Expand All @@ -32,10 +28,6 @@ std::string ContentClient::GetProduct() const {
return GetProductInternal();
}

std::string ContentClient::GetUserAgent() const {
return GetBrightrayUserAgent();
}

base::string16 ContentClient::GetLocalizedString(int message_id) const {
return l10n_util::GetStringUTF16(message_id);
}
Expand Down
1 change: 0 additions & 1 deletion brightray/common/content_client.h
Expand Up @@ -21,7 +21,6 @@ class ContentClient : public content::ContentClient {

private:
std::string GetProduct() const override;
std::string GetUserAgent() const override;
base::string16 GetLocalizedString(int message_id) const override;
base::StringPiece GetDataResource(int resource_id,
ui::ScaleFactor) const override;
Expand Down

0 comments on commit c5a07d8

Please sign in to comment.