Chromium Code Reviews| Index: webkit/glue/webkit_glue.cc |
| =================================================================== |
| --- webkit/glue/webkit_glue.cc (revision 8714) |
| +++ webkit/glue/webkit_glue.cc (working copy) |
| @@ -316,11 +316,11 @@ |
| namespace { |
| -std::string* user_agent = NULL; |
| +const std::string* user_agent = NULL; |
| bool user_agent_requested = false; |
| +bool user_agent_is_overridden = false; |
| -void SetUserAgentToDefault() { |
| - static std::string default_user_agent; |
| +void BuildUserAgent(bool mimic_safari, std::string* result) { |
| #if defined(OS_WIN) || defined(OS_MACOSX) |
| int32 os_major_version = 0; |
| int32 os_minor_version = 0; |
| @@ -345,17 +345,19 @@ |
| // maximally compatible with Safari, we hope!! |
| std::string product; |
| - scoped_ptr<FileVersionInfo> version_info( |
| - FileVersionInfo::CreateFileVersionInfoForCurrentModule()); |
| - if (version_info.get()) |
| - product = "Chrome/" + WideToASCII(version_info->product_version()); |
| + if (!mimic_safari) { |
| + scoped_ptr<FileVersionInfo> version_info( |
| + FileVersionInfo::CreateFileVersionInfoForCurrentModule()); |
| + if (version_info.get()) |
| + product = "Chrome/" + WideToASCII(version_info->product_version()); |
| + } |
| if (product.empty()) |
| - product = "Version/3.1"; |
| + product = "Version/3.2.1"; |
|
wtc
2009/01/27 19:19:24
Nit: We should move the hardcoded Safari version 3
darin (slow to review)
2009/01/27 19:52:06
Agreed, but I'll defer that to a subsequent patch.
|
| // Derived from Safari's UA string. |
| StringAppendF( |
| - &default_user_agent, |
| + result, |
| #if defined(OS_WIN) |
| "Mozilla/5.0 (Windows; U; Windows NT %d.%d; en-US) AppleWebKit/%d.%d" |
| #elif defined(OS_MACOSX) |
| @@ -380,17 +382,22 @@ |
| // Windows. Some solution for embedding the Chrome version number needs to be |
| // found here. |
| StringAppendF( |
| - &default_user_agent, |
| + result, |
| "Mozilla/5.0 (Linux; U; en-US) AppleWebKit/525.13 " |
| "(KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13"); |
| #else |
| // TODO(port): we need something like FileVersionInfo for our UA string. |
| NOTIMPLEMENTED(); |
| #endif |
| +} |
| + |
| +void SetUserAgentToDefault() { |
| + static std::string default_user_agent; |
| + BuildUserAgent(false, &default_user_agent); |
| user_agent = &default_user_agent; |
| } |
| -}; |
| +} // namespace |
| void SetUserAgent(const std::string& new_user_agent) { |
| DCHECK(!user_agent_requested) << "Setting the user agent after someone has " |
| @@ -399,13 +406,23 @@ |
| 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; |
| } |
| -const std::string& GetUserAgent() { |
| +const std::string& GetUserAgent(const GURL& url) { |
| if (!user_agent) |
| SetUserAgentToDefault(); |
| user_agent_requested = true; |
| + if (!user_agent_is_overridden) { |
| + static std::string mimic_safari_user_agent; |
|
wtc
2009/01/27 19:19:24
Because you're using a static object here, please
darin (slow to review)
2009/01/27 19:52:06
hmm... good point. i believe it is.
|
| + // For hotmail, we need to spoof as Safari (bug 4111). |
|
wtc
2009/01/27 19:19:24
Nit: is this comment over-indented?
darin (slow to review)
2009/01/27 19:52:06
oops.. a <TAB> slipped in there.
|
| + if (MatchPattern(url.host(), "*.mail.live.com")) { |
| + if (mimic_safari_user_agent.empty()) |
| + BuildUserAgent(true, &mimic_safari_user_agent); |
| + return mimic_safari_user_agent; |
| + } |
| + } |
| return *user_agent; |
| } |