Index: webkit/glue/webkit_glue.cc |
diff --git a/webkit/glue/webkit_glue.cc b/webkit/glue/webkit_glue.cc |
index cb8d05f947b9d81becfe087d950b4cc1e1a09137..1d8930577160eccdc754a36141b5232720b21494 100644 |
--- a/webkit/glue/webkit_glue.cc |
+++ b/webkit/glue/webkit_glue.cc |
@@ -343,13 +343,11 @@ class UserAgentState { |
UserAgentState(); |
~UserAgentState(); |
- void Set(const std::string& user_agent); |
+ void Set(const std::string& user_agent, bool overriding); |
const std::string& Get(const GURL& url) const; |
private: |
mutable std::string user_agent_; |
- // The UA string when we're pretending to be Windows Chrome. |
- mutable std::string mimic_windows_user_agent_; |
// The UA string when we're pretending to be Mac Safari. |
mutable std::string mimic_mac_safari_user_agent_; |
@@ -369,11 +367,18 @@ UserAgentState::UserAgentState() |
UserAgentState::~UserAgentState() { |
} |
-void UserAgentState::Set(const std::string& user_agent) { |
+void UserAgentState::Set(const std::string& user_agent, bool overriding) { |
base::AutoLock auto_lock(lock_); |
+ if (user_agent == user_agent_) { |
+ // We allow the user agent to be set multiple times as long as it |
+ // is set to the same value, in order to simplify unit testing |
+ // given g_user_agent is a global. |
+ return; |
+ } |
+ DCHECK(!user_agent.empty()); |
DCHECK(!user_agent_requested_) << "Setting the user agent after someone has " |
"already requested it can result in unexpected behavior."; |
- user_agent_is_overridden_ = true; |
+ user_agent_is_overridden_ = overriding; |
user_agent_ = user_agent; |
} |
@@ -381,21 +386,10 @@ const std::string& UserAgentState::Get(const GURL& url) const { |
base::AutoLock auto_lock(lock_); |
user_agent_requested_ = true; |
- if (user_agent_.empty()) |
- user_agent_ = BuildUserAgent(false); |
+ DCHECK(!user_agent_.empty()); |
// Workarounds for sites that use misguided UA sniffing. |
if (!user_agent_is_overridden_) { |
-#if defined(OS_POSIX) && !defined(OS_MACOSX) |
- if (MatchPattern(url.host(), "*.mail.yahoo.com")) { |
- // mail.yahoo.com is ok with Windows Chrome but not Linux Chrome. |
- // http://bugs.chromium.org/11136 |
- // TODO(evanm): remove this if Yahoo fixes their sniffing. |
- if (mimic_windows_user_agent_.empty()) |
- mimic_windows_user_agent_ = BuildUserAgent(true); |
- return mimic_windows_user_agent_; |
- } |
-#endif |
#if defined(OS_MACOSX) |
if (url.host() == "www.microsoft.com" && |
StartsWithASCII(url.path(), "/getsilverlight", false)) { |
@@ -405,7 +399,7 @@ const std::string& UserAgentState::Get(const GURL& url) const { |
// Should be removed if the sniffing is removed: http://crbug.com/88211 |
if (mimic_mac_safari_user_agent_.empty()) { |
mimic_mac_safari_user_agent_ = |
- BuildUserAgentHelper(false, "Version/5.0.4 Safari/533.20.27"); |
+ BuildUserAgentFromProduct("Version/5.0.4 Safari/533.20.27"); |
} |
return mimic_mac_safari_user_agent_; |
} |
@@ -419,8 +413,8 @@ base::LazyInstance<UserAgentState> g_user_agent(base::LINKER_INITIALIZED); |
} // namespace |
-void SetUserAgent(const std::string& new_user_agent) { |
- g_user_agent.Get().Set(new_user_agent); |
+void SetUserAgent(const std::string& user_agent, bool overriding) { |
+ g_user_agent.Get().Set(user_agent, overriding); |
} |
const std::string& GetUserAgent(const GURL& url) { |