mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2024-12-24 16:51:38 +01:00
Fix command-line override of the User-Agent product component (see issue #2622).
When the NetworkService is enabled the U-A string is configured via SystemNetworkContextManager::CreateDefaultNetworkContextParams, which calls chrome_content_browser_client.cc GetUserAgent(). This change modifies the Chrome implementation to match CEF, so that the U-A product component can still be overridden via the `--product-version` command-line flag. To test: Verify that chrome://version, navigator.userAgent (JS executed from DevTools console) and network requests (headers shown in DevTools Network tab) show the expected User-Agent value in the following cases: - Running `cefclient --enable-network-service --user-agent="<value>"` - Running `cefclient --enable-network-service --product-version="<value>"`
This commit is contained in:
parent
b1018ad64b
commit
4592cba19f
@ -56,6 +56,7 @@
|
|||||||
#include "base/threading/thread_restrictions.h"
|
#include "base/threading/thread_restrictions.h"
|
||||||
#include "cef/grit/cef_resources.h"
|
#include "cef/grit/cef_resources.h"
|
||||||
#include "chrome/browser/browser_process.h"
|
#include "chrome/browser/browser_process.h"
|
||||||
|
#include "chrome/browser/chrome_content_browser_client.h"
|
||||||
#include "chrome/browser/chrome_service.h"
|
#include "chrome/browser/chrome_service.h"
|
||||||
#include "chrome/browser/net/system_network_context_manager.h"
|
#include "chrome/browser/net/system_network_context_manager.h"
|
||||||
#include "chrome/browser/plugins/plugin_info_host_impl.h"
|
#include "chrome/browser/plugins/plugin_info_host_impl.h"
|
||||||
@ -1371,27 +1372,19 @@ bool CefContentBrowserClient::HandleExternalProtocol(
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::string CefContentBrowserClient::GetProduct() const {
|
std::string CefContentBrowserClient::GetProduct() const {
|
||||||
const base::CommandLine* command_line =
|
// Match the logic in chrome_content_browser_client.cc GetProduct() which
|
||||||
base::CommandLine::ForCurrentProcess();
|
// will be called when the NetworkService is enabled.
|
||||||
if (command_line->HasSwitch(switches::kProductVersion))
|
return ::GetProduct();
|
||||||
return command_line->GetSwitchValueASCII(switches::kProductVersion);
|
|
||||||
|
|
||||||
return GetChromeProduct();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CefContentBrowserClient::GetChromeProduct() const {
|
std::string CefContentBrowserClient::GetChromeProduct() const {
|
||||||
return base::StringPrintf("Chrome/%d.%d.%d.%d", CHROME_VERSION_MAJOR,
|
return version_info::GetProductNameAndVersionForUserAgent();
|
||||||
CHROME_VERSION_MINOR, CHROME_VERSION_BUILD,
|
|
||||||
CHROME_VERSION_PATCH);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CefContentBrowserClient::GetUserAgent() const {
|
std::string CefContentBrowserClient::GetUserAgent() const {
|
||||||
const base::CommandLine* command_line =
|
// Match the logic in chrome_content_browser_client.cc GetUserAgent() which
|
||||||
base::CommandLine::ForCurrentProcess();
|
// will be called when the NetworkService is enabled.
|
||||||
if (command_line->HasSwitch(switches::kUserAgent))
|
return ::GetUserAgent();
|
||||||
return command_line->GetSwitchValueASCII(switches::kUserAgent);
|
|
||||||
|
|
||||||
return content::BuildUserAgentFromProduct(GetProduct());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
blink::UserAgentMetadata CefContentBrowserClient::GetUserAgentMetadata() const {
|
blink::UserAgentMetadata CefContentBrowserClient::GetUserAgentMetadata() const {
|
||||||
|
@ -244,6 +244,12 @@ patches = [
|
|||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2613
|
# https://bitbucket.org/chromiumembedded/cef/issues/2613
|
||||||
'name': 'chrome_browser_net_export',
|
'name': 'chrome_browser_net_export',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
# Support override of the User-Agent product component when NetworkService
|
||||||
|
# is enabled.
|
||||||
|
# https://bitbucket.org/chromiumembedded/cef/issues/2622
|
||||||
|
'name': 'chrome_browser_product_override',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
# Allow CEF to share Chrome plugin loading code.
|
# Allow CEF to share Chrome plugin loading code.
|
||||||
'name': 'chrome_plugins',
|
'name': 'chrome_plugins',
|
||||||
|
37
patch/patches/chrome_browser_product_override.patch
Normal file
37
patch/patches/chrome_browser_product_override.patch
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
diff --git chrome/browser/chrome_content_browser_client.cc chrome/browser/chrome_content_browser_client.cc
|
||||||
|
index 52a1a31ee131..5a1e29fec9c8 100644
|
||||||
|
--- chrome/browser/chrome_content_browser_client.cc
|
||||||
|
+++ chrome/browser/chrome_content_browser_client.cc
|
||||||
|
@@ -1033,12 +1033,16 @@ void LaunchURL(
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+} // namespace
|
||||||
|
+
|
||||||
|
std::string GetProduct() {
|
||||||
|
+ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
|
||||||
|
+ if (command_line->HasSwitch(switches::kProductVersion))
|
||||||
|
+ return command_line->GetSwitchValueASCII(switches::kProductVersion);
|
||||||
|
+
|
||||||
|
return version_info::GetProductNameAndVersionForUserAgent();
|
||||||
|
}
|
||||||
|
|
||||||
|
-} // namespace
|
||||||
|
-
|
||||||
|
std::string GetUserAgent() {
|
||||||
|
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
|
||||||
|
if (command_line->HasSwitch(switches::kUserAgent)) {
|
||||||
|
diff --git chrome/browser/chrome_content_browser_client.h chrome/browser/chrome_content_browser_client.h
|
||||||
|
index cbf1e2218e91..a42d2a4d71bb 100644
|
||||||
|
--- chrome/browser/chrome_content_browser_client.h
|
||||||
|
+++ chrome/browser/chrome_content_browser_client.h
|
||||||
|
@@ -77,7 +77,8 @@ class Origin;
|
||||||
|
|
||||||
|
class ChromeSerialDelegate;
|
||||||
|
|
||||||
|
-// Returns the user agent of Chrome.
|
||||||
|
+// Returns the product and user agent of Chrome.
|
||||||
|
+std::string GetProduct();
|
||||||
|
std::string GetUserAgent();
|
||||||
|
|
||||||
|
blink::UserAgentMetadata GetUserAgentMetadata();
|
Loading…
Reference in New Issue
Block a user