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

Unified Diff: components/translate/content/common/cld_data_source.cc

Issue 461633002: Refactor language detection logic to allow non-static CLD data sources. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Make some of the harness factory methods private Created 6 years, 1 month 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
Index: components/translate/content/common/cld_data_source.cc
diff --git a/components/translate/content/common/cld_data_source.cc b/components/translate/content/common/cld_data_source.cc
new file mode 100644
index 0000000000000000000000000000000000000000..9d6e009ce3406b0fd84c2ee3e6f9a84ac9c0881a
--- /dev/null
+++ b/components/translate/content/common/cld_data_source.cc
@@ -0,0 +1,112 @@
+// Copyright 2014 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 "components/translate/content/common/cld_data_source.h"
+
+#include "base/lazy_instance.h"
+
+namespace {
+
+// This is the global instance managed by Get/Set/SetDefault
+translate::CldDataSource* g_instance = NULL;
+
+// Global instances for the builtin data source types
+base::LazyInstance<translate::CldDataSource>::Leaky g_wrapped_static =
+ LAZY_INSTANCE_INITIALIZER;
+base::LazyInstance<translate::CldDataSource>::Leaky g_wrapped_standalone =
+ LAZY_INSTANCE_INITIALIZER;
+base::LazyInstance<translate::CldDataSource>::Leaky g_wrapped_component =
+ LAZY_INSTANCE_INITIALIZER;
+
+bool g_disable_sanity_checks_for_test = false;
+
+} // namespace
+
+namespace translate {
+
+CldDataSource::CldDataSource() : m_cached_filepath(), m_file_lock() {
+}
+
+std::string CldDataSource::GetName() {
+ if (this == GetStaticDataSource()) return "static";
+ if (this == GetComponentDataSource()) return "component";
+ if (this == GetStandaloneDataSource()) return "standalone";
+ NOTREACHED() << "Subclass failed to override GetName()";
+ return "unknown";
+}
+
+// static
+void CldDataSource::DisableSanityChecksForTest() {
+ g_disable_sanity_checks_for_test = true;
+}
+
+// static
+void CldDataSource::EnableSanityChecksForTest() {
+ g_disable_sanity_checks_for_test = false;
+}
+
+void CldDataSource::SetCldDataFilePath(const base::FilePath& path) {
+ DCHECK(g_disable_sanity_checks_for_test ||
+ this == GetComponentDataSource() ||
+ this == GetStandaloneDataSource()) << "CLD Data Source misconfigured!";
+ base::AutoLock lock(m_file_lock);
+ m_cached_filepath = path;
+}
+
+base::FilePath CldDataSource::GetCldDataFilePath() {
+ DCHECK(g_disable_sanity_checks_for_test ||
+ this == GetComponentDataSource() ||
+ this == GetStandaloneDataSource()) << "CLD Data Source misconfigured!";
+ base::AutoLock lock(m_file_lock);
+ return m_cached_filepath;
+}
+
+// static
+void CldDataSource::SetDefault(CldDataSource* data_source) {
+ if (g_instance == NULL) Set(data_source);
+}
+
+// static
+void CldDataSource::Set(CldDataSource* data_source) {
+ g_instance = data_source;
+}
+
+// static
+CldDataSource* CldDataSource::Get() {
+ DCHECK(g_instance != NULL) << "No CLD data source was configured!";
+ if (g_instance != NULL) return g_instance;
+ return GetStaticDataSource();
+}
+
+// static
+CldDataSource* CldDataSource::GetStaticDataSource() {
+ return &g_wrapped_static.Get();
+}
+
+// static
+bool CldDataSource::IsUsingStaticDataSource() {
+ return Get()->GetName() == "static";
+}
+
+// static
+CldDataSource* CldDataSource::GetStandaloneDataSource() {
+ return &g_wrapped_standalone.Get();
+}
+
+// static
+bool CldDataSource::IsUsingStandaloneDataSource() {
+ return Get()->GetName() == "standalone";
+}
+
+// static
+CldDataSource* CldDataSource::GetComponentDataSource() {
+ return &g_wrapped_component.Get();
+}
+
+// static
+bool CldDataSource::IsUsingComponentDataSource() {
+ return Get()->GetName() == "component";
+}
+
+} // namespace translate

Powered by Google App Engine
This is Rietveld 408576698