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

Side by Side Diff: chrome/browser/translate/cld_data_harness_factory.cc

Issue 2034413003: Delete the non-static CLD data source logic. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase to latest master Created 4 years, 6 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/translate/cld_data_harness_factory.h"
6
7 #include "base/lazy_instance.h"
8 #include "chrome/browser/translate/component_cld_data_harness.h"
9 #include "chrome/browser/translate/standalone_cld_data_harness.h"
10 #include "components/translate/content/browser/browser_cld_utils.h"
11 #include "components/translate/content/common/cld_data_source.h"
12
13 namespace {
14
15 // This is the global instance managed by Get/Set
16 test::CldDataHarnessFactory* g_instance = NULL;
17
18 // The following three instances are used to "cheat" in Create(). Each of them
19 // is just an instance of this class, but because they are singletons they can
20 // be compared using "this" to pick different behaviors in Create() at runtime.
21 // This avoids the need to explicitly define boilerplate classes with no
22 // significant value.
23 //
24 // Embedders can of course specify a different implementation of this class
25 // using Set(CldDataHarnessFactory*), in which case Create() will have whatever
26 // custom behavior is desired.
27 base::LazyInstance<test::CldDataHarnessFactory>::Leaky g_wrapped_component =
28 LAZY_INSTANCE_INITIALIZER;
29 base::LazyInstance<test::CldDataHarnessFactory>::Leaky g_wrapped_standalone =
30 LAZY_INSTANCE_INITIALIZER;
31 base::LazyInstance<test::CldDataHarnessFactory>::Leaky g_wrapped_static =
32 LAZY_INSTANCE_INITIALIZER;
33
34 } // namespace
35
36 namespace test {
37
38 std::unique_ptr<CldDataHarness> CldDataHarnessFactory::CreateCldDataHarness() {
39 // Cheat: Since the three "canned" implementations are all well-known, just
40 // check to see if "this" points to one of the singletons and then return
41 // the right answer. Embedder-provided CldDataHarnessFactory implementations
42 // will of course not have this behavior.
43 if (this == GetStaticDataHarnessFactory()) {
44 return CldDataHarness::CreateStaticDataHarness();
45 }
46 if (this == GetStandaloneDataHarnessFactory()) {
47 return CldDataHarness::CreateStandaloneDataHarness();
48 }
49 if (this == GetComponentDataHarnessFactory()) {
50 return CldDataHarness::CreateComponentDataHarness();
51 }
52
53 // Embedder did something wrong, failed to override this method.
54 NOTREACHED() << "Subclass failed to override CreateCldDataHarness()";
55 return CldDataHarness::CreateStaticDataHarness();
56 }
57
58 CldDataHarnessFactory* CldDataHarnessFactory::Get() {
59 // First honor any factory set by the embedder.
60 if (g_instance != NULL) return g_instance;
61
62 // Fall back to defaults: try to find a compatible harness for the currently-
63 // configured CldDataSource.
64 translate::BrowserCldUtils::ConfigureDefaultDataProvider();
65 if (translate::CldDataSource::IsUsingStaticDataSource()) {
66 return GetStaticDataHarnessFactory();
67 }
68 if (translate::CldDataSource::IsUsingComponentDataSource()) {
69 return GetComponentDataHarnessFactory();
70 }
71 if (translate::CldDataSource::IsUsingStandaloneDataSource()) {
72 return GetStandaloneDataHarnessFactory();
73 }
74
75 // The CldDataSource must have been set by an embedder, but the embedder has
76 // not configured a corresponding CldDataHarnessFactory. This is an error; the
77 // embedder must specify a harness that works with the corresponding
78 // CldDataSource. Crash for debug builds and return a no-op harness for
79 // everything else.
80 NOTREACHED() << "No CLD data harness factory was configured!";
81 return GetStaticDataHarnessFactory();
82 }
83
84 // static
85 void CldDataHarnessFactory::Set(CldDataHarnessFactory* instance) {
86 g_instance = instance;
87 }
88
89 // static
90 CldDataHarnessFactory*
91 CldDataHarnessFactory::GetStaticDataHarnessFactory() {
92 return &g_wrapped_static.Get();
93 }
94
95 // static
96 CldDataHarnessFactory*
97 CldDataHarnessFactory::GetStandaloneDataHarnessFactory() {
98 return &g_wrapped_standalone.Get();
99 }
100
101 // static
102 CldDataHarnessFactory*
103 CldDataHarnessFactory::GetComponentDataHarnessFactory() {
104 return &g_wrapped_component.Get();
105 }
106
107 } // namespace test
OLDNEW
« no previous file with comments | « chrome/browser/translate/cld_data_harness_factory.h ('k') | chrome/browser/translate/component_cld_data_harness.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698