| OLD | NEW |
| 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "config.h" | 5 #include "config.h" |
| 6 #include "webkit/glue/webkit_glue.h" | 6 #include "webkit/glue/webkit_glue.h" |
| 7 | 7 |
| 8 #if defined(OS_WIN) | 8 #if defined(OS_WIN) |
| 9 #include <objidl.h> | 9 #include <objidl.h> |
| 10 #include <mlang.h> | 10 #include <mlang.h> |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 namespace { | 61 namespace { |
| 62 | 62 |
| 63 static const char kLayoutTestsPattern[] = "/LayoutTests/"; | 63 static const char kLayoutTestsPattern[] = "/LayoutTests/"; |
| 64 static const std::string::size_type kLayoutTestsPatternSize = | 64 static const std::string::size_type kLayoutTestsPatternSize = |
| 65 arraysize(kLayoutTestsPattern) - 1; | 65 arraysize(kLayoutTestsPattern) - 1; |
| 66 static const char kFileUrlPattern[] = "file:/"; | 66 static const char kFileUrlPattern[] = "file:/"; |
| 67 static const char kDataUrlPattern[] = "data:"; | 67 static const char kDataUrlPattern[] = "data:"; |
| 68 static const std::string::size_type kDataUrlPatternSize = | 68 static const std::string::size_type kDataUrlPatternSize = |
| 69 arraysize(kDataUrlPattern) - 1; | 69 arraysize(kDataUrlPattern) - 1; |
| 70 static const char kFileTestPrefix[] = "(file test):"; | 70 static const char kFileTestPrefix[] = "(file test):"; |
| 71 static const char kChrome1ProductString[] = "Chrome/1.0.154.53"; |
| 71 | 72 |
| 72 } | 73 } |
| 73 | 74 |
| 74 //------------------------------------------------------------------------------ | 75 //------------------------------------------------------------------------------ |
| 75 // webkit_glue impl: | 76 // webkit_glue impl: |
| 76 | 77 |
| 77 namespace webkit_glue { | 78 namespace webkit_glue { |
| 78 | 79 |
| 79 // Global variable used by the plugin quirk "die after unload". | 80 // Global variable used by the plugin quirk "die after unload". |
| 80 bool g_forcefully_terminate_plugin_process = false; | 81 bool g_forcefully_terminate_plugin_process = false; |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 315 | 316 |
| 316 namespace { | 317 namespace { |
| 317 | 318 |
| 318 struct UserAgentState { | 319 struct UserAgentState { |
| 319 UserAgentState() | 320 UserAgentState() |
| 320 : user_agent_requested(false), | 321 : user_agent_requested(false), |
| 321 user_agent_is_overridden(false) { | 322 user_agent_is_overridden(false) { |
| 322 } | 323 } |
| 323 | 324 |
| 324 std::string user_agent; | 325 std::string user_agent; |
| 326 std::string mimic_chrome1_user_agent; |
| 325 bool user_agent_requested; | 327 bool user_agent_requested; |
| 326 bool user_agent_is_overridden; | 328 bool user_agent_is_overridden; |
| 327 }; | 329 }; |
| 328 | 330 |
| 329 Singleton<UserAgentState> g_user_agent; | 331 Singleton<UserAgentState> g_user_agent; |
| 330 | 332 |
| 331 std::string BuildOSCpuInfo() { | 333 std::string BuildOSCpuInfo() { |
| 332 std::string os_cpu; | 334 std::string os_cpu; |
| 333 | 335 |
| 334 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) | 336 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 374 #else | 376 #else |
| 375 "%s %s", | 377 "%s %s", |
| 376 unixinfo.sysname, // e.g. Linux | 378 unixinfo.sysname, // e.g. Linux |
| 377 cputype.c_str() // e.g. i686 | 379 cputype.c_str() // e.g. i686 |
| 378 #endif | 380 #endif |
| 379 ); | 381 ); |
| 380 | 382 |
| 381 return os_cpu; | 383 return os_cpu; |
| 382 } | 384 } |
| 383 | 385 |
| 384 void BuildUserAgent(std::string* result) { | 386 void BuildUserAgent(bool mimic_chrome1, std::string* result) { |
| 385 const char kUserAgentPlatform[] = | 387 const char kUserAgentPlatform[] = |
| 386 #if defined(OS_WIN) | 388 #if defined(OS_WIN) |
| 387 "Windows"; | 389 "Windows"; |
| 388 #elif defined(OS_MACOSX) | 390 #elif defined(OS_MACOSX) |
| 389 "Macintosh"; | 391 "Macintosh"; |
| 390 #elif defined(OS_LINUX) | 392 #elif defined(OS_LINUX) |
| 391 "X11"; // strange, but that's what Firefox uses | 393 "X11"; // strange, but that's what Firefox uses |
| 392 #else | 394 #else |
| 393 "?"; | 395 "?"; |
| 394 #endif | 396 #endif |
| 395 | 397 |
| 396 const char kUserAgentSecurity = 'U'; // "US" strength encryption | 398 const char kUserAgentSecurity = 'U'; // "US" strength encryption |
| 397 | 399 |
| 398 // TODO(port): figure out correct locale | 400 // TODO(port): figure out correct locale |
| 399 const char kUserAgentLocale[] = "en-US"; | 401 const char kUserAgentLocale[] = "en-US"; |
| 400 | 402 |
| 401 // Get the product name and version, and replace Safari's Version/X string | 403 // Get the product name and version, and replace Safari's Version/X string |
| 402 // with it. This is done to expose our product name in a manner that is | 404 // with it. This is done to expose our product name in a manner that is |
| 403 // maximally compatible with Safari, we hope!! | 405 // maximally compatible with Safari, we hope!! |
| 404 std::string product; | 406 std::string product; |
| 405 | 407 |
| 406 scoped_ptr<FileVersionInfo> version_info( | 408 if (mimic_chrome1) { |
| 407 FileVersionInfo::CreateFileVersionInfoForCurrentModule()); | 409 product = kChrome1ProductString; |
| 408 if (version_info.get()) { | |
| 409 product = "Chrome/" + WideToASCII(version_info->product_version()); | |
| 410 } else { | 410 } else { |
| 411 DLOG(WARNING) << "Unknown product version"; | 411 scoped_ptr<FileVersionInfo> version_info( |
| 412 product = "Chrome/0.0.0.0"; | 412 FileVersionInfo::CreateFileVersionInfoForCurrentModule()); |
| 413 if (version_info.get()) { |
| 414 product = "Chrome/" + WideToASCII(version_info->product_version()); |
| 415 } else { |
| 416 DLOG(WARNING) << "Unknown product version"; |
| 417 product = "Chrome/0.0.0.0"; |
| 418 } |
| 413 } | 419 } |
| 414 | 420 |
| 415 // Derived from Safari's UA string. | 421 // Derived from Safari's UA string. |
| 416 StringAppendF( | 422 StringAppendF( |
| 417 result, | 423 result, |
| 418 "Mozilla/5.0 (%s; %c; %s; %s) AppleWebKit/%d.%d" | 424 "Mozilla/5.0 (%s; %c; %s; %s) AppleWebKit/%d.%d" |
| 419 " (KHTML, like Gecko) %s Safari/%d.%d", | 425 " (KHTML, like Gecko) %s Safari/%d.%d", |
| 420 kUserAgentPlatform, | 426 kUserAgentPlatform, |
| 421 kUserAgentSecurity, | 427 kUserAgentSecurity, |
| 422 BuildOSCpuInfo().c_str(), | 428 BuildOSCpuInfo().c_str(), |
| 423 kUserAgentLocale, | 429 kUserAgentLocale, |
| 424 WEBKIT_VERSION_MAJOR, | 430 WEBKIT_VERSION_MAJOR, |
| 425 WEBKIT_VERSION_MINOR, | 431 WEBKIT_VERSION_MINOR, |
| 426 product.c_str(), | 432 product.c_str(), |
| 427 WEBKIT_VERSION_MAJOR, | 433 WEBKIT_VERSION_MAJOR, |
| 428 WEBKIT_VERSION_MINOR | 434 WEBKIT_VERSION_MINOR |
| 429 ); | 435 ); |
| 430 } | 436 } |
| 431 | 437 |
| 432 void SetUserAgentToDefault() { | 438 void SetUserAgentToDefault() { |
| 433 BuildUserAgent(&g_user_agent->user_agent); | 439 BuildUserAgent(false, &g_user_agent->user_agent); |
| 434 } | 440 } |
| 435 | 441 |
| 436 } // namespace | 442 } // namespace |
| 437 | 443 |
| 438 void SetUserAgent(const std::string& new_user_agent) { | 444 void SetUserAgent(const std::string& new_user_agent) { |
| 439 // If you combine this with the previous line, the function only works the | 445 // If you combine this with the previous line, the function only works the |
| 440 // first time. | 446 // first time. |
| 441 DCHECK(!g_user_agent->user_agent_requested) << | 447 DCHECK(!g_user_agent->user_agent_requested) << |
| 442 "Setting the user agent after someone has " | 448 "Setting the user agent after someone has " |
| 443 "already requested it can result in unexpected behavior."; | 449 "already requested it can result in unexpected behavior."; |
| 444 g_user_agent->user_agent_is_overridden = true; | 450 g_user_agent->user_agent_is_overridden = true; |
| 445 g_user_agent->user_agent = new_user_agent; | 451 g_user_agent->user_agent = new_user_agent; |
| 446 } | 452 } |
| 447 | 453 |
| 448 const std::string& GetUserAgent(const GURL& url) { | 454 const std::string& GetUserAgent(const GURL& url) { |
| 449 if (g_user_agent->user_agent.empty()) | 455 if (g_user_agent->user_agent.empty()) |
| 450 SetUserAgentToDefault(); | 456 SetUserAgentToDefault(); |
| 451 g_user_agent->user_agent_requested = true; | 457 g_user_agent->user_agent_requested = true; |
| 458 if (!g_user_agent->user_agent_is_overridden) { |
| 459 // For cnn.com, which uses pointroll.com to serve their front door promo, |
| 460 // we must spoof Chrome 1.0 in order to avoid blank page due to mis-sniffing |
| 461 // of the UA on the server side (http://crbug.com/25934) |
| 462 // TODO(dglazkov): Remove this once CNN's front door promo is over or when |
| 463 // pointroll fixes their sniffing. |
| 464 if (MatchPattern(url.host(), "*.pointroll.com")) { |
| 465 if (g_user_agent->mimic_chrome1_user_agent.empty()) |
| 466 BuildUserAgent(true, &g_user_agent->mimic_chrome1_user_agent); |
| 467 return g_user_agent->mimic_chrome1_user_agent; |
| 468 } |
| 469 } |
| 452 return g_user_agent->user_agent; | 470 return g_user_agent->user_agent; |
| 453 } | 471 } |
| 454 | 472 |
| 455 void SetForcefullyTerminatePluginProcess(bool value) { | 473 void SetForcefullyTerminatePluginProcess(bool value) { |
| 456 if (IsPluginRunningInRendererProcess()) { | 474 if (IsPluginRunningInRendererProcess()) { |
| 457 // Ignore this quirk when the plugins are not running in their own process. | 475 // Ignore this quirk when the plugins are not running in their own process. |
| 458 return; | 476 return; |
| 459 } | 477 } |
| 460 | 478 |
| 461 g_forcefully_terminate_plugin_process = value; | 479 g_forcefully_terminate_plugin_process = value; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 484 | 502 |
| 485 bool IsMediaCacheEnabled() { | 503 bool IsMediaCacheEnabled() { |
| 486 return g_enable_media_cache; | 504 return g_enable_media_cache; |
| 487 } | 505 } |
| 488 | 506 |
| 489 void SetMediaCacheEnabled(bool enabled) { | 507 void SetMediaCacheEnabled(bool enabled) { |
| 490 g_enable_media_cache = enabled; | 508 g_enable_media_cache = enabled; |
| 491 } | 509 } |
| 492 | 510 |
| 493 } // namespace webkit_glue | 511 } // namespace webkit_glue |
| OLD | NEW |