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

Side by Side Diff: chrome/browser/translate/cld_data_harness_factory.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: Create a factory for test harnesses and use it Created 6 years, 2 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 | Annotate | Revision Log
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
11 namespace {
12
13 // This is the global instance managed by Get/Set
14 test::CldDataHarnessFactory* g_instance = NULL;
15
picksi1 2014/09/29 15:59:08 Is this the preferred chromium way of implementing
Andrew Hayden (chromium.org) 2014/10/30 14:25:14 Yes. However, I am going to cheat heavily and work
16 // Global instance wrappers
17 class ComponentCldDataHarnessFactory : public test::CldDataHarnessFactory {
18 public:
picksi1 2014/09/29 15:59:08 This looks like it is derived from a test class, w
Andrew Hayden (chromium.org) 2014/10/30 14:25:15 I think you'll like the new version much better.
19 virtual scoped_ptr<test::CldDataHarness> CreateCldDataHarness() OVERRIDE {
20 return test::CldDataHarness::COMPONENT();
21 }
22 };
23 struct WrappedComponent {
24 WrappedComponent() {
25 value = new ComponentCldDataHarnessFactory();
26 }
27 test::CldDataHarnessFactory* value;
picksi1 2014/09/29 15:59:08 Is the name 'value' correct here? Looks like it sh
Andrew Hayden (chromium.org) 2014/10/30 14:25:15 Idiomatic, but now deleted.
28 };
29 base::LazyInstance<WrappedComponent>::Leaky g_wrapped_component =
30 LAZY_INSTANCE_INITIALIZER;
31
32 class StandaloneCldDataHarnessFactory : public test::CldDataHarnessFactory {
33 public:
34 virtual scoped_ptr<test::CldDataHarness> CreateCldDataHarness() OVERRIDE {
35 return test::CldDataHarness::STANDALONE();
36 }
37 };
38 struct WrappedStandalone {
39 WrappedStandalone() {
40 value = new StandaloneCldDataHarnessFactory();
41 }
42 test::CldDataHarnessFactory* value;
43 };
44 base::LazyInstance<WrappedStandalone>::Leaky g_wrapped_standalone =
45 LAZY_INSTANCE_INITIALIZER;
46
47 class StaticCldDataHarnessFactory : public test::CldDataHarnessFactory {
48 public:
49 virtual scoped_ptr<test::CldDataHarness> CreateCldDataHarness() OVERRIDE {
50 return test::CldDataHarness::STATIC();
51 }
52 };
53 struct WrappedStatic {
54 WrappedStatic() {
55 value = new StaticCldDataHarnessFactory();
56 }
57 test::CldDataHarnessFactory* value;
58 };
59 base::LazyInstance<WrappedStatic>::Leaky g_wrapped_static =
60 LAZY_INSTANCE_INITIALIZER;
61
62 class NoneCldDataHarnessFactory : public test::CldDataHarnessFactory {
63 public:
64 virtual scoped_ptr<test::CldDataHarness> CreateCldDataHarness() OVERRIDE {
65 return test::CldDataHarness::NONE();
66 }
67 };
68 struct WrappedNone {
69 WrappedNone() {
70 value = new NoneCldDataHarnessFactory();
71 }
72 test::CldDataHarnessFactory* value;
73 };
74 base::LazyInstance<WrappedNone>::Leaky g_wrapped_none =
75 LAZY_INSTANCE_INITIALIZER;
76
77 } // namespace
78
79 namespace test {
80
81 CldDataHarnessFactory::CldDataHarnessFactory() {
82 // Nothing
83 }
84
85 CldDataHarnessFactory::~CldDataHarnessFactory() {
86 // Nothing
87 }
88
89 scoped_ptr<CldDataHarness> CldDataHarnessFactory::CreateCldDataHarness() {
90 scoped_ptr<CldDataHarness> result(new CldDataHarness());
91 return result.Pass();
92 }
93
94 CldDataHarnessFactory* CldDataHarnessFactory::Get() {
95 if (g_instance == NULL) {
96 return NONE();
97 }
98 return g_instance;
99 }
100
101 void CldDataHarnessFactory::Set(CldDataHarnessFactory* instance) {
102 g_instance = instance;
103 }
104
105 /* static */ CldDataHarnessFactory* CldDataHarnessFactory::NONE() {
106 return g_wrapped_none.Get().value;
107 }
108
109 /* static */ CldDataHarnessFactory* CldDataHarnessFactory::STATIC() {
110 return g_wrapped_static.Get().value;
111 }
112
113 /* static */ CldDataHarnessFactory* CldDataHarnessFactory::STANDALONE() {
114 return g_wrapped_standalone.Get().value;
115 }
116
117 /* static */ CldDataHarnessFactory* CldDataHarnessFactory::COMPONENT() {
118 return g_wrapped_component.Get().value;
119 }
120
121 } // namespace test
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698