Flutter Engine
service_protocol.h
Go to the documentation of this file.
1 // Copyright 2013 The Flutter 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 #ifndef FLUTTER_RUNTIME_SERVICE_PROTOCOL_H_
6 #define FLUTTER_RUNTIME_SERVICE_PROTOCOL_H_
7 
8 #include <map>
9 #include <set>
10 #include <string>
11 #include <string_view>
12 
13 #include "flutter/fml/compiler_specific.h"
14 #include "flutter/fml/macros.h"
15 #include "flutter/fml/synchronization/atomic_object.h"
16 #include "flutter/fml/synchronization/shared_mutex.h"
17 #include "flutter/fml/task_runner.h"
18 #include "rapidjson/document.h"
19 
20 namespace flutter {
21 
23  public:
24  static const std::string_view kScreenshotExtensionName;
25  static const std::string_view kScreenshotSkpExtensionName;
26  static const std::string_view kRunInViewExtensionName;
27  static const std::string_view kFlushUIThreadTasksExtensionName;
28  static const std::string_view kSetAssetBundlePathExtensionName;
29  static const std::string_view kGetDisplayRefreshRateExtensionName;
30  static const std::string_view kGetSkSLsExtensionName;
31  static const std::string_view kEstimateRasterCacheMemoryExtensionName;
32 
33  class Handler {
34  public:
35  struct Description {
36  int64_t isolate_port = 0 /* illegal port by default. */;
37  std::string isolate_name;
38 
40 
41  Description(int64_t p_isolate_port, std::string p_isolate_name)
42  : isolate_port(p_isolate_port),
43  isolate_name(std::move(p_isolate_name)) {}
44 
45  void Write(Handler* handler,
46  rapidjson::Value& value,
47  rapidjson::MemoryPoolAllocator<>& allocator) const;
48  };
49 
50  using ServiceProtocolMap = std::map<std::string_view, std::string_view>;
51 
53  std::string_view method) const = 0;
54 
55  virtual Description GetServiceProtocolDescription() const = 0;
56 
57  virtual bool HandleServiceProtocolMessage(
58  std::string_view method, // one if the extension names specified above.
59  const ServiceProtocolMap& params,
60  rapidjson::Document* response) = 0;
61  };
62 
64 
66 
67  void ToggleHooks(bool set);
68 
69  void AddHandler(Handler* handler, Handler::Description description);
70 
71  void RemoveHandler(Handler* handler);
72 
73  void SetHandlerDescription(Handler* handler,
74  Handler::Description description);
75 
76  private:
77  const std::set<std::string_view> endpoints_;
78  std::unique_ptr<fml::SharedMutex> handlers_mutex_;
79  std::map<Handler*, fml::AtomicObject<Handler::Description>> handlers_;
80 
81  [[nodiscard]] static bool HandleMessage(const char* method,
82  const char** param_keys,
83  const char** param_values,
84  intptr_t num_params,
85  void* user_data,
86  const char** json_object);
87  [[nodiscard]] static bool HandleMessage(
88  std::string_view method,
89  const Handler::ServiceProtocolMap& params,
90  ServiceProtocol* service_protocol,
91  rapidjson::Document* response);
92  [[nodiscard]] bool HandleMessage(std::string_view method,
93  const Handler::ServiceProtocolMap& params,
94  rapidjson::Document* response) const;
95 
96  [[nodiscard]] bool HandleListViewsMethod(rapidjson::Document* response) const;
97 
99 };
100 
101 } // namespace flutter
102 
103 #endif // FLUTTER_RUNTIME_SERVICE_PROTOCOL_H_
static const std::string_view kGetDisplayRefreshRateExtensionName
std::map< std::string_view, std::string_view > ServiceProtocolMap
static const std::string_view kRunInViewExtensionName
Definition: ref_ptr.h:252
void SetHandlerDescription(Handler *handler, Handler::Description description)
static const std::string_view kScreenshotExtensionName
static const std::string_view kFlushUIThreadTasksExtensionName
void Write(Handler *handler, rapidjson::Value &value, rapidjson::MemoryPoolAllocator<> &allocator) const
Description(int64_t p_isolate_port, std::string p_isolate_name)
virtual bool HandleServiceProtocolMessage(std::string_view method, const ServiceProtocolMap &params, rapidjson::Document *response)=0
void AddHandler(Handler *handler, Handler::Description description)
uint8_t value
virtual fml::RefPtr< fml::TaskRunner > GetServiceProtocolHandlerTaskRunner(std::string_view method) const =0
G_BEGIN_DECLS FlMethodCall gpointer user_data
virtual Description GetServiceProtocolDescription() const =0
void RemoveHandler(Handler *handler)
#define FML_DISALLOW_COPY_AND_ASSIGN(TypeName)
Definition: macros.h:27
static const std::string_view kScreenshotSkpExtensionName
static const std::string_view kSetAssetBundlePathExtensionName
static const std::string_view kGetSkSLsExtensionName
static const std::string_view kEstimateRasterCacheMemoryExtensionName