chrome: Support configuration of user agent and locale (see issue #2969)
This change adds support for CefSettings and command-line configuration of user_agent, user_agent_product (formerly product_version) and locale.
This commit is contained in:
parent
328de502ac
commit
c03a6f4386
|
@ -42,13 +42,13 @@
|
||||||
// way that may cause binary incompatibility with other builds. The universal
|
// way that may cause binary incompatibility with other builds. The universal
|
||||||
// hash value will change if any platform is affected whereas the platform hash
|
// hash value will change if any platform is affected whereas the platform hash
|
||||||
// values will change only if that particular platform is affected.
|
// values will change only if that particular platform is affected.
|
||||||
#define CEF_API_HASH_UNIVERSAL "d128245052a84dd90cd38fed0e6be65824d37de5"
|
#define CEF_API_HASH_UNIVERSAL "d026196d35d8894a836ab3a3d033b84195cdb835"
|
||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
#define CEF_API_HASH_PLATFORM "9b1a4706bf1fca26d542aa5f8b05d222f483c872"
|
#define CEF_API_HASH_PLATFORM "4150bd26e7bf639a9b1f3e5860af8c76eeae8570"
|
||||||
#elif defined(OS_MAC)
|
#elif defined(OS_MAC)
|
||||||
#define CEF_API_HASH_PLATFORM "0038a822915e3567f2434053ebc49723fe6951d5"
|
#define CEF_API_HASH_PLATFORM "5cc32f88bd134410eff86b21095138b339d572f2"
|
||||||
#elif defined(OS_LINUX)
|
#elif defined(OS_LINUX)
|
||||||
#define CEF_API_HASH_PLATFORM "66613a535ec6a1aafce6ece8e98cd3876f79633b"
|
#define CEF_API_HASH_PLATFORM "b227b3fdd6142a9d8ff0f2252a71425f15960800"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -304,9 +304,9 @@ typedef struct _cef_settings_t {
|
||||||
// Value that will be inserted as the product portion of the default
|
// Value that will be inserted as the product portion of the default
|
||||||
// User-Agent string. If empty the Chromium product version will be used. If
|
// User-Agent string. If empty the Chromium product version will be used. If
|
||||||
// |userAgent| is specified this value will be ignored. Also configurable
|
// |userAgent| is specified this value will be ignored. Also configurable
|
||||||
// using the "product-version" command-line switch.
|
// using the "user-agent-product" command-line switch.
|
||||||
///
|
///
|
||||||
cef_string_t product_version;
|
cef_string_t user_agent_product;
|
||||||
|
|
||||||
///
|
///
|
||||||
// The locale string that will be passed to WebKit. If empty the default
|
// The locale string that will be passed to WebKit. If empty the default
|
||||||
|
|
|
@ -548,7 +548,7 @@ struct CefSettingsTraits {
|
||||||
cef_string_clear(&s->root_cache_path);
|
cef_string_clear(&s->root_cache_path);
|
||||||
cef_string_clear(&s->user_data_path);
|
cef_string_clear(&s->user_data_path);
|
||||||
cef_string_clear(&s->user_agent);
|
cef_string_clear(&s->user_agent);
|
||||||
cef_string_clear(&s->product_version);
|
cef_string_clear(&s->user_agent_product);
|
||||||
cef_string_clear(&s->locale);
|
cef_string_clear(&s->locale);
|
||||||
cef_string_clear(&s->log_file);
|
cef_string_clear(&s->log_file);
|
||||||
cef_string_clear(&s->javascript_flags);
|
cef_string_clear(&s->javascript_flags);
|
||||||
|
@ -587,8 +587,8 @@ struct CefSettingsTraits {
|
||||||
|
|
||||||
cef_string_set(src->user_agent.str, src->user_agent.length,
|
cef_string_set(src->user_agent.str, src->user_agent.length,
|
||||||
&target->user_agent, copy);
|
&target->user_agent, copy);
|
||||||
cef_string_set(src->product_version.str, src->product_version.length,
|
cef_string_set(src->user_agent_product.str, src->user_agent_product.length,
|
||||||
&target->product_version, copy);
|
&target->user_agent_product, copy);
|
||||||
cef_string_set(src->locale.str, src->locale.length, &target->locale, copy);
|
cef_string_set(src->locale.str, src->locale.length, &target->locale, copy);
|
||||||
|
|
||||||
cef_string_set(src->log_file.str, src->log_file.length, &target->log_file,
|
cef_string_set(src->log_file.str, src->log_file.length, &target->log_file,
|
||||||
|
|
|
@ -695,9 +695,9 @@ void AlloyContentBrowserClient::AppendExtraCommandLineSwitches(
|
||||||
switches::kLocalesDirPath,
|
switches::kLocalesDirPath,
|
||||||
switches::kLogFile,
|
switches::kLogFile,
|
||||||
switches::kLogSeverity,
|
switches::kLogSeverity,
|
||||||
switches::kProductVersion,
|
|
||||||
switches::kResourcesDirPath,
|
switches::kResourcesDirPath,
|
||||||
embedder_support::kUserAgent,
|
embedder_support::kUserAgent,
|
||||||
|
switches::kUserAgentProductAndVersion,
|
||||||
};
|
};
|
||||||
command_line->CopySwitchesFrom(*browser_cmd, kSwitchNames,
|
command_line->CopySwitchesFrom(*browser_cmd, kSwitchNames,
|
||||||
base::size(kSwitchNames));
|
base::size(kSwitchNames));
|
||||||
|
|
|
@ -91,6 +91,16 @@ void ChromeContentBrowserClientCef::AppendExtraCommandLineSwitches(
|
||||||
|
|
||||||
const base::CommandLine* browser_cmd = base::CommandLine::ForCurrentProcess();
|
const base::CommandLine* browser_cmd = base::CommandLine::ForCurrentProcess();
|
||||||
|
|
||||||
|
{
|
||||||
|
// Propagate the following switches to all command lines (along with any
|
||||||
|
// associated values) if present in the browser command line.
|
||||||
|
static const char* const kSwitchNames[] = {
|
||||||
|
switches::kUserAgentProductAndVersion,
|
||||||
|
};
|
||||||
|
command_line->CopySwitchesFrom(*browser_cmd, kSwitchNames,
|
||||||
|
base::size(kSwitchNames));
|
||||||
|
}
|
||||||
|
|
||||||
const std::string& process_type =
|
const std::string& process_type =
|
||||||
command_line->GetSwitchValueASCII(switches::kProcessType);
|
command_line->GetSwitchValueASCII(switches::kProcessType);
|
||||||
if (process_type == switches::kRendererProcess) {
|
if (process_type == switches::kRendererProcess) {
|
||||||
|
|
|
@ -150,9 +150,10 @@ bool AlloyMainDelegate::BasicStartupComplete(int* exit_code) {
|
||||||
if (settings_->user_agent.length > 0) {
|
if (settings_->user_agent.length > 0) {
|
||||||
command_line->AppendSwitchASCII(embedder_support::kUserAgent,
|
command_line->AppendSwitchASCII(embedder_support::kUserAgent,
|
||||||
CefString(&settings_->user_agent));
|
CefString(&settings_->user_agent));
|
||||||
} else if (settings_->product_version.length > 0) {
|
} else if (settings_->user_agent_product.length > 0) {
|
||||||
command_line->AppendSwitchASCII(switches::kProductVersion,
|
command_line->AppendSwitchASCII(
|
||||||
CefString(&settings_->product_version));
|
switches::kUserAgentProductAndVersion,
|
||||||
|
CefString(&settings_->user_agent_product));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings_->locale.length > 0) {
|
if (settings_->locale.length > 0) {
|
||||||
|
|
|
@ -126,6 +126,9 @@ const char kEnableChromeRuntime[] = "enable-chrome-runtime";
|
||||||
// using the Chrome runtime.
|
// using the Chrome runtime.
|
||||||
const char kDisableChromeLoginPrompt[] = "disable-chrome-login-prompt";
|
const char kDisableChromeLoginPrompt[] = "disable-chrome-login-prompt";
|
||||||
|
|
||||||
|
// Override the product component of the default User-Agent string.
|
||||||
|
const char kUserAgentProductAndVersion[] = "user-agent-product";
|
||||||
|
|
||||||
#if defined(OS_MAC)
|
#if defined(OS_MAC)
|
||||||
// Path to the framework directory.
|
// Path to the framework directory.
|
||||||
const char kFrameworkDirPath[] = "framework-dir-path";
|
const char kFrameworkDirPath[] = "framework-dir-path";
|
||||||
|
|
|
@ -55,6 +55,7 @@ extern const char kDisableNewBrowserInfoTimeout[];
|
||||||
extern const char kDevToolsProtocolLogFile[];
|
extern const char kDevToolsProtocolLogFile[];
|
||||||
extern const char kEnableChromeRuntime[];
|
extern const char kEnableChromeRuntime[];
|
||||||
extern const char kDisableChromeLoginPrompt[];
|
extern const char kDisableChromeLoginPrompt[];
|
||||||
|
extern const char kUserAgentProductAndVersion[];
|
||||||
|
|
||||||
#if defined(OS_MAC)
|
#if defined(OS_MAC)
|
||||||
extern const char kFrameworkDirPath[];
|
extern const char kFrameworkDirPath[];
|
||||||
|
|
|
@ -16,8 +16,10 @@
|
||||||
#include "base/command_line.h"
|
#include "base/command_line.h"
|
||||||
#include "base/lazy_instance.h"
|
#include "base/lazy_instance.h"
|
||||||
#include "chrome/common/chrome_switches.h"
|
#include "chrome/common/chrome_switches.h"
|
||||||
|
#include "components/embedder_support/switches.h"
|
||||||
#include "content/public/common/content_switches.h"
|
#include "content/public/common/content_switches.h"
|
||||||
#include "sandbox/policy/switches.h"
|
#include "sandbox/policy/switches.h"
|
||||||
|
#include "ui/base/ui_base_switches.h"
|
||||||
|
|
||||||
#if defined(OS_MAC)
|
#if defined(OS_MAC)
|
||||||
#include "libcef/common/util_mac.h"
|
#include "libcef/common/util_mac.h"
|
||||||
|
@ -79,6 +81,22 @@ bool ChromeMainDelegateCef::BasicStartupComplete(int* exit_code) {
|
||||||
command_line->AppendSwitch(sandbox::policy::switches::kNoSandbox);
|
command_line->AppendSwitch(sandbox::policy::switches::kNoSandbox);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (settings_->user_agent.length > 0) {
|
||||||
|
command_line->AppendSwitchASCII(embedder_support::kUserAgent,
|
||||||
|
CefString(&settings_->user_agent));
|
||||||
|
} else if (settings_->user_agent_product.length > 0) {
|
||||||
|
command_line->AppendSwitchASCII(
|
||||||
|
switches::kUserAgentProductAndVersion,
|
||||||
|
CefString(&settings_->user_agent_product));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (settings_->locale.length > 0) {
|
||||||
|
command_line->AppendSwitchASCII(switches::kLang,
|
||||||
|
CefString(&settings_->locale));
|
||||||
|
} else if (!command_line->HasSwitch(switches::kLang)) {
|
||||||
|
command_line->AppendSwitchASCII(switches::kLang, "en-US");
|
||||||
|
}
|
||||||
|
|
||||||
if (settings_->javascript_flags.length > 0) {
|
if (settings_->javascript_flags.length > 0) {
|
||||||
command_line->AppendSwitchASCII(switches::kJavaScriptFlags,
|
command_line->AppendSwitchASCII(switches::kJavaScriptFlags,
|
||||||
CefString(&settings_->javascript_flags));
|
CefString(&settings_->javascript_flags));
|
||||||
|
|
|
@ -1,22 +1,24 @@
|
||||||
diff --git components/embedder_support/user_agent_utils.cc components/embedder_support/user_agent_utils.cc
|
diff --git components/embedder_support/user_agent_utils.cc components/embedder_support/user_agent_utils.cc
|
||||||
index 569518f209aeb..a4944e7060570 100644
|
index 569518f209aeb..0cf7c2cc23c43 100644
|
||||||
--- components/embedder_support/user_agent_utils.cc
|
--- components/embedder_support/user_agent_utils.cc
|
||||||
+++ components/embedder_support/user_agent_utils.cc
|
+++ components/embedder_support/user_agent_utils.cc
|
||||||
@@ -7,6 +7,7 @@
|
@@ -7,6 +7,7 @@
|
||||||
#include "base/command_line.h"
|
#include "base/command_line.h"
|
||||||
#include "base/strings/strcat.h"
|
#include "base/strings/strcat.h"
|
||||||
#include "build/branding_buildflags.h"
|
#include "build/branding_buildflags.h"
|
||||||
+#include "chrome/common/chrome_switches.h"
|
+#include "cef/libcef/common/cef_switches.h"
|
||||||
#include "components/embedder_support/switches.h"
|
#include "components/embedder_support/switches.h"
|
||||||
#include "components/version_info/version_info.h"
|
#include "components/version_info/version_info.h"
|
||||||
#include "content/public/browser/web_contents.h"
|
#include "content/public/browser/web_contents.h"
|
||||||
@@ -20,6 +21,10 @@
|
@@ -20,6 +21,12 @@
|
||||||
namespace embedder_support {
|
namespace embedder_support {
|
||||||
|
|
||||||
std::string GetProduct() {
|
std::string GetProduct() {
|
||||||
+ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
|
+ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
|
||||||
+ if (command_line->HasSwitch(switches::kProductVersion))
|
+ if (command_line->HasSwitch(switches::kUserAgentProductAndVersion)) {
|
||||||
+ return command_line->GetSwitchValueASCII(switches::kProductVersion);
|
+ return command_line->GetSwitchValueASCII(
|
||||||
|
+ switches::kUserAgentProductAndVersion);
|
||||||
|
+ }
|
||||||
+
|
+
|
||||||
return version_info::GetProductNameAndVersionForUserAgent();
|
return version_info::GetProductNameAndVersionForUserAgent();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue