| // Copyright 2019 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROMECAST_COMMON_QUERYABLE_DATA_H_ |
| #define CHROMECAST_COMMON_QUERYABLE_DATA_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include "base/containers/flat_map.h" |
| #include "base/no_destructor.h" |
| #include "base/sequence_checker.h" |
| #include "base/values.h" |
| |
| namespace chromecast { |
| |
| // This class is for use by both browser- and renderer-side, and tracks data |
| // that can be exposed directly to applications via JS APIs. The browser-side |
| // code uses it to expose key/value to renderer. The ipc to renderer is done by |
| // binding QueryableDataStorePointer on browser side to the implementation on |
| // the renderer side and calling the Set method. |
| // All methods should be accessed on the main thread. |
| // TODO(mdellaquila): Change the class implementation so that an instance of it |
| // is created for each RenderFrame |
| class QueryableData { |
| public: |
| using ValueMap = base::flat_map<std::string, base::Value>; |
| |
| QueryableData(const QueryableData&) = delete; |
| QueryableData& operator=(const QueryableData&) = delete; |
| |
| // Stores a value for the current process. If the key already exists, the |
| // value is replaced. |
| static void RegisterQueryableValue(const std::string& query_key, |
| base::Value initial_value); |
| |
| // Returns a pointer to the value for given key, if found, or null if not. |
| static const base::Value* Query(const std::string& query_key); |
| |
| static const ValueMap& GetValues(); |
| |
| private: |
| friend class base::NoDestructor<QueryableData>; |
| |
| QueryableData(); |
| ~QueryableData(); |
| |
| SEQUENCE_CHECKER(sequence_checker_); |
| ValueMap queryable_values_; |
| }; |
| |
| } // namespace chromecast |
| |
| #endif // CHROMECAST_COMMON_QUERYABLE_DATA_H_ |