Index: chrome/browser/net/chrome_url_request_context.cc |
=================================================================== |
--- chrome/browser/net/chrome_url_request_context.cc (revision 20790) |
+++ chrome/browser/net/chrome_url_request_context.cc (working copy) |
@@ -271,8 +271,10 @@ |
// Set up Accept-Language and Accept-Charset header values |
accept_language_ = net::HttpUtil::GenerateAcceptLanguageHeader( |
WideToASCII(prefs_->GetString(prefs::kAcceptLanguages))); |
- accept_charset_ = net::HttpUtil::GenerateAcceptCharsetHeader( |
- WideToASCII(prefs_->GetString(prefs::kDefaultCharset))); |
+ std::string default_charset = |
+ WideToASCII(prefs_->GetString(prefs::kDefaultCharset)); |
+ accept_charset_ = |
+ net::HttpUtil::GenerateAcceptCharsetHeader(default_charset); |
// At this point, we don't know the charset of the referring page |
// where a url request originates from. This is used to get a suggested |
@@ -286,7 +288,7 @@ |
// have an *arguably* better default charset for interpreting a raw 8bit |
// C-D header field. It means the native OS codepage fallback in |
// net_util::GetSuggestedFilename is unlikely to be taken. |
- referrer_charset_ = accept_charset_; |
+ referrer_charset_ = default_charset; |
wtc
2009/07/16 01:14:47
Question: so referrer_charset_ should contain a si
|
cookie_policy_.SetType(net::CookiePolicy::FromInt( |
prefs_->GetInteger(prefs::kCookieBehavior))); |
@@ -309,6 +311,7 @@ |
prefs_->AddPrefObserver(prefs::kAcceptLanguages, this); |
prefs_->AddPrefObserver(prefs::kCookieBehavior, this); |
+ prefs_->AddPrefObserver(prefs::kDefaultCharset, this); |
if (!is_off_the_record_) { |
registrar_.Add(this, NotificationType::EXTENSIONS_LOADED, |
@@ -340,6 +343,13 @@ |
NewRunnableMethod(this, |
&ChromeURLRequestContext::OnCookiePolicyChange, |
policy_type)); |
+ } else if (*pref_name_in == prefs::kDefaultCharset) { |
+ std::string default_charset = |
+ WideToASCII(prefs->GetString(prefs::kDefaultCharset)); |
+ g_browser_process->io_thread()->message_loop()->PostTask(FROM_HERE, |
+ NewRunnableMethod(this, |
+ &ChromeURLRequestContext::OnDefaultCharsetChange, |
+ default_charset)); |
} |
} else if (NotificationType::EXTENSIONS_LOADED == type) { |
ExtensionPaths* new_paths = new ExtensionPaths; |
@@ -367,6 +377,7 @@ |
// Unregister for pref notifications. |
prefs_->RemovePrefObserver(prefs::kAcceptLanguages, this); |
prefs_->RemovePrefObserver(prefs::kCookieBehavior, this); |
+ prefs_->RemovePrefObserver(prefs::kDefaultCharset, this); |
prefs_ = NULL; |
registrar_.RemoveAll(); |
@@ -432,6 +443,15 @@ |
cookie_policy_.SetType(type); |
} |
+void ChromeURLRequestContext::OnDefaultCharsetChange( |
+ const std::string& default_charset) { |
+ DCHECK(MessageLoop::current() == |
+ ChromeThread::GetMessageLoop(ChromeThread::IO)); |
+ referrer_charset_ = default_charset; |
+ accept_charset_ = |
+ net::HttpUtil::GenerateAcceptCharsetHeader(default_charset); |
+} |
+ |
void ChromeURLRequestContext::OnNewExtensions(ExtensionPaths* new_paths) { |
extension_paths_.insert(new_paths->begin(), new_paths->end()); |
delete new_paths; |