| Index: components/translate/content/common/cld_data_source.h
|
| diff --git a/components/translate/content/common/cld_data_source.h b/components/translate/content/common/cld_data_source.h
|
| index 07a56b0437a6894c0ff105608f86ff68a9126033..577c415f865124b528a52439050392b512d05ef7 100644
|
| --- a/components/translate/content/common/cld_data_source.h
|
| +++ b/components/translate/content/common/cld_data_source.h
|
| @@ -7,12 +7,29 @@
|
|
|
| #include <string>
|
|
|
| +#include "base/files/file_path.h"
|
| +#include "base/macros.h"
|
| +#include "base/synchronization/lock.h"
|
| +
|
| +namespace component_updater {
|
| + // For friend-class declaration, see private section at bottom of class.
|
| + class CldComponentInstallerTest;
|
| +}
|
| +
|
| namespace translate {
|
|
|
| // Provides high-level functionality related to a CLD Data Source.
|
| class CldDataSource {
|
|
|
| public:
|
| + // Generally not used by Chromium code, but available for embedders to
|
| + // configure additional data sources as subclasses.
|
| + // Chromium code should use the getters (GetStaticDataSource(),
|
| + // GetStandaloneDataSource(), and GetComponentDataSource()) and checkers
|
| + // (IsUsingStaticDataSource(), IsUsingStandaloneDataSource() and
|
| + // IsUsingComponentDataSource()) instead as appropriate.
|
| + CldDataSource();
|
| + virtual ~CldDataSource() {}
|
|
|
| // Returns the symbolic name of the data source. In the Chromium
|
| // open-source tree, the following data sources exist:
|
| @@ -24,24 +41,94 @@ class CldDataSource {
|
| // implementations.
|
| //
|
| // Other implementations based upon Chromium may provide CLD differently and
|
| - // may have other names. This method is primarily provided for those
|
| - // non-Chromium implementations; Chromium implementations should use the
|
| - // boolean methods in this class instead:
|
| - // ShouldRegisterForComponentUpdates()
|
| - // ShouldUseStandaloneDataFile()
|
| - static std::string GetName();
|
| -
|
| - // Returns true if the data source needs to receive updates from the
|
| - // Component Updater.
|
| - // This is only true if the data source name is "component", but makes caller
|
| - // logic more generic.
|
| - static bool ShouldRegisterForComponentUpdates();
|
| -
|
| - // Returns true if the data source needs to have the path to the CLD
|
| - // data file configured immediately because it is bundled with Chromium.
|
| - // This is only true if the data source name is "standalone", but makes
|
| - // caller logic more generic.
|
| - static bool ShouldUseStandaloneDataFile();
|
| + // may have other names.
|
| + // This method is threadsafe.
|
| + virtual std::string GetName();
|
| +
|
| + // For data sources that support a separate CLD data file, configures the path
|
| + // of that data file.
|
| + //
|
| + // The 'component' and 'standalone' data sources need this method to be called
|
| + // in order to locate the CLD data on disk.
|
| + // If the data source doesn't need or doesn't support such configuration, this
|
| + // function is a no-op. This is the case for, e.g., the static data source.
|
| + // This method is threadsafe.
|
| + void SetCldDataFilePath(const base::FilePath& path);
|
| +
|
| + // Returns the path most recently set by SetCldDataFilePath. The initial value
|
| + // prior to any such call is the empty path. If the data source doesn't
|
| + // support a data file, returns the empty path.
|
| + // This method is threadsafe.
|
| + base::FilePath GetCldDataFilePath();
|
| +
|
| + // Sets the default data source for this process, i.e. the data source to be
|
| + // used unless the embedder calls Set(CldDatasource*). This is the method
|
| + // that normal (i.e., non-test) Chromium code should use; embedders can and
|
| + // should use the unconditional Set(CldDataSource*) method instead. If a
|
| + // default data source has already been set, this method does nothing.
|
| + static void SetDefault(CldDataSource* data_source);
|
| +
|
| + // Unconditionally sets the data source for this process, overwriting any
|
| + // previously-configured default. Normal Chromium code should never use this
|
| + // method; it is provided for embedders to inject a data source from outside
|
| + // of the Chromium code base. Test code can also use this method to force the
|
| + // runtime to have a desired behavior.
|
| + static void Set(CldDataSource* data_source);
|
| +
|
| + // Returns the data source for this process. Guaranteed to never be null.
|
| + // If no instance has been set, this returns the same object obtained by
|
| + // calling GetStaticDataSource(), which is always safe but may fail to
|
| + // function if the CLD data is not *actually* statically linked.
|
| + static CldDataSource* Get();
|
| +
|
| + // Fetch the global instance of the "static" data source.
|
| + // Only use to call SetDefault(CldDataSource*) or Set(CldDataSource*).
|
| + static CldDataSource* GetStaticDataSource();
|
| +
|
| + // Returns true if and only if the data source returned by Get() is the
|
| + // "static" data source.
|
| + static bool IsUsingStaticDataSource();
|
| +
|
| + // Fetch the global instance of the "standalone" data source.
|
| + // Only use to call SetDefault(CldDataSource*) or Set(CldDataSource*).
|
| + static CldDataSource* GetStandaloneDataSource();
|
| +
|
| + // Returns true if and only if the data source returned by Get() is the
|
| + // "static" data source.
|
| + static bool IsUsingStandaloneDataSource();
|
| +
|
| + // Fetch the global instance of the "component" data source.
|
| + // Only use to call SetDefault(CldDataSource*) or Set(CldDataSource*).
|
| + static CldDataSource* GetComponentDataSource();
|
| +
|
| + // Returns true if and only if the data source returned by Get() is the
|
| + // "static" data source.
|
| + static bool IsUsingComponentDataSource();
|
| +
|
| + private:
|
| + friend class component_updater::CldComponentInstallerTest;
|
| +
|
| + // For unit test code ONLY. Under normal circumstances the calls to
|
| + // SetCldDataFilePath() and GetCldDataFilePath() have a DHECK intended to
|
| + // perform a sanity check on the runtime CLD data source configuration; no
|
| + // production code should be calling SetCldDataFilePath() or
|
| + // GetCldDataFilePath() unless the "component" or "standalone" data source is
|
| + // being used. Unit tests will generally be built with the "static" data
|
| + // source, and this method allows tests to bypass the DCHECK for testing
|
| + // purposes.
|
| + //
|
| + // Unit tests that use this function should use it in SetUp(), and then call
|
| + // EnableSanityChecksForTest() in TearDown() for maximum safety.
|
| + static void DisableSanityChecksForTest();
|
| +
|
| + // This method [re-]enables the sanity check disabled by
|
| + // DisableSanityChecksForTest().
|
| + static void EnableSanityChecksForTest();
|
| +
|
| + base::FilePath m_cached_filepath; // Guarded by m_file_lock
|
| + base::Lock m_file_lock; // Guards m_cached_filepath
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(CldDataSource);
|
| };
|
|
|
| } // namespace translate
|
|
|