| Index: webkit/glue/webkit_glue.cc
 | 
| ===================================================================
 | 
| --- webkit/glue/webkit_glue.cc	(revision 9653)
 | 
| +++ webkit/glue/webkit_glue.cc	(working copy)
 | 
| @@ -35,6 +35,7 @@
 | 
|  #include "webkit/glue/webkit_glue.h"
 | 
|  
 | 
|  #include "base/file_version_info.h"
 | 
| +#include "base/singleton.h"
 | 
|  #include "base/string_util.h"
 | 
|  #include "skia/include/SkBitmap.h"
 | 
|  #include "webkit/glue/event_conversion.h"
 | 
| @@ -316,10 +317,20 @@
 | 
|  
 | 
|  namespace {
 | 
|  
 | 
| -const std::string* user_agent = NULL;
 | 
| -bool user_agent_requested = false;
 | 
| -bool user_agent_is_overridden = false;
 | 
| +struct UserAgentState {
 | 
| +  UserAgentState()
 | 
| +      : user_agent_requested(false),
 | 
| +        user_agent_is_overridden(false) {
 | 
| +  }
 | 
|  
 | 
| +  std::string user_agent;
 | 
| +  std::string mimic_safari_user_agent;
 | 
| +  bool user_agent_requested;
 | 
| +  bool user_agent_is_overridden;
 | 
| +};
 | 
| +
 | 
| +Singleton<UserAgentState> g_user_agent;
 | 
| +
 | 
|  void BuildUserAgent(bool mimic_safari, std::string* result) {
 | 
|  #if defined(OS_WIN) || defined(OS_MACOSX)
 | 
|    int32 os_major_version = 0;
 | 
| @@ -392,38 +403,34 @@
 | 
|  }
 | 
|  
 | 
|  void SetUserAgentToDefault() {
 | 
| -  static std::string default_user_agent;
 | 
| -  BuildUserAgent(false, &default_user_agent);
 | 
| -  user_agent = &default_user_agent;
 | 
| +  BuildUserAgent(false, &g_user_agent->user_agent);
 | 
|  }
 | 
|  
 | 
|  }  // namespace
 | 
|  
 | 
|  void SetUserAgent(const std::string& new_user_agent) {
 | 
| -  DCHECK(!user_agent_requested) << "Setting the user agent after someone has "
 | 
| +  // If you combine this with the previous line, the function only works the
 | 
| +  // first time.
 | 
| +  DCHECK(!g_user_agent->user_agent_requested) <<
 | 
| +      "Setting the user agent after someone has "
 | 
|        "already requested it can result in unexpected behavior.";
 | 
| -  static std::string overridden_user_agent;
 | 
| -  overridden_user_agent = new_user_agent;  // If you combine this with the
 | 
| -                                           // previous line, the function only
 | 
| -                                           // works the first time.
 | 
| -  user_agent_is_overridden = true;
 | 
| -  user_agent = &overridden_user_agent;
 | 
| +  g_user_agent->user_agent_is_overridden = true;
 | 
| +  g_user_agent->user_agent = new_user_agent;
 | 
|  }
 | 
|  
 | 
|  const std::string& GetUserAgent(const GURL& url) {
 | 
| -  if (!user_agent)
 | 
| +  if (g_user_agent->user_agent.empty())
 | 
|      SetUserAgentToDefault();
 | 
| -  user_agent_requested = true;
 | 
| -  if (!user_agent_is_overridden) {
 | 
| -    static std::string mimic_safari_user_agent;
 | 
| +  g_user_agent->user_agent_requested = true;
 | 
| +  if (!g_user_agent->user_agent_is_overridden) {
 | 
|      // For hotmail, we need to spoof as Safari (bug 4111).
 | 
|      if (MatchPattern(url.host(), "*.mail.live.com")) {
 | 
| -      if (mimic_safari_user_agent.empty()) 
 | 
| -        BuildUserAgent(true, &mimic_safari_user_agent);
 | 
| -      return mimic_safari_user_agent;
 | 
| +      if (g_user_agent->mimic_safari_user_agent.empty()) 
 | 
| +        BuildUserAgent(true, &g_user_agent->mimic_safari_user_agent);
 | 
| +      return g_user_agent->mimic_safari_user_agent;
 | 
|      }
 | 
|    }
 | 
| -  return *user_agent;
 | 
| +  return g_user_agent->user_agent;
 | 
|  }
 | 
|  
 | 
|  void NotifyJSOutOfMemory(WebCore::Frame* frame) {
 | 
| 
 |