Index: webkit/glue/webkit_glue.cc |
diff --git a/webkit/glue/webkit_glue.cc b/webkit/glue/webkit_glue.cc |
index 1d8930577160eccdc754a36141b5232720b21494..25c991322dbc3ccc3cadc6464fda55cd30c1a342 100644 |
--- a/webkit/glue/webkit_glue.cc |
+++ b/webkit/glue/webkit_glue.cc |
@@ -344,6 +344,7 @@ class UserAgentState { |
~UserAgentState(); |
void Set(const std::string& user_agent, bool overriding); |
+ void Reset(const std::string& user_agent, bool overriding); |
const std::string& Get(const GURL& url) const; |
private: |
@@ -375,9 +376,16 @@ void UserAgentState::Set(const std::string& user_agent, bool overriding) { |
// 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."; |
+ lock_.Release(); |
+ UserAgentState::Reset(user_agent, overriding); |
+ lock_.Acquire(); |
+} |
+ |
+void UserAgentState::Reset(const std::string& user_agent, bool overriding) { |
+ base::AutoLock auto_lock(lock_); |
+ DCHECK(!user_agent.empty()); |
user_agent_is_overridden_ = overriding; |
user_agent_ = user_agent; |
} |
@@ -417,6 +425,10 @@ void SetUserAgent(const std::string& user_agent, bool overriding) { |
g_user_agent.Get().Set(user_agent, overriding); |
} |
+void ResetUserAgent(const std::string& user_agent, bool overriding) { |
+ g_user_agent.Get().Reset(user_agent, overriding); |
+} |
+ |
const std::string& GetUserAgent(const GURL& url) { |
return g_user_agent.Get().Get(url); |
} |