Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(925)

Unified Diff: chrome/browser/garbled_text_service.cc

Issue 9235004: [Garbled Text][Infobar] Adding infobar to suggest turning on encoding detection. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: rebase Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/garbled_text_service.h ('k') | chrome/browser/garbled_text_service_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/garbled_text_service.cc
diff --git a/chrome/browser/garbled_text_service.cc b/chrome/browser/garbled_text_service.cc
new file mode 100644
index 0000000000000000000000000000000000000000..7693f7e9afe5ca8e841c504a417b9fd2ef229860
--- /dev/null
+++ b/chrome/browser/garbled_text_service.cc
@@ -0,0 +1,185 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/garbled_text_service.h"
+
+#include <string>
+
+#include "base/bind.h"
+#include "chrome/browser/garbled_text_url_tracker.h"
+#include "chrome/browser/prefs/pref_service.h"
+#include "chrome/browser/prefs/scoped_user_pref_update.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_dependency_manager.h"
+#include "chrome/common/chrome_notification_types.h"
+#include "chrome/common/pref_names.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/notification_details.h"
+#include "content/public/browser/notification_source.h"
+
+const char GarbledTextService::kPrefGarbledTextBlacklist[] =
+ "garbled_text_sites";
+
+// When the blacklist grows over |kBlacklistSizeLimit|, we reduce it to
+// kBlacklistReduceRatio * kBlacklistSizeLimit in manner of least recent added.
+const size_t kBlacklistSizeLimit = 2000;
+const size_t kBlacklistReduceRatio = 0.5;
+
+namespace {
+
+void SetPrefBlacklist(PrefService* user_prefs,
+ const GarbledTextService::Blacklist& blacklist) {
+ ListPrefUpdate update(user_prefs,
+ GarbledTextService::kPrefGarbledTextBlacklist);
+ ListValue* pref_blacklist = update.Get();
+ if (!pref_blacklist) {
+ NOTREACHED();
+ return;
+ }
+ pref_blacklist->Clear();
+
+ for (GarbledTextService::Blacklist::const_iterator itr = blacklist.begin();
+ itr != blacklist.end(); ++itr)
+ pref_blacklist->Append(base::Value::CreateStringValue(*itr));
+}
+
+} // anonymous namespace
+
+GarbledTextServiceParams::GarbledTextServiceParams(PrefService* user_prefs,
+ GarbledTextService* service)
+ : service_(service->AsWeakPtr()) {
+ DCHECK(user_prefs);
+ DCHECK(service);
+
+ const ListValue* pref_blacklist = user_prefs->GetList(
+ GarbledTextService::kPrefGarbledTextBlacklist);
+ if (pref_blacklist) {
+ size_t i = 0;
+ if (pref_blacklist->GetSize() > kBlacklistSizeLimit) {
+ size_t new_size = kBlacklistSizeLimit * kBlacklistReduceRatio;
+ i = pref_blacklist->GetSize() - new_size;
+ }
+
+ for (; i < pref_blacklist->GetSize(); ++i) {
+ std::string value;
+ if (pref_blacklist->GetString(i, &value))
+ blacklist_.insert(value);
+ }
+
+ if (pref_blacklist->GetSize() > kBlacklistSizeLimit)
+ SetPrefBlacklist(user_prefs, blacklist_);
+ }
+}
+
+GarbledTextServiceParams::~GarbledTextServiceParams() {
+}
+
+scoped_ptr<GarbledTextURLTracker> GarbledTextServiceParams::CreateTracker(
+ const BooleanPrefMember& enabled) {
+ scoped_ptr<GarbledTextURLTracker> tracker(
+ new GarbledTextURLTracker(enabled, blacklist_));
+
+ content::BrowserThread::PostTask(
+ content::BrowserThread::UI, FROM_HERE,
+ base::Bind(&GarbledTextService::SetTracker,
+ service_, tracker->AsWeakPtr()));
+ return tracker.Pass();
+}
+
+// static
+GarbledTextService* GarbledTextServiceFactory::GetForProfile(
+ Profile* profile) {
+ return static_cast<GarbledTextService*>(
+ GetInstance()->GetServiceForProfile(profile, true));
+}
+
+// static
+GarbledTextServiceFactory* GarbledTextServiceFactory::GetInstance() {
+ return Singleton<GarbledTextServiceFactory>::get();
+}
+
+GarbledTextServiceFactory::GarbledTextServiceFactory()
+ : ProfileKeyedServiceFactory(ProfileDependencyManager::GetInstance()) {
+}
+
+GarbledTextServiceFactory::~GarbledTextServiceFactory() {}
+
+ProfileKeyedService* GarbledTextServiceFactory::BuildServiceInstanceFor(
+ Profile* profile) const {
+ return new GarbledTextService(profile);
+}
+
+void GarbledTextServiceFactory::RegisterUserPrefs(PrefService* user_prefs) {
+ if (!user_prefs->FindPreference(prefs::kEnableAutoGarbledTextFix)) {
+ user_prefs->RegisterBooleanPref(prefs::kEnableAutoGarbledTextFix,
+ true,
+ PrefService::UNSYNCABLE_PREF);
+ }
+
+ if (!user_prefs->FindPreference(
+ GarbledTextService::kPrefGarbledTextBlacklist)) {
+ user_prefs->RegisterListPref(
+ GarbledTextService::kPrefGarbledTextBlacklist,
+ PrefService::UNSYNCABLE_PREF);
+ }
+}
+
+bool GarbledTextServiceFactory::ServiceHasOwnInstanceInIncognito() {
+ return true;
+}
+
+bool GarbledTextServiceFactory::ServiceIsNULLWhileTesting() {
+ return false;
+}
+
+GarbledTextService::GarbledTextService(Profile* profile)
+ : profile_(profile) {
+ DCHECK(profile_);
+}
+
+GarbledTextService::~GarbledTextService() {
+ DCHECK(CalledOnValidThread());
+}
+
+void GarbledTextService::SetTracker(
+ base::WeakPtr<GarbledTextURLTracker> tracker) {
+ DCHECK(CalledOnValidThread());
+ DCHECK(!tracker_.get());
+ tracker_ = tracker;
+}
+
+void GarbledTextService::UpdateBlacklist(const GarbledURLs& garbled_urls,
+ const base::Closure& callback) {
+ DCHECK(CalledOnValidThread());
+
+ scoped_ptr<Blacklist> blacklist_delta(new Blacklist);
+ base::Closure post(
+ base::Bind(&GarbledTextURLTracker::UpdateBlacklist,
+ tracker_, garbled_urls, blacklist_delta.get()));
+ base::Closure reply(
+ base::Bind(&GarbledTextService::UpdatePref, AsWeakPtr(),
+ base::Owned(blacklist_delta.release()), callback));
+ content::BrowserThread::PostTaskAndReply(
+ content::BrowserThread::IO, FROM_HERE, post, reply);
+}
+
+void GarbledTextService::UpdatePref(const Blacklist* blacklist_delta,
+ const base::Closure& callback) {
+ DCHECK(CalledOnValidThread());
+
+ PrefService* user_prefs = profile_->GetPrefs();
+ DCHECK(user_prefs);
+
+ ListPrefUpdate update(user_prefs, kPrefGarbledTextBlacklist);
+ ListValue* blacklist = update.Get();
+ if (!blacklist) {
+ NOTREACHED();
+ return;
+ }
+ for (Blacklist::const_iterator itr = blacklist_delta->begin();
+ itr != blacklist_delta->end(); ++itr)
+ blacklist->Append(base::Value::CreateStringValue(*itr));
+
+ callback.Run();
+}
« no previous file with comments | « chrome/browser/garbled_text_service.h ('k') | chrome/browser/garbled_text_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698