• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1diff --git a/BUILD.gn b/BUILD.gn
2index e1f11bc6e2..cf3f6a2457 100644
3--- a/BUILD.gn
4+++ b/BUILD.gn
5@@ -96,6 +96,10 @@ group("gn_all") {
6     "//url:url_unittests",
7   ]
8
9+  deps += [
10+    "//ohos_nweb:libnweb_adapter",
11+  ]
12+
13   if (!is_component_build) {
14     deps += [ "//third_party/abseil-cpp:absl_tests" ]
15   }
16diff --git a/base/base_paths_ohos.cc b/base/base_paths_ohos.cc
17index 2e507f8c9d..ec03cd53d7 100644
18--- a/base/base_paths_ohos.cc
19+++ b/base/base_paths_ohos.cc
20@@ -1,4 +1,4 @@
21-// Copyright (c) 2022 The Chromium Authors. All rights reserved.
22+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
23 // Use of this source code is governed by a BSD-style license that can be
24 // found in the LICENSE file.
25
26diff --git a/base/base_paths_ohos.h b/base/base_paths_ohos.h
27index b85158a319..0b24760f85 100644
28--- a/base/base_paths_ohos.h
29+++ b/base/base_paths_ohos.h
30@@ -1,4 +1,4 @@
31-// Copyright (c) 2022 The Chromium Authors. All rights reserved.
32+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
33 // Use of this source code is governed by a BSD-style license that can be
34 // found in the LICENSE file.
35
36diff --git a/base/debug/stack_trace_ohos.cc b/base/debug/stack_trace_ohos.cc
37index 199b6d679a..5815cc93ca 100644
38--- a/base/debug/stack_trace_ohos.cc
39+++ b/base/debug/stack_trace_ohos.cc
40@@ -1,4 +1,4 @@
41-// Copyright (c) 2022 The Chromium Authors. All rights reserved.
42+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
43 // Use of this source code is governed by a BSD-style license that can be
44 // found in the LICENSE file.
45
46diff --git a/base/message_loop/message_pump_ohos.cc b/base/message_loop/message_pump_ohos.cc
47index b705919891..b49e2a76cb 100644
48--- a/base/message_loop/message_pump_ohos.cc
49+++ b/base/message_loop/message_pump_ohos.cc
50@@ -1,7 +1,3 @@
51-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
52-// Use of this source code is governed by a BSD-style license that can be
53-// found in the LICENSE file.
54-
55 #include "base/message_loop/message_pump_ohos.h"
56
57 #include <errno.h>
58diff --git a/base/message_loop/message_pump_ohos.h b/base/message_loop/message_pump_ohos.h
59index e1a1c70c73..1997c75f85 100644
60--- a/base/message_loop/message_pump_ohos.h
61+++ b/base/message_loop/message_pump_ohos.h
62@@ -1,7 +1,3 @@
63-// Copyright (c) 2022 The Chromium Authors. All rights reserved.
64-// Use of this source code is governed by a BSD-style license that can be
65-// found in the LICENSE file.
66-
67 #ifndef BASE_MESSAGE_LOOP_MESSAGE_PUMP_OHOS_H_
68 #define BASE_MESSAGE_LOOP_MESSAGE_PUMP_OHOS_H_
69
70diff --git a/base/process/internal_linux.h b/base/process/internal_linux.h
71index 10fa85a8fd..2a05361480 100644
72--- a/base/process/internal_linux.h
73+++ b/base/process/internal_linux.h
74@@ -11,6 +11,7 @@
75 #include <stddef.h>
76 #include <stdint.h>
77 #include <unistd.h>
78+#include <string.h>
79
80 #include "base/files/dir_reader_posix.h"
81 #include "base/files/file_path.h"
82diff --git a/build/config/ohos/BUILD.gn b/build/config/ohos/BUILD.gn
83index 3e9b09269d..534f0020d7 100644
84--- a/build/config/ohos/BUILD.gn
85+++ b/build/config/ohos/BUILD.gn
86@@ -1,4 +1,4 @@
87-# Copyright 2022 The Chromium Authors. All rights reserved.
88+# Copyright 2022 The Huawei Authors. All rights reserved.
89 # Use of this source code is governed by a BSD-style license that can be
90 # found in the LICENSE file.
91
92diff --git a/build/config/ohos/abi.gni b/build/config/ohos/abi.gni
93index 71cfb23ccc..146e385624 100644
94--- a/build/config/ohos/abi.gni
95+++ b/build/config/ohos/abi.gni
96@@ -1,4 +1,4 @@
97-# Copyright 2022 The Chromium Authors. All rights reserved.
98+# Copyright 2022 The Huawei Authors. All rights reserved.
99 # Use of this source code is governed by a BSD-style license that can be
100 # found in the LICENSE file.
101
102diff --git a/build/config/ohos/config.gni b/build/config/ohos/config.gni
103index 951d4a7f26..c2d04f6262 100644
104--- a/build/config/ohos/config.gni
105+++ b/build/config/ohos/config.gni
106@@ -1,4 +1,4 @@
107-# Copyright 2022 The Chromium Authors. All rights reserved.
108+# Copyright 2022 The Huawei Authors. All rights reserved.
109 # Use of this source code is governed by a BSD-style license that can be
110 # found in the LICENSE file.
111
112@@ -69,7 +69,7 @@ if (is_ohos) {
113       "$ohos_build_root/base/location/utils/include",
114       "$ohos_build_root/base/location/interfaces/innerkits/locator_standard/include",
115       "$ohos_build_root/base/location/location_common/common/include",
116-      "$ohos_build_root/utils/system/safwk/native/include",
117+      "$ohos_build_root/foundation/distributedschedule/samgr/interfaces/innerkits/samgr_proxy/include",
118     ]
119     ohos_libs_dir = [
120       "$ohos_build_root/out/ohos-arm-release/packages/phone/system/lib",
121diff --git a/build/toolchain/ohos/BUILD.gn b/build/toolchain/ohos/BUILD.gn
122index c8540c7b3a..2046bc1321 100644
123--- a/build/toolchain/ohos/BUILD.gn
124+++ b/build/toolchain/ohos/BUILD.gn
125@@ -1,4 +1,4 @@
126-# Copyright 2022 The Chromium Authors. All rights reserved.
127+# Copyright 2022 The Huawei Authors. All rights reserved.
128 # Use of this source code is governed by a BSD-style license that can be
129 # found in the LICENSE file.
130
131diff --git a/buildtools/third_party/libc++/trunk/test/support/test_memory_resource.h b/buildtools/third_party/libc++/trunk/test/support/test_memory_resource.h
132index 1a0d722089..34a9988919 100644
133--- a/buildtools/third_party/libc++/trunk/test/support/test_memory_resource.h
134+++ b/buildtools/third_party/libc++/trunk/test/support/test_memory_resource.h
135@@ -98,7 +98,7 @@ protected:
136 private:
137     mutable AllocController C;
138     mutable Provider P;
139-    DISALLOW_COPY(TestResourceImp);
140+    DISALLOW_COPY_BASE(TestResourceImp);
141 };
142
143 template <class Provider, int N>
144@@ -117,7 +117,7 @@ struct NullProvider {
145     void deallocate(void*, size_t, size_t) {}
146     void reset() {}
147 private:
148-    DISALLOW_COPY(NullProvider);
149+  DISALLOW_COPY_BASE(NullProvider);
150 };
151
152 struct NewDeleteProvider {
153@@ -126,7 +126,7 @@ struct NewDeleteProvider {
154     void deallocate(void* p, size_t, size_t) { ::operator delete(p); }
155     void reset() {}
156 private:
157-    DISALLOW_COPY(NewDeleteProvider);
158+  DISALLOW_COPY_BASE(NewDeleteProvider);
159 };
160
161 template <size_t Size = 4096 * 10> // 10 pages worth of memory.
162@@ -157,7 +157,7 @@ struct BufferProvider {
163         space = Size;
164     }
165 private:
166-    DISALLOW_COPY(BufferProvider);
167+  DISALLOW_COPY_BASE(BufferProvider);
168 };
169
170 using NullResource = TestResourceImp<NullProvider, 0>;
171diff --git a/cc/mojom/BUILD.gn b/cc/mojom/BUILD.gn
172index e1392a9ec2..3d95042417 100644
173--- a/cc/mojom/BUILD.gn
174+++ b/cc/mojom/BUILD.gn
175@@ -21,8 +21,8 @@ component("shared_mojom_traits") {
176
177 mojom("mojom") {
178   generate_java = true
179-  if (is_android) {
180-    enabled_features = [ "is_android" ]
181+  if (is_android || is_ohos) {
182+    enabled_features = [ "is_android_or_ohos" ]
183   }
184   sources = [
185     "browser_controls_params.mojom",
186diff --git a/cc/mojom/render_frame_metadata.mojom b/cc/mojom/render_frame_metadata.mojom
187index 3a087f778c..406647ea11 100644
188--- a/cc/mojom/render_frame_metadata.mojom
189+++ b/cc/mojom/render_frame_metadata.mojom
190@@ -1,3 +1,4 @@
191+// Copyright (c) 2022 Huawei Device Co., Ltd.
192 // Copyright 2018 The Chromium Authors. All rights reserved.
193 // Use of this source code is governed by a BSD-style license that can be
194 // found in the LICENSE file.
195@@ -106,7 +107,7 @@ struct RenderFrameMetadata {
196   [EnableIf=is_android]
197   gfx.mojom.SizeF scrollable_viewport_size;
198
199-  [EnableIf=is_android]
200+  [EnableIf=is_android_or_ohos]
201   gfx.mojom.SizeF root_layer_size;
202
203   [EnableIf=is_android]
204diff --git a/cc/mojom/render_frame_metadata_mojom_traits.cc b/cc/mojom/render_frame_metadata_mojom_traits.cc
205index b9eecfbf56..cef152a29c 100644
206--- a/cc/mojom/render_frame_metadata_mojom_traits.cc
207+++ b/cc/mojom/render_frame_metadata_mojom_traits.cc
208@@ -52,6 +52,9 @@ bool StructTraits<
209 #if defined(OS_ANDROID)
210          data.ReadScrollableViewportSize(&out->scrollable_viewport_size) &&
211          data.ReadRootLayerSize(&out->root_layer_size) &&
212+#endif
213+#if defined(OS_OHOS)
214+         data.ReadRootLayerSize(&out->root_layer_size) &&
215 #endif
216          data.ReadViewportSizeInPixels(&out->viewport_size_in_pixels) &&
217          data.ReadLocalSurfaceId(&out->local_surface_id) &&
218diff --git a/cc/mojom/render_frame_metadata_mojom_traits.h b/cc/mojom/render_frame_metadata_mojom_traits.h
219index 66a3e7e5e1..628292831b 100644
220--- a/cc/mojom/render_frame_metadata_mojom_traits.h
221+++ b/cc/mojom/render_frame_metadata_mojom_traits.h
222@@ -145,6 +145,13 @@ struct COMPONENT_EXPORT(CC_SHARED_MOJOM_TRAITS)
223   }
224 #endif
225
226+#if defined(OS_OHOS)
227+  static const gfx::SizeF& root_layer_size(
228+      const cc::RenderFrameMetadata& metadata) {
229+    return metadata.root_layer_size;
230+  }
231+#endif
232+
233   static bool Read(cc::mojom::RenderFrameMetadataDataView data,
234                    cc::RenderFrameMetadata* out);
235 };
236diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
237index edf67be0fa..4b51af0bd7 100644
238--- a/cc/trees/layer_tree_host_impl.cc
239+++ b/cc/trees/layer_tree_host_impl.cc
240@@ -2282,6 +2282,10 @@ RenderFrameMetadata LayerTreeHostImpl::MakeRenderFrameMetadata(
241       frame->render_passes.back()->has_transparent_background;
242 #endif
243
244+#if defined(OS_OHOS)
245+  metadata.root_layer_size = active_tree_->ScrollableSize();
246+#endif
247+
248   if (last_draw_render_frame_metadata_) {
249     const float last_root_scroll_offset_y =
250         last_draw_render_frame_metadata_->root_scroll_offset
251diff --git a/cc/trees/render_frame_metadata.cc b/cc/trees/render_frame_metadata.cc
252index 0efa349668..7e3fe221ab 100644
253--- a/cc/trees/render_frame_metadata.cc
254+++ b/cc/trees/render_frame_metadata.cc
255@@ -1,3 +1,4 @@
256+// Copyright (c) 2022 Huawei Device Co., Ltd.
257 // Copyright 2018 The Chromium Authors. All rights reserved.
258 // Use of this source code is governed by a BSD-style license that can be
259 // found in the LICENSE file.
260@@ -36,6 +37,9 @@ bool RenderFrameMetadata::operator==(const RenderFrameMetadata& other) const {
261          external_page_scale_factor == other.external_page_scale_factor &&
262          top_controls_height == other.top_controls_height &&
263          top_controls_shown_ratio == other.top_controls_shown_ratio &&
264+#if defined(OS_OHOS)
265+         root_layer_size == other.root_layer_size &&
266+#endif
267 #if defined(OS_ANDROID)
268          bottom_controls_height == other.bottom_controls_height &&
269          bottom_controls_shown_ratio == other.bottom_controls_shown_ratio &&
270diff --git a/cc/trees/render_frame_metadata.h b/cc/trees/render_frame_metadata.h
271index 589a022fe4..88091333f3 100644
272--- a/cc/trees/render_frame_metadata.h
273+++ b/cc/trees/render_frame_metadata.h
274@@ -1,3 +1,4 @@
275+// Copyright (c) 2022 Huawei Device Co., Ltd.
276 // Copyright 2018 The Chromium Authors. All rights reserved.
277 // Use of this source code is governed by a BSD-style license that can be
278 // found in the LICENSE file.
279@@ -115,6 +116,9 @@ class CC_EXPORT RenderFrameMetadata {
280   viz::VerticalScrollDirection new_vertical_scroll_direction =
281       viz::VerticalScrollDirection::kNull;
282
283+#if defined(OS_OHOS)
284+  gfx::SizeF root_layer_size;
285+#endif
286 #if defined(OS_ANDROID)
287   // Used to position Android bottom bar, whose position is computed by the
288   // renderer compositor.
289diff --git a/cef/BUILD.gn b/cef/BUILD.gn
290index 776db090a5..19a8c155ce 100644
291--- a/cef/BUILD.gn
292+++ b/cef/BUILD.gn
293@@ -526,6 +526,8 @@ static_library("libcef_static") {
294     "libcef/browser/file_dialog_manager.h",
295     "libcef/browser/frame_host_impl.cc",
296     "libcef/browser/frame_host_impl.h",
297+    "libcef/browser/icon_helper.cc",
298+    "libcef/browser/icon_helper.h",
299     "libcef/browser/image_impl.cc",
300     "libcef/browser/image_impl.h",
301     "libcef/browser/iothread_state.cc",
302@@ -591,6 +593,8 @@ static_library("libcef_static") {
303     "libcef/browser/net_service/stream_reader_url_loader.h",
304     "libcef/browser/net_service/url_loader_factory_getter.cc",
305     "libcef/browser/net_service/url_loader_factory_getter.h",
306+    "libcef/browser/net_service/net_helpers.cc",
307+    "libcef/browser/net_service/net_helpers.h",
308     "libcef/browser/origin_whitelist_impl.cc",
309     "libcef/browser/origin_whitelist_impl.h",
310     "libcef/browser/osr/browser_platform_delegate_osr.cc",
311@@ -612,6 +616,14 @@ static_library("libcef_static") {
312     "libcef/browser/osr/web_contents_view_osr.cc",
313     "libcef/browser/osr/web_contents_view_osr.h",
314     "libcef/browser/path_util_impl.cc",
315+    "libcef/browser/permission/alloy_access_request.cc",
316+    "libcef/browser/permission/alloy_access_request.h",
317+    "libcef/browser/permission/alloy_geolocation_access.cc",
318+    "libcef/browser/permission/alloy_geolocation_access.h",
319+    "libcef/browser/permission/alloy_permission_manager.cc",
320+    "libcef/browser/permission/alloy_permission_manager.h",
321+    "libcef/browser/permission/alloy_permission_request_handler.cc",
322+    "libcef/browser/permission/alloy_permission_request_handler.h",
323     "libcef/browser/plugins/plugin_service_filter.cc",
324     "libcef/browser/plugins/plugin_service_filter.h",
325     "libcef/browser/prefs/browser_prefs.cc",
326@@ -765,6 +777,8 @@ static_library("libcef_static") {
327     "libcef/features/runtime_checks.h",
328     "libcef/renderer/alloy/alloy_content_renderer_client.cc",
329     "libcef/renderer/alloy/alloy_content_renderer_client.h",
330+    "libcef/renderer/alloy/alloy_content_settings_client.cc",
331+    "libcef/renderer/alloy/alloy_content_settings_client.h",
332     "libcef/renderer/alloy/alloy_render_frame_observer.cc",
333     "libcef/renderer/alloy/alloy_render_frame_observer.h",
334     "libcef/renderer/alloy/alloy_render_thread_observer.cc",
335@@ -804,6 +818,31 @@ static_library("libcef_static") {
336     # For Chrome runtime support.
337     "//chrome/app/chrome_main_delegate.cc",
338     "//chrome/app/chrome_main_delegate.h",
339+
340+    # For Javascript
341+    "libcef/browser/javascript/oh_javascript_injector.h",
342+    "libcef/browser/javascript/oh_javascript_injector.cc",
343+    "libcef/browser/javascript/oh_gin_javascript_bridge_dispatcher_host.h",
344+    "libcef/browser/javascript/oh_gin_javascript_bridge_dispatcher_host.cc",
345+    "libcef/browser/javascript/oh_gin_javascript_bridge_message_filter.h",
346+    "libcef/browser/javascript/oh_gin_javascript_bridge_message_filter.cc",
347+    "libcef/browser/javascript/oh_gin_javascript_bridge_object_deletion_message_filter.h",
348+    "libcef/browser/javascript/oh_gin_javascript_bridge_object_deletion_message_filter.cc",
349+    "libcef/common/javascript/oh_gin_javascript_bridge_messages.h",
350+    "libcef/common/javascript/oh_gin_javascript_bridge_message_generator.h",
351+    "libcef/common/javascript/oh_gin_javascript_bridge_message_generator.cc",
352+    "libcef/common/javascript/oh_gin_javascript_bridge_errors.h",
353+    "libcef/common/javascript/oh_gin_javascript_bridge_errors.cc",
354+    "libcef/common/javascript/oh_gin_javascript_bridge_value.h",
355+    "libcef/common/javascript/oh_gin_javascript_bridge_value.cc",
356+    "libcef/renderer/javascript/oh_gin_javascript_bridge_dispatcher.h",
357+    "libcef/renderer/javascript/oh_gin_javascript_bridge_dispatcher.cc",
358+    "libcef/renderer/javascript/oh_gin_javascript_bridge_object.h",
359+    "libcef/renderer/javascript/oh_gin_javascript_bridge_object.cc",
360+    "libcef/renderer/javascript/oh_gin_javascript_function_invocation_helper.h",
361+    "libcef/renderer/javascript/oh_gin_javascript_function_invocation_helper.cc",
362+    "libcef/renderer/javascript/oh_gin_javascript_bridge_value_converter.h",
363+    "libcef/renderer/javascript/oh_gin_javascript_bridge_value_converter.cc",
364   ]
365
366   configs += [
367@@ -1238,6 +1277,9 @@ static_library("libcef_static") {
368           # Part of //ui/aura:test_support which is testingonly.
369           "//ui/aura/test/aura_test_utils.cc",
370           "//ui/aura/test/aura_test_utils.h",
371+          # Part of //ui/events:test_support which is testingonly.
372+          # "//ui/events/test/x11_event_waiter.cc",
373+          # "//ui/events/test/x11_event_waiter.h",
374         ]
375       }
376     }
377@@ -1642,7 +1684,7 @@ if (is_mac) {
378     info_plist_target = ":cef_framework_plist"
379   }
380 } else {
381-  shared_library("libcef") {
382+  shared_library("libweb_engine") {
383     sources = includes_common +
384               gypi_paths.autogen_cpp_includes +
385               gypi_paths2.includes_capi +
386@@ -2091,7 +2133,7 @@ if (is_mac) {
387               gypi_paths2.cefclient_sources_renderer
388
389     deps = [
390-      ":libcef",
391+      ":libweb_engine",
392       ":libcef_dll_wrapper",
393     ]
394
395@@ -2179,7 +2221,7 @@ if (is_mac) {
396               gypi_paths2.cefsimple_sources_common
397
398     deps = [
399-      ":libcef",
400+      ":libweb_engine",
401       ":libcef_dll_wrapper",
402     ]
403
404@@ -2247,7 +2289,7 @@ if (is_mac) {
405               gypi_paths2.ceftests_sources_common
406
407     deps = [
408-      ":libcef",
409+      ":libweb_engine",
410       ":libcef_dll_wrapper",
411       "//testing/gtest",
412     ]
413@@ -2290,4 +2332,60 @@ if (is_mac) {
414       configs += [ "//build/config/gcc:rpath_for_built_shared_libraries" ]
415     }
416   }
417+
418+  # ohosclient
419+  if (is_linux || is_ohos) {
420+    copy("copy_ohosclient_files") {
421+      sources = gypi_paths2.shared_sources_resources +
422+                gypi_paths2.ohosclient_sources_resources
423+      outputs = [ "${root_out_dir}/ohosclient_files/{{source_file_part}}" ]
424+    }
425+
426+    copy("copy_ohosclient_files_extensions_set_page_color") {
427+      sources = gypi_paths2.ohosclient_sources_resources_extensions_set_page_color
428+      outputs = [ "${root_out_dir}/ohosclient_files/extensions/set_page_color/{{source_file_part}}" ]
429+    }
430+  }
431+
432+  executable("ohosclient") {
433+    sources = includes_common +
434+              gypi_paths2.includes_wrapper +
435+              gypi_paths2.shared_sources_browser +
436+              gypi_paths2.shared_sources_common +
437+              gypi_paths2.shared_sources_renderer +
438+              gypi_paths2.ohosclient_sources_browser +
439+              gypi_paths2.ohosclient_sources_common +
440+              gypi_paths2.ohosclient_sources_renderer
441+
442+    deps = [
443+      ":libweb_engine",
444+      ":libcef_dll_wrapper",
445+    ]
446+
447+    defines = [
448+      "CEF_USE_SANDBOX",
449+    ]
450+
451+    if (is_linux || is_ohos) {
452+      sources += includes_linux +
453+                 gypi_paths2.shared_sources_ohos +
454+                 gypi_paths2.ohosclient_sources_linux
455+
456+      deps += [
457+        ":copy_ohosclient_files",
458+        ":copy_ohosclient_files_extensions_set_page_color",
459+      ]
460+
461+      if (is_component_build) {
462+        if (use_allocator=="tcmalloc") {
463+          # Link to base to initialize tcmalloc allocator shims, otherwise
464+          # base::allocator::IsAllocatorInitialized check fails
465+          deps += [ "//base" ]
466+        }
467+      } else {
468+        # Set rpath to find our own libfreetype even in a non-component build.
469+        configs += [ "//build/config/gcc:rpath_for_built_shared_libraries" ]
470+      }
471+    }
472+  }
473 }
474diff --git a/cef/CHROMIUM_BUILD_COMPATIBILITY.txt b/cef/CHROMIUM_BUILD_COMPATIBILITY.txt
475index 99fa87f10b..5dbbfb462b 100644
476--- a/cef/CHROMIUM_BUILD_COMPATIBILITY.txt
477+++ b/cef/CHROMIUM_BUILD_COMPATIBILITY.txt
478@@ -7,6 +7,6 @@
479 # https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding
480
481 {
482-  'chromium_checkout': 'refs/tags/91.0.4472.164',
483+  'chromium_checkout': 'refs/tags/91.0.4472.114',
484   'depot_tools_checkout': '61bf6e8d69'
485 }
486diff --git a/cef/cef_paths.gypi b/cef/cef_paths.gypi
487index b7980f952e..ba3e786a57 100644
488--- a/cef/cef_paths.gypi
489+++ b/cef/cef_paths.gypi
490@@ -1,4 +1,4 @@
491-# Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
492+# Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
493 # reserved. Use of this source code is governed by a BSD-style license that
494 # can be found in the LICENSE file.
495 #
496@@ -8,7 +8,7 @@
497 # by hand. See the translator.README.txt file in the tools directory for
498 # more information.
499 #
500-# $hash=f1877c7a493342351e284cb6c14e6f223461facb$
501+# $hash=36817748589a28de2402aa1476d2820f0c3f7ead$
502 #
503
504 {
505@@ -52,6 +52,7 @@
506       'include/cef_origin_whitelist.h',
507       'include/cef_parser.h',
508       'include/cef_path_util.h',
509+      'include/cef_permission_request.h',
510       'include/cef_print_handler.h',
511       'include/cef_print_settings.h',
512       'include/cef_process_message.h',
513@@ -149,6 +150,7 @@
514       'include/capi/cef_origin_whitelist_capi.h',
515       'include/capi/cef_parser_capi.h',
516       'include/capi/cef_path_util_capi.h',
517+      'include/capi/cef_permission_request_capi.h',
518       'include/capi/cef_print_handler_capi.h',
519       'include/capi/cef_print_settings_capi.h',
520       'include/capi/cef_process_message_capi.h',
521@@ -208,6 +210,8 @@
522       'include/capi/views/cef_window_delegate_capi.h',
523     ],
524     'autogen_library_side': [
525+      'libcef_dll/cpptoc/access_request_cpptoc.cc',
526+      'libcef_dll/cpptoc/access_request_cpptoc.h',
527       'libcef_dll/ctocpp/accessibility_handler_ctocpp.cc',
528       'libcef_dll/ctocpp/accessibility_handler_ctocpp.h',
529       'libcef_dll/ctocpp/app_ctocpp.cc',
530@@ -226,6 +230,8 @@
531       'libcef_dll/cpptoc/browser_cpptoc.h',
532       'libcef_dll/cpptoc/browser_host_cpptoc.cc',
533       'libcef_dll/cpptoc/browser_host_cpptoc.h',
534+      'libcef_dll/cpptoc/browser_permission_request_delegate_cpptoc.cc',
535+      'libcef_dll/cpptoc/browser_permission_request_delegate_cpptoc.h',
536       'libcef_dll/ctocpp/browser_process_handler_ctocpp.cc',
537       'libcef_dll/ctocpp/browser_process_handler_ctocpp.h',
538       'libcef_dll/cpptoc/views/browser_view_cpptoc.cc',
539@@ -300,6 +306,8 @@
540       'libcef_dll/ctocpp/focus_handler_ctocpp.h',
541       'libcef_dll/cpptoc/frame_cpptoc.cc',
542       'libcef_dll/cpptoc/frame_cpptoc.h',
543+      'libcef_dll/cpptoc/geolocation_acess_cpptoc.cc',
544+      'libcef_dll/cpptoc/geolocation_acess_cpptoc.h',
545       'libcef_dll/cpptoc/get_extension_resource_callback_cpptoc.cc',
546       'libcef_dll/cpptoc/get_extension_resource_callback_cpptoc.h',
547       'libcef_dll/cpptoc/image_cpptoc.cc',
548@@ -308,6 +316,8 @@
549       'libcef_dll/cpptoc/jsdialog_callback_cpptoc.h',
550       'libcef_dll/ctocpp/jsdialog_handler_ctocpp.cc',
551       'libcef_dll/ctocpp/jsdialog_handler_ctocpp.h',
552+      'libcef_dll/ctocpp/java_script_result_callback_ctocpp.cc',
553+      'libcef_dll/ctocpp/java_script_result_callback_ctocpp.h',
554       'libcef_dll/ctocpp/keyboard_handler_ctocpp.cc',
555       'libcef_dll/ctocpp/keyboard_handler_ctocpp.h',
556       'libcef_dll/cpptoc/views/label_button_cpptoc.cc',
557@@ -354,6 +364,8 @@
558       'libcef_dll/ctocpp/views/panel_delegate_ctocpp.h',
559       'libcef_dll/ctocpp/pdf_print_callback_ctocpp.cc',
560       'libcef_dll/ctocpp/pdf_print_callback_ctocpp.h',
561+      'libcef_dll/ctocpp/permission_request_ctocpp.cc',
562+      'libcef_dll/ctocpp/permission_request_ctocpp.h',
563       'libcef_dll/cpptoc/post_data_cpptoc.cc',
564       'libcef_dll/cpptoc/post_data_cpptoc.h',
565       'libcef_dll/cpptoc/post_data_element_cpptoc.cc',
566@@ -518,6 +530,8 @@
567       'libcef_dll/cpptoc/zip_reader_cpptoc.h',
568     ],
569     'autogen_client_side': [
570+      'libcef_dll/ctocpp/access_request_ctocpp.cc',
571+      'libcef_dll/ctocpp/access_request_ctocpp.h',
572       'libcef_dll/cpptoc/accessibility_handler_cpptoc.cc',
573       'libcef_dll/cpptoc/accessibility_handler_cpptoc.h',
574       'libcef_dll/cpptoc/app_cpptoc.cc',
575@@ -536,6 +550,8 @@
576       'libcef_dll/ctocpp/browser_ctocpp.h',
577       'libcef_dll/ctocpp/browser_host_ctocpp.cc',
578       'libcef_dll/ctocpp/browser_host_ctocpp.h',
579+      'libcef_dll/ctocpp/browser_permission_request_delegate_ctocpp.cc',
580+      'libcef_dll/ctocpp/browser_permission_request_delegate_ctocpp.h',
581       'libcef_dll/cpptoc/browser_process_handler_cpptoc.cc',
582       'libcef_dll/cpptoc/browser_process_handler_cpptoc.h',
583       'libcef_dll/ctocpp/views/browser_view_ctocpp.cc',
584@@ -610,6 +626,8 @@
585       'libcef_dll/cpptoc/focus_handler_cpptoc.h',
586       'libcef_dll/ctocpp/frame_ctocpp.cc',
587       'libcef_dll/ctocpp/frame_ctocpp.h',
588+      'libcef_dll/ctocpp/geolocation_acess_ctocpp.cc',
589+      'libcef_dll/ctocpp/geolocation_acess_ctocpp.h',
590       'libcef_dll/ctocpp/get_extension_resource_callback_ctocpp.cc',
591       'libcef_dll/ctocpp/get_extension_resource_callback_ctocpp.h',
592       'libcef_dll/ctocpp/image_ctocpp.cc',
593@@ -618,6 +636,8 @@
594       'libcef_dll/ctocpp/jsdialog_callback_ctocpp.h',
595       'libcef_dll/cpptoc/jsdialog_handler_cpptoc.cc',
596       'libcef_dll/cpptoc/jsdialog_handler_cpptoc.h',
597+      'libcef_dll/cpptoc/java_script_result_callback_cpptoc.cc',
598+      'libcef_dll/cpptoc/java_script_result_callback_cpptoc.h',
599       'libcef_dll/cpptoc/keyboard_handler_cpptoc.cc',
600       'libcef_dll/cpptoc/keyboard_handler_cpptoc.h',
601       'libcef_dll/ctocpp/views/label_button_ctocpp.cc',
602@@ -664,6 +684,8 @@
603       'libcef_dll/cpptoc/views/panel_delegate_cpptoc.h',
604       'libcef_dll/cpptoc/pdf_print_callback_cpptoc.cc',
605       'libcef_dll/cpptoc/pdf_print_callback_cpptoc.h',
606+      'libcef_dll/cpptoc/permission_request_cpptoc.cc',
607+      'libcef_dll/cpptoc/permission_request_cpptoc.h',
608       'libcef_dll/ctocpp/post_data_ctocpp.cc',
609       'libcef_dll/ctocpp/post_data_ctocpp.h',
610       'libcef_dll/ctocpp/post_data_element_ctocpp.cc',
611diff --git a/cef/cef_paths2.gypi b/cef/cef_paths2.gypi
612index 0ad653c010..a9764b8772 100644
613--- a/cef/cef_paths2.gypi
614+++ b/cef/cef_paths2.gypi
615@@ -201,6 +201,9 @@
616       'tests/shared/browser/main_message_loop_external_pump_linux.cc',
617       'tests/shared/browser/resource_util_posix.cc',
618     ],
619+    'shared_sources_ohos': [
620+      'tests/shared/browser/resource_util_posix.cc',
621+    ],
622     'shared_sources_mac': [
623       'tests/shared/browser/main_message_loop_external_pump_mac.mm',
624       'tests/shared/browser/resource_util_mac.mm',
625@@ -603,5 +606,98 @@
626     'ceftests_sources_linux': [
627       'tests/ceftests/resource_util_linux.cc',
628     ],
629+    'ohosclient_sources_browser': [
630+      'tests/ohosclient/browser/browser_window.cc',
631+      'tests/ohosclient/browser/browser_window.h',
632+      'tests/ohosclient/browser/bytes_write_handler.cc',
633+      'tests/ohosclient/browser/bytes_write_handler.h',
634+      'tests/ohosclient/browser/client_app_delegates_browser.cc',
635+      'tests/ohosclient/browser/client_browser.cc',
636+      'tests/ohosclient/browser/client_browser.h',
637+      'tests/ohosclient/browser/client_handler.cc',
638+      'tests/ohosclient/browser/client_handler.h',
639+      'tests/ohosclient/browser/client_handler_osr.cc',
640+      'tests/ohosclient/browser/client_handler_osr.h',
641+      'tests/ohosclient/browser/client_handler_std.cc',
642+      'tests/ohosclient/browser/client_handler_std.h',
643+      'tests/ohosclient/browser/client_types.h',
644+      'tests/ohosclient/browser/image_cache.cc',
645+      'tests/ohosclient/browser/image_cache.h',
646+      'tests/ohosclient/browser/main_context.cc',
647+      'tests/ohosclient/browser/main_context.h',
648+      'tests/ohosclient/browser/main_context_impl.cc',
649+      'tests/ohosclient/browser/main_context_impl.h',
650+      'tests/ohosclient/browser/osr_dragdrop_events.h',
651+      'tests/ohosclient/browser/osr_renderer.h',
652+      'tests/ohosclient/browser/osr_renderer.cc',
653+      'tests/ohosclient/browser/osr_renderer_settings.h',
654+      'tests/ohosclient/browser/resource.h',
655+      'tests/ohosclient/browser/root_window.cc',
656+      'tests/ohosclient/browser/root_window.h',
657+      'tests/ohosclient/browser/root_window_create.cc',
658+      'tests/ohosclient/browser/root_window_manager.cc',
659+      'tests/ohosclient/browser/root_window_manager.h',
660+      'tests/ohosclient/browser/root_window_views.cc',
661+      'tests/ohosclient/browser/root_window_views.h',
662+      'tests/ohosclient/browser/temp_window.h',
663+      'tests/ohosclient/browser/views_menu_bar.cc',
664+      'tests/ohosclient/browser/views_menu_bar.h',
665+      'tests/ohosclient/browser/views_style.cc',
666+      'tests/ohosclient/browser/views_style.h',
667+      'tests/ohosclient/browser/views_window.cc',
668+      'tests/ohosclient/browser/views_window.h',
669+    ],
670+    'ohosclient_sources_common': [
671+      'tests/ohosclient/common/client_app_delegates_common.cc',
672+    ],
673+    'ohosclient_sources_renderer': [
674+      'tests/ohosclient/renderer/client_app_delegates_renderer.cc',
675+      'tests/ohosclient/renderer/client_renderer.cc',
676+      'tests/ohosclient/renderer/client_renderer.h',
677+    ],
678+    'ohosclient_sources_resources': [
679+      'tests/ohosclient/resources/binding.html',
680+      'tests/ohosclient/resources/dialogs.html',
681+      'tests/ohosclient/resources/draggable.html',
682+      'tests/ohosclient/resources/drm.html',
683+      'tests/ohosclient/resources/localstorage.html',
684+      'tests/ohosclient/resources/logo.png',
685+      'tests/ohosclient/resources/media_router.html',
686+      'tests/ohosclient/resources/menu_icon.1x.png',
687+      'tests/ohosclient/resources/menu_icon.2x.png',
688+      'tests/ohosclient/resources/other_tests.html',
689+      'tests/ohosclient/resources/performance.html',
690+      'tests/ohosclient/resources/performance2.html',
691+      'tests/ohosclient/resources/preferences.html',
692+      'tests/ohosclient/resources/response_filter.html',
693+      'tests/ohosclient/resources/server.html',
694+      'tests/ohosclient/resources/transparency.html',
695+      'tests/ohosclient/resources/urlrequest.html',
696+      'tests/ohosclient/resources/websocket.html',
697+      'tests/ohosclient/resources/window.html',
698+      'tests/ohosclient/resources/xmlhttprequest.html',
699+    ],
700+    'ohosclient_sources_resources_extensions_set_page_color': [
701+      'tests/ohosclient/resources/extensions/set_page_color/icon.png',
702+      'tests/ohosclient/resources/extensions/set_page_color/manifest.json',
703+      'tests/ohosclient/resources/extensions/set_page_color/popup.html',
704+      'tests/ohosclient/resources/extensions/set_page_color/popup.js',
705+      'tests/ohosclient/resources/extensions/set_page_color/README.md',
706+    ],
707+   'ohosclient_sources_linux': [
708+      'tests/ohosclient/browser/browser_window_osr_ohos.cc',
709+      'tests/ohosclient/browser/browser_window_osr_ohos.h',
710+      'tests/ohosclient/browser/dialog_handler_ohos.cc',
711+      'tests/ohosclient/browser/dialog_handler_ohos.h',
712+      'tests/ohosclient/browser/main_context_impl_posix.cc',
713+      'tests/ohosclient/browser/print_handler_ohos.cc',
714+      'tests/ohosclient/browser/print_handler_ohos.h',
715+      'tests/ohosclient/browser/resource_util_ohos.cc',
716+      'tests/ohosclient/browser/root_window_ohos.cc',
717+      'tests/ohosclient/browser/root_window_ohos.h',
718+      'tests/ohosclient/browser/util_ohos.cc',
719+      'tests/ohosclient/browser/util_ohos.h',
720+      'tests/ohosclient/ohosclient.cc',
721+    ],
722   },
723 }
724diff --git a/cef/include/base/internal/cef_net_error_list_ohos.h b/cef/include/base/internal/cef_net_error_list_ohos.h
725new file mode 100644
726index 0000000000..f2fb9124b8
727--- /dev/null
728+++ b/cef/include/base/internal/cef_net_error_list_ohos.h
729@@ -0,0 +1,998 @@
730+// Copyright (c) 2022 The Huawei Authors. All rights reserved.
731+// Use of this source code is governed by a BSD-style license that can be
732+// found in the LICENSE file.
733+
734+// This file intentionally does not have header guards, it's included
735+// inside a macro to generate enum values. The following line silences a
736+// presubmit and Tricium warning that would otherwise be triggered by this:
737+// no-include-guard-because-multiply-included
738+// NOLINT(build/header_guard)
739+
740+// This file contains the list of network errors.
741+
742+//
743+// Ranges:
744+//     0- 99 System related errors
745+//   100-199 Connection related errors
746+//   200-299 Certificate errors
747+//   300-399 HTTP errors
748+//   400-499 Cache errors
749+//   500-599 ?
750+//   600-699 FTP errors
751+//   700-799 Certificate manager errors
752+//   800-899 DNS resolver errors
753+
754+// An asynchronous IO operation is not yet complete.  This usually does not
755+// indicate a fatal error.  Typically this error will be generated as a
756+// notification to wait for some external notification that the IO operation
757+// finally completed.
758+NET_ERROR(IO_PENDING, -1)
759+
760+// A generic failure occurred.
761+NET_ERROR(FAILED, -2)
762+
763+// An operation was aborted (due to user action).
764+NET_ERROR(ABORTED, -3)
765+
766+// An argument to the function is incorrect.
767+NET_ERROR(INVALID_ARGUMENT, -4)
768+
769+// The handle or file descriptor is invalid.
770+NET_ERROR(INVALID_HANDLE, -5)
771+
772+// The file or directory cannot be found.
773+NET_ERROR(FILE_NOT_FOUND, -6)
774+
775+// An operation timed out.
776+NET_ERROR(TIMED_OUT, -7)
777+
778+// The file is too large.
779+NET_ERROR(FILE_TOO_BIG, -8)
780+
781+// An unexpected error.  This may be caused by a programming mistake or an
782+// invalid assumption.
783+NET_ERROR(UNEXPECTED, -9)
784+
785+// Permission to access a resource, other than the network, was denied.
786+NET_ERROR(ACCESS_DENIED, -10)
787+
788+// The operation failed because of unimplemented functionality.
789+NET_ERROR(NOT_IMPLEMENTED, -11)
790+
791+// There were not enough resources to complete the operation.
792+NET_ERROR(INSUFFICIENT_RESOURCES, -12)
793+
794+// Memory allocation failed.
795+NET_ERROR(OUT_OF_MEMORY, -13)
796+
797+// The file upload failed because the file's modification time was different
798+// from the expectation.
799+NET_ERROR(UPLOAD_FILE_CHANGED, -14)
800+
801+// The socket is not connected.
802+NET_ERROR(SOCKET_NOT_CONNECTED, -15)
803+
804+// The file already exists.
805+NET_ERROR(FILE_EXISTS, -16)
806+
807+// The path or file name is too long.
808+NET_ERROR(FILE_PATH_TOO_LONG, -17)
809+
810+// Not enough room left on the disk.
811+NET_ERROR(FILE_NO_SPACE, -18)
812+
813+// The file has a virus.
814+NET_ERROR(FILE_VIRUS_INFECTED, -19)
815+
816+// The client chose to block the request.
817+NET_ERROR(BLOCKED_BY_CLIENT, -20)
818+
819+// The network changed.
820+NET_ERROR(NETWORK_CHANGED, -21)
821+
822+// The request was blocked by the URL block list configured by the domain
823+// administrator.
824+NET_ERROR(BLOCKED_BY_ADMINISTRATOR, -22)
825+
826+// The socket is already connected.
827+NET_ERROR(SOCKET_IS_CONNECTED, -23)
828+
829+// The request was blocked because the forced reenrollment check is still
830+// pending. This error can only occur on ChromeOS.
831+// The error can be emitted by code in chrome/browser/policy/policy_helpers.cc.
832+NET_ERROR(BLOCKED_ENROLLMENT_CHECK_PENDING, -24)
833+
834+// The upload failed because the upload stream needed to be re-read, due to a
835+// retry or a redirect, but the upload stream doesn't support that operation.
836+NET_ERROR(UPLOAD_STREAM_REWIND_NOT_SUPPORTED, -25)
837+
838+// The request failed because the URLRequestContext is shutting down, or has
839+// been shut down.
840+NET_ERROR(CONTEXT_SHUT_DOWN, -26)
841+
842+// The request failed because the response was delivered along with requirements
843+// which are not met ('X-Frame-Options' and 'Content-Security-Policy' ancestor
844+// checks and 'Cross-Origin-Resource-Policy', for instance).
845+NET_ERROR(BLOCKED_BY_RESPONSE, -27)
846+
847+// Error -28 was removed (BLOCKED_BY_XSS_AUDITOR).
848+
849+// The request was blocked by system policy disallowing some or all cleartext
850+// requests. Used for NetworkSecurityPolicy on Android.
851+NET_ERROR(CLEARTEXT_NOT_PERMITTED, -29)
852+
853+// The request was blocked by a Content Security Policy
854+NET_ERROR(BLOCKED_BY_CSP, -30)
855+
856+// The request was blocked because of no H/2 or QUIC session.
857+NET_ERROR(H2_OR_QUIC_REQUIRED, -31)
858+
859+// A connection was closed (corresponding to a TCP FIN).
860+NET_ERROR(CONNECTION_CLOSED, -100)
861+
862+// A connection was reset (corresponding to a TCP RST).
863+NET_ERROR(CONNECTION_RESET, -101)
864+
865+// A connection attempt was refused.
866+NET_ERROR(CONNECTION_REFUSED, -102)
867+
868+// A connection timed out as a result of not receiving an ACK for data sent.
869+// This can include a FIN packet that did not get ACK'd.
870+NET_ERROR(CONNECTION_ABORTED, -103)
871+
872+// A connection attempt failed.
873+NET_ERROR(CONNECTION_FAILED, -104)
874+
875+// The host name could not be resolved.
876+NET_ERROR(NAME_NOT_RESOLVED, -105)
877+
878+// The Internet connection has been lost.
879+NET_ERROR(INTERNET_DISCONNECTED, -106)
880+
881+// An SSL protocol error occurred.
882+NET_ERROR(SSL_PROTOCOL_ERROR, -107)
883+
884+// The IP address or port number is invalid (e.g., cannot connect to the IP
885+// address 0 or the port 0).
886+NET_ERROR(ADDRESS_INVALID, -108)
887+
888+// The IP address is unreachable.  This usually means that there is no route to
889+// the specified host or network.
890+NET_ERROR(ADDRESS_UNREACHABLE, -109)
891+
892+// The server requested a client certificate for SSL client authentication.
893+NET_ERROR(SSL_CLIENT_AUTH_CERT_NEEDED, -110)
894+
895+// A tunnel connection through the proxy could not be established.
896+NET_ERROR(TUNNEL_CONNECTION_FAILED, -111)
897+
898+// No SSL protocol versions are enabled.
899+NET_ERROR(NO_SSL_VERSIONS_ENABLED, -112)
900+
901+// The client and server don't support a common SSL protocol version or
902+// cipher suite.
903+NET_ERROR(SSL_VERSION_OR_CIPHER_MISMATCH, -113)
904+
905+// The server requested a renegotiation (rehandshake).
906+NET_ERROR(SSL_RENEGOTIATION_REQUESTED, -114)
907+
908+// The proxy requested authentication (for tunnel establishment) with an
909+// unsupported method.
910+NET_ERROR(PROXY_AUTH_UNSUPPORTED, -115)
911+
912+// During SSL renegotiation (rehandshake), the server sent a certificate with
913+// an error.
914+//
915+// Note: this error is not in the -2xx range so that it won't be handled as a
916+// certificate error.
917+NET_ERROR(CERT_ERROR_IN_SSL_RENEGOTIATION, -116)
918+
919+// The SSL handshake failed because of a bad or missing client certificate.
920+NET_ERROR(BAD_SSL_CLIENT_AUTH_CERT, -117)
921+
922+// A connection attempt timed out.
923+NET_ERROR(CONNECTION_TIMED_OUT, -118)
924+
925+// There are too many pending DNS resolves, so a request in the queue was
926+// aborted.
927+NET_ERROR(HOST_RESOLVER_QUEUE_TOO_LARGE, -119)
928+
929+// Failed establishing a connection to the SOCKS proxy server for a target host.
930+NET_ERROR(SOCKS_CONNECTION_FAILED, -120)
931+
932+// The SOCKS proxy server failed establishing connection to the target host
933+// because that host is unreachable.
934+NET_ERROR(SOCKS_CONNECTION_HOST_UNREACHABLE, -121)
935+
936+// The request to negotiate an alternate protocol failed.
937+NET_ERROR(ALPN_NEGOTIATION_FAILED, -122)
938+
939+// The peer sent an SSL no_renegotiation alert message.
940+NET_ERROR(SSL_NO_RENEGOTIATION, -123)
941+
942+// Winsock sometimes reports more data written than passed.  This is probably
943+// due to a broken LSP.
944+NET_ERROR(WINSOCK_UNEXPECTED_WRITTEN_BYTES, -124)
945+
946+// An SSL peer sent us a fatal decompression_failure alert. This typically
947+// occurs when a peer selects DEFLATE compression in the mistaken belief that
948+// it supports it.
949+NET_ERROR(SSL_DECOMPRESSION_FAILURE_ALERT, -125)
950+
951+// An SSL peer sent us a fatal bad_record_mac alert. This has been observed
952+// from servers with buggy DEFLATE support.
953+NET_ERROR(SSL_BAD_RECORD_MAC_ALERT, -126)
954+
955+// The proxy requested authentication (for tunnel establishment).
956+NET_ERROR(PROXY_AUTH_REQUESTED, -127)
957+
958+// Error -129 was removed (SSL_WEAK_SERVER_EPHEMERAL_DH_KEY).
959+
960+// Could not create a connection to the proxy server. An error occurred
961+// either in resolving its name, or in connecting a socket to it.
962+// Note that this does NOT include failures during the actual "CONNECT" method
963+// of an HTTP proxy.
964+NET_ERROR(PROXY_CONNECTION_FAILED, -130)
965+
966+// A mandatory proxy configuration could not be used. Currently this means
967+// that a mandatory PAC script could not be fetched, parsed or executed.
968+NET_ERROR(MANDATORY_PROXY_CONFIGURATION_FAILED, -131)
969+
970+// -132 was formerly ERR_ESET_ANTI_VIRUS_SSL_INTERCEPTION
971+
972+// We've hit the max socket limit for the socket pool while preconnecting.  We
973+// don't bother trying to preconnect more sockets.
974+NET_ERROR(PRECONNECT_MAX_SOCKET_LIMIT, -133)
975+
976+// The permission to use the SSL client certificate's private key was denied.
977+NET_ERROR(SSL_CLIENT_AUTH_PRIVATE_KEY_ACCESS_DENIED, -134)
978+
979+// The SSL client certificate has no private key.
980+NET_ERROR(SSL_CLIENT_AUTH_CERT_NO_PRIVATE_KEY, -135)
981+
982+// The certificate presented by the HTTPS Proxy was invalid.
983+NET_ERROR(PROXY_CERTIFICATE_INVALID, -136)
984+
985+// An error occurred when trying to do a name resolution (DNS).
986+NET_ERROR(NAME_RESOLUTION_FAILED, -137)
987+
988+// Permission to access the network was denied. This is used to distinguish
989+// errors that were most likely caused by a firewall from other access denied
990+// errors. See also ERR_ACCESS_DENIED.
991+NET_ERROR(NETWORK_ACCESS_DENIED, -138)
992+
993+// The request throttler module cancelled this request to avoid DDOS.
994+NET_ERROR(TEMPORARILY_THROTTLED, -139)
995+
996+// A request to create an SSL tunnel connection through the HTTPS proxy
997+// received a 302 (temporary redirect) response.  The response body might
998+// include a description of why the request failed.
999+//
1000+// TODO(https://crbug.com/928551): This is deprecated and should not be used by
1001+// new code.
1002+NET_ERROR(HTTPS_PROXY_TUNNEL_RESPONSE_REDIRECT, -140)
1003+
1004+// We were unable to sign the CertificateVerify data of an SSL client auth
1005+// handshake with the client certificate's private key.
1006+//
1007+// Possible causes for this include the user implicitly or explicitly
1008+// denying access to the private key, the private key may not be valid for
1009+// signing, the key may be relying on a cached handle which is no longer
1010+// valid, or the CSP won't allow arbitrary data to be signed.
1011+NET_ERROR(SSL_CLIENT_AUTH_SIGNATURE_FAILED, -141)
1012+
1013+// The message was too large for the transport.  (for example a UDP message
1014+// which exceeds size threshold).
1015+NET_ERROR(MSG_TOO_BIG, -142)
1016+
1017+// Error -143 was removed (SPDY_SESSION_ALREADY_EXISTS)
1018+
1019+// Error -144 was removed (LIMIT_VIOLATION).
1020+
1021+// Websocket protocol error. Indicates that we are terminating the connection
1022+// due to a malformed frame or other protocol violation.
1023+NET_ERROR(WS_PROTOCOL_ERROR, -145)
1024+
1025+// Error -146 was removed (PROTOCOL_SWITCHED)
1026+
1027+// Returned when attempting to bind an address that is already in use.
1028+NET_ERROR(ADDRESS_IN_USE, -147)
1029+
1030+// An operation failed because the SSL handshake has not completed.
1031+NET_ERROR(SSL_HANDSHAKE_NOT_COMPLETED, -148)
1032+
1033+// SSL peer's public key is invalid.
1034+NET_ERROR(SSL_BAD_PEER_PUBLIC_KEY, -149)
1035+
1036+// The certificate didn't match the built-in public key pins for the host name.
1037+// The pins are set in net/http/transport_security_state.cc and require that
1038+// one of a set of public keys exist on the path from the leaf to the root.
1039+NET_ERROR(SSL_PINNED_KEY_NOT_IN_CERT_CHAIN, -150)
1040+
1041+// Server request for client certificate did not contain any types we support.
1042+NET_ERROR(CLIENT_AUTH_CERT_TYPE_UNSUPPORTED, -151)
1043+
1044+// Error -152 was removed (ORIGIN_BOUND_CERT_GENERATION_TYPE_MISMATCH)
1045+
1046+// An SSL peer sent us a fatal decrypt_error alert. This typically occurs when
1047+// a peer could not correctly verify a signature (in CertificateVerify or
1048+// ServerKeyExchange) or validate a Finished message.
1049+NET_ERROR(SSL_DECRYPT_ERROR_ALERT, -153)
1050+
1051+// There are too many pending WebSocketJob instances, so the new job was not
1052+// pushed to the queue.
1053+NET_ERROR(WS_THROTTLE_QUEUE_TOO_LARGE, -154)
1054+
1055+// Error -155 was removed (TOO_MANY_SOCKET_STREAMS)
1056+
1057+// The SSL server certificate changed in a renegotiation.
1058+NET_ERROR(SSL_SERVER_CERT_CHANGED, -156)
1059+
1060+// Error -157 was removed (SSL_INAPPROPRIATE_FALLBACK).
1061+
1062+// Error -158 was removed (CT_NO_SCTS_VERIFIED_OK).
1063+
1064+// The SSL server sent us a fatal unrecognized_name alert.
1065+NET_ERROR(SSL_UNRECOGNIZED_NAME_ALERT, -159)
1066+
1067+// Failed to set the socket's receive buffer size as requested.
1068+NET_ERROR(SOCKET_SET_RECEIVE_BUFFER_SIZE_ERROR, -160)
1069+
1070+// Failed to set the socket's send buffer size as requested.
1071+NET_ERROR(SOCKET_SET_SEND_BUFFER_SIZE_ERROR, -161)
1072+
1073+// Failed to set the socket's receive buffer size as requested, despite success
1074+// return code from setsockopt.
1075+NET_ERROR(SOCKET_RECEIVE_BUFFER_SIZE_UNCHANGEABLE, -162)
1076+
1077+// Failed to set the socket's send buffer size as requested, despite success
1078+// return code from setsockopt.
1079+NET_ERROR(SOCKET_SEND_BUFFER_SIZE_UNCHANGEABLE, -163)
1080+
1081+// Failed to import a client certificate from the platform store into the SSL
1082+// library.
1083+NET_ERROR(SSL_CLIENT_AUTH_CERT_BAD_FORMAT, -164)
1084+
1085+// Error -165 was removed (SSL_FALLBACK_BEYOND_MINIMUM_VERSION).
1086+
1087+// Resolving a hostname to an IP address list included the IPv4 address
1088+// "127.0.53.53". This is a special IP address which ICANN has recommended to
1089+// indicate there was a name collision, and alert admins to a potential
1090+// problem.
1091+NET_ERROR(ICANN_NAME_COLLISION, -166)
1092+
1093+// The SSL server presented a certificate which could not be decoded. This is
1094+// not a certificate error code as no X509Certificate object is available. This
1095+// error is fatal.
1096+NET_ERROR(SSL_SERVER_CERT_BAD_FORMAT, -167)
1097+
1098+// Certificate Transparency: Received a signed tree head that failed to parse.
1099+NET_ERROR(CT_STH_PARSING_FAILED, -168)
1100+
1101+// Certificate Transparency: Received a signed tree head whose JSON parsing was
1102+// OK but was missing some of the fields.
1103+NET_ERROR(CT_STH_INCOMPLETE, -169)
1104+
1105+// The attempt to reuse a connection to send proxy auth credentials failed
1106+// before the AuthController was used to generate credentials. The caller should
1107+// reuse the controller with a new connection. This error is only used
1108+// internally by the network stack.
1109+NET_ERROR(UNABLE_TO_REUSE_CONNECTION_FOR_PROXY_AUTH, -170)
1110+
1111+// Certificate Transparency: Failed to parse the received consistency proof.
1112+NET_ERROR(CT_CONSISTENCY_PROOF_PARSING_FAILED, -171)
1113+
1114+// The SSL server required an unsupported cipher suite that has since been
1115+// removed. This error will temporarily be signaled on a fallback for one or two
1116+// releases immediately following a cipher suite's removal, after which the
1117+// fallback will be removed.
1118+NET_ERROR(SSL_OBSOLETE_CIPHER, -172)
1119+
1120+// When a WebSocket handshake is done successfully and the connection has been
1121+// upgraded, the URLRequest is cancelled with this error code.
1122+NET_ERROR(WS_UPGRADE, -173)
1123+
1124+// Socket ReadIfReady support is not implemented. This error should not be user
1125+// visible, because the normal Read() method is used as a fallback.
1126+NET_ERROR(READ_IF_READY_NOT_IMPLEMENTED, -174)
1127+
1128+// Error -175 was removed (SSL_VERSION_INTERFERENCE).
1129+
1130+// No socket buffer space is available.
1131+NET_ERROR(NO_BUFFER_SPACE, -176)
1132+
1133+// There were no common signature algorithms between our client certificate
1134+// private key and the server's preferences.
1135+NET_ERROR(SSL_CLIENT_AUTH_NO_COMMON_ALGORITHMS, -177)
1136+
1137+// TLS 1.3 early data was rejected by the server. This will be received before
1138+// any data is returned from the socket. The request should be retried with
1139+// early data disabled.
1140+NET_ERROR(EARLY_DATA_REJECTED, -178)
1141+
1142+// TLS 1.3 early data was offered, but the server responded with TLS 1.2 or
1143+// earlier. This is an internal error code to account for a
1144+// backwards-compatibility issue with early data and TLS 1.2. It will be
1145+// received before any data is returned from the socket. The request should be
1146+// retried with early data disabled.
1147+//
1148+// See https://tools.ietf.org/html/rfc8446#appendix-D.3 for details.
1149+NET_ERROR(WRONG_VERSION_ON_EARLY_DATA, -179)
1150+
1151+// TLS 1.3 was enabled, but a lower version was negotiated and the server
1152+// returned a value indicating it supported TLS 1.3. This is part of a security
1153+// check in TLS 1.3, but it may also indicate the user is behind a buggy
1154+// TLS-terminating proxy which implemented TLS 1.2 incorrectly. (See
1155+// https://crbug.com/boringssl/226.)
1156+NET_ERROR(TLS13_DOWNGRADE_DETECTED, -180)
1157+
1158+// The server's certificate has a keyUsage extension incompatible with the
1159+// negotiated TLS key exchange method.
1160+NET_ERROR(SSL_KEY_USAGE_INCOMPATIBLE, -181)
1161+
1162+// Certificate error codes
1163+//
1164+// The values of certificate error codes must be consecutive.
1165+
1166+// The server responded with a certificate whose common name did not match
1167+// the host name.  This could mean:
1168+//
1169+// 1. An attacker has redirected our traffic to their server and is
1170+//    presenting a certificate for which they know the private key.
1171+//
1172+// 2. The server is misconfigured and responding with the wrong cert.
1173+//
1174+// 3. The user is on a wireless network and is being redirected to the
1175+//    network's login page.
1176+//
1177+// 4. The OS has used a DNS search suffix and the server doesn't have
1178+//    a certificate for the abbreviated name in the address bar.
1179+//
1180+NET_ERROR(CERT_COMMON_NAME_INVALID, -200)
1181+
1182+// The server responded with a certificate that, by our clock, appears to
1183+// either not yet be valid or to have expired.  This could mean:
1184+//
1185+// 1. An attacker is presenting an old certificate for which they have
1186+//    managed to obtain the private key.
1187+//
1188+// 2. The server is misconfigured and is not presenting a valid cert.
1189+//
1190+// 3. Our clock is wrong.
1191+//
1192+NET_ERROR(CERT_DATE_INVALID, -201)
1193+
1194+// The server responded with a certificate that is signed by an authority
1195+// we don't trust.  The could mean:
1196+//
1197+// 1. An attacker has substituted the real certificate for a cert that
1198+//    contains their public key and is signed by their cousin.
1199+//
1200+// 2. The server operator has a legitimate certificate from a CA we don't
1201+//    know about, but should trust.
1202+//
1203+// 3. The server is presenting a self-signed certificate, providing no
1204+//    defense against active attackers (but foiling passive attackers).
1205+//
1206+NET_ERROR(CERT_AUTHORITY_INVALID, -202)
1207+
1208+// The server responded with a certificate that contains errors.
1209+// This error is not recoverable.
1210+//
1211+// MSDN describes this error as follows:
1212+//   "The SSL certificate contains errors."
1213+// NOTE: It's unclear how this differs from ERR_CERT_INVALID. For consistency,
1214+// use that code instead of this one from now on.
1215+//
1216+NET_ERROR(CERT_CONTAINS_ERRORS, -203)
1217+
1218+// The certificate has no mechanism for determining if it is revoked.  In
1219+// effect, this certificate cannot be revoked.
1220+NET_ERROR(CERT_NO_REVOCATION_MECHANISM, -204)
1221+
1222+// Revocation information for the security certificate for this site is not
1223+// available.  This could mean:
1224+//
1225+// 1. An attacker has compromised the private key in the certificate and is
1226+//    blocking our attempt to find out that the cert was revoked.
1227+//
1228+// 2. The certificate is unrevoked, but the revocation server is busy or
1229+//    unavailable.
1230+//
1231+NET_ERROR(CERT_UNABLE_TO_CHECK_REVOCATION, -205)
1232+
1233+// The server responded with a certificate has been revoked.
1234+// We have the capability to ignore this error, but it is probably not the
1235+// thing to do.
1236+NET_ERROR(CERT_REVOKED, -206)
1237+
1238+// The server responded with a certificate that is invalid.
1239+// This error is not recoverable.
1240+//
1241+// MSDN describes this error as follows:
1242+//   "The SSL certificate is invalid."
1243+//
1244+NET_ERROR(CERT_INVALID, -207)
1245+
1246+// The server responded with a certificate that is signed using a weak
1247+// signature algorithm.
1248+NET_ERROR(CERT_WEAK_SIGNATURE_ALGORITHM, -208)
1249+
1250+// -209 is availible: was CERT_NOT_IN_DNS.
1251+
1252+// The host name specified in the certificate is not unique.
1253+NET_ERROR(CERT_NON_UNIQUE_NAME, -210)
1254+
1255+// The server responded with a certificate that contains a weak key (e.g.
1256+// a too-small RSA key).
1257+NET_ERROR(CERT_WEAK_KEY, -211)
1258+
1259+// The certificate claimed DNS names that are in violation of name constraints.
1260+NET_ERROR(CERT_NAME_CONSTRAINT_VIOLATION, -212)
1261+
1262+// The certificate's validity period is too long.
1263+NET_ERROR(CERT_VALIDITY_TOO_LONG, -213)
1264+
1265+// Certificate Transparency was required for this connection, but the server
1266+// did not provide CT information that complied with the policy.
1267+NET_ERROR(CERTIFICATE_TRANSPARENCY_REQUIRED, -214)
1268+
1269+// The certificate chained to a legacy Symantec root that is no longer trusted.
1270+// https://g.co/chrome/symantecpkicerts
1271+NET_ERROR(CERT_SYMANTEC_LEGACY, -215)
1272+
1273+// -216 was QUIC_CERT_ROOT_NOT_KNOWN which has been renumbered to not be in the
1274+// certificate error range.
1275+
1276+// The certificate is known to be used for interception by an entity other
1277+// the device owner.
1278+NET_ERROR(CERT_KNOWN_INTERCEPTION_BLOCKED, -217)
1279+
1280+// The connection uses an obsolete version of SSL/TLS.
1281+NET_ERROR(SSL_OBSOLETE_VERSION, -218)
1282+
1283+// Add new certificate error codes here.
1284+//
1285+// Update the value of CERT_END whenever you add a new certificate error
1286+// code.
1287+
1288+// The value immediately past the last certificate error code.
1289+NET_ERROR(CERT_END, -219)
1290+
1291+// The URL is invalid.
1292+NET_ERROR(INVALID_URL, -300)
1293+
1294+// The scheme of the URL is disallowed.
1295+NET_ERROR(DISALLOWED_URL_SCHEME, -301)
1296+
1297+// The scheme of the URL is unknown.
1298+NET_ERROR(UNKNOWN_URL_SCHEME, -302)
1299+
1300+// Attempting to load an URL resulted in a redirect to an invalid URL.
1301+NET_ERROR(INVALID_REDIRECT, -303)
1302+
1303+// Attempting to load an URL resulted in too many redirects.
1304+NET_ERROR(TOO_MANY_REDIRECTS, -310)
1305+
1306+// Attempting to load an URL resulted in an unsafe redirect (e.g., a redirect
1307+// to file:// is considered unsafe).
1308+NET_ERROR(UNSAFE_REDIRECT, -311)
1309+
1310+// Attempting to load an URL with an unsafe port number.  These are port
1311+// numbers that correspond to services, which are not robust to spurious input
1312+// that may be constructed as a result of an allowed web construct (e.g., HTTP
1313+// looks a lot like SMTP, so form submission to port 25 is denied).
1314+NET_ERROR(UNSAFE_PORT, -312)
1315+
1316+// The server's response was invalid.
1317+NET_ERROR(INVALID_RESPONSE, -320)
1318+
1319+// Error in chunked transfer encoding.
1320+NET_ERROR(INVALID_CHUNKED_ENCODING, -321)
1321+
1322+// The server did not support the request method.
1323+NET_ERROR(METHOD_NOT_SUPPORTED, -322)
1324+
1325+// The response was 407 (Proxy Authentication Required), yet we did not send
1326+// the request to a proxy.
1327+NET_ERROR(UNEXPECTED_PROXY_AUTH, -323)
1328+
1329+// The server closed the connection without sending any data.
1330+NET_ERROR(EMPTY_RESPONSE, -324)
1331+
1332+// The headers section of the response is too large.
1333+NET_ERROR(RESPONSE_HEADERS_TOO_BIG, -325)
1334+
1335+// Error -326 was removed (PAC_STATUS_NOT_OK)
1336+
1337+// The evaluation of the PAC script failed.
1338+NET_ERROR(PAC_SCRIPT_FAILED, -327)
1339+
1340+// The response was 416 (Requested range not satisfiable) and the server cannot
1341+// satisfy the range requested.
1342+NET_ERROR(REQUEST_RANGE_NOT_SATISFIABLE, -328)
1343+
1344+// The identity used for authentication is invalid.
1345+NET_ERROR(MALFORMED_IDENTITY, -329)
1346+
1347+// Content decoding of the response body failed.
1348+NET_ERROR(CONTENT_DECODING_FAILED, -330)
1349+
1350+// An operation could not be completed because all network IO
1351+// is suspended.
1352+NET_ERROR(NETWORK_IO_SUSPENDED, -331)
1353+
1354+// FLIP data received without receiving a SYN_REPLY on the stream.
1355+NET_ERROR(SYN_REPLY_NOT_RECEIVED, -332)
1356+
1357+// Converting the response to target encoding failed.
1358+NET_ERROR(ENCODING_CONVERSION_FAILED, -333)
1359+
1360+// The server sent an FTP directory listing in a format we do not understand.
1361+NET_ERROR(UNRECOGNIZED_FTP_DIRECTORY_LISTING_FORMAT, -334)
1362+
1363+// Obsolete.  Was only logged in NetLog when an HTTP/2 pushed stream expired.
1364+// NET_ERROR(INVALID_SPDY_STREAM, -335)
1365+
1366+// There are no supported proxies in the provided list.
1367+NET_ERROR(NO_SUPPORTED_PROXIES, -336)
1368+
1369+// There is an HTTP/2 protocol error.
1370+NET_ERROR(HTTP2_PROTOCOL_ERROR, -337)
1371+
1372+// Credentials could not be established during HTTP Authentication.
1373+NET_ERROR(INVALID_AUTH_CREDENTIALS, -338)
1374+
1375+// An HTTP Authentication scheme was tried which is not supported on this
1376+// machine.
1377+NET_ERROR(UNSUPPORTED_AUTH_SCHEME, -339)
1378+
1379+// Detecting the encoding of the response failed.
1380+NET_ERROR(ENCODING_DETECTION_FAILED, -340)
1381+
1382+// (GSSAPI) No Kerberos credentials were available during HTTP Authentication.
1383+NET_ERROR(MISSING_AUTH_CREDENTIALS, -341)
1384+
1385+// An unexpected, but documented, SSPI or GSSAPI status code was returned.
1386+NET_ERROR(UNEXPECTED_SECURITY_LIBRARY_STATUS, -342)
1387+
1388+// The environment was not set up correctly for authentication (for
1389+// example, no KDC could be found or the principal is unknown.
1390+NET_ERROR(MISCONFIGURED_AUTH_ENVIRONMENT, -343)
1391+
1392+// An undocumented SSPI or GSSAPI status code was returned.
1393+NET_ERROR(UNDOCUMENTED_SECURITY_LIBRARY_STATUS, -344)
1394+
1395+// The HTTP response was too big to drain.
1396+NET_ERROR(RESPONSE_BODY_TOO_BIG_TO_DRAIN, -345)
1397+
1398+// The HTTP response contained multiple distinct Content-Length headers.
1399+NET_ERROR(RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH, -346)
1400+
1401+// HTTP/2 headers have been received, but not all of them - status or version
1402+// headers are missing, so we're expecting additional frames to complete them.
1403+NET_ERROR(INCOMPLETE_HTTP2_HEADERS, -347)
1404+
1405+// No PAC URL configuration could be retrieved from DHCP. This can indicate
1406+// either a failure to retrieve the DHCP configuration, or that there was no
1407+// PAC URL configured in DHCP.
1408+NET_ERROR(PAC_NOT_IN_DHCP, -348)
1409+
1410+// The HTTP response contained multiple Content-Disposition headers.
1411+NET_ERROR(RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION, -349)
1412+
1413+// The HTTP response contained multiple Location headers.
1414+NET_ERROR(RESPONSE_HEADERS_MULTIPLE_LOCATION, -350)
1415+
1416+// HTTP/2 server refused the request without processing, and sent either a
1417+// GOAWAY frame with error code NO_ERROR and Last-Stream-ID lower than the
1418+// stream id corresponding to the request indicating that this request has not
1419+// been processed yet, or a RST_STREAM frame with error code REFUSED_STREAM.
1420+// Client MAY retry (on a different connection).  See RFC7540 Section 8.1.4.
1421+NET_ERROR(HTTP2_SERVER_REFUSED_STREAM, -351)
1422+
1423+// HTTP/2 server didn't respond to the PING message.
1424+NET_ERROR(HTTP2_PING_FAILED, -352)
1425+
1426+// Obsolete.  Kept here to avoid reuse, as the old error can still appear on
1427+// histograms.
1428+// NET_ERROR(PIPELINE_EVICTION, -353)
1429+
1430+// The HTTP response body transferred fewer bytes than were advertised by the
1431+// Content-Length header when the connection is closed.
1432+NET_ERROR(CONTENT_LENGTH_MISMATCH, -354)
1433+
1434+// The HTTP response body is transferred with Chunked-Encoding, but the
1435+// terminating zero-length chunk was never sent when the connection is closed.
1436+NET_ERROR(INCOMPLETE_CHUNKED_ENCODING, -355)
1437+
1438+// There is a QUIC protocol error.
1439+NET_ERROR(QUIC_PROTOCOL_ERROR, -356)
1440+
1441+// The HTTP headers were truncated by an EOF.
1442+NET_ERROR(RESPONSE_HEADERS_TRUNCATED, -357)
1443+
1444+// The QUIC crytpo handshake failed.  This means that the server was unable
1445+// to read any requests sent, so they may be resent.
1446+NET_ERROR(QUIC_HANDSHAKE_FAILED, -358)
1447+
1448+// Obsolete.  Kept here to avoid reuse, as the old error can still appear on
1449+// histograms.
1450+// NET_ERROR(REQUEST_FOR_SECURE_RESOURCE_OVER_INSECURE_QUIC, -359)
1451+
1452+// Transport security is inadequate for the HTTP/2 version.
1453+NET_ERROR(HTTP2_INADEQUATE_TRANSPORT_SECURITY, -360)
1454+
1455+// The peer violated HTTP/2 flow control.
1456+NET_ERROR(HTTP2_FLOW_CONTROL_ERROR, -361)
1457+
1458+// The peer sent an improperly sized HTTP/2 frame.
1459+NET_ERROR(HTTP2_FRAME_SIZE_ERROR, -362)
1460+
1461+// Decoding or encoding of compressed HTTP/2 headers failed.
1462+NET_ERROR(HTTP2_COMPRESSION_ERROR, -363)
1463+
1464+// Proxy Auth Requested without a valid Client Socket Handle.
1465+NET_ERROR(PROXY_AUTH_REQUESTED_WITH_NO_CONNECTION, -364)
1466+
1467+// HTTP_1_1_REQUIRED error code received on HTTP/2 session.
1468+NET_ERROR(HTTP_1_1_REQUIRED, -365)
1469+
1470+// HTTP_1_1_REQUIRED error code received on HTTP/2 session to proxy.
1471+NET_ERROR(PROXY_HTTP_1_1_REQUIRED, -366)
1472+
1473+// The PAC script terminated fatally and must be reloaded.
1474+NET_ERROR(PAC_SCRIPT_TERMINATED, -367)
1475+
1476+// Obsolete. Kept here to avoid reuse.
1477+// Request is throttled because of a Backoff header.
1478+// See: crbug.com/486891.
1479+// NET_ERROR(TEMPORARY_BACKOFF, -369)
1480+
1481+// The server was expected to return an HTTP/1.x response, but did not. Rather
1482+// than treat it as HTTP/0.9, this error is returned.
1483+NET_ERROR(INVALID_HTTP_RESPONSE, -370)
1484+
1485+// Initializing content decoding failed.
1486+NET_ERROR(CONTENT_DECODING_INIT_FAILED, -371)
1487+
1488+// Received HTTP/2 RST_STREAM frame with NO_ERROR error code.  This error should
1489+// be handled internally by HTTP/2 code, and should not make it above the
1490+// SpdyStream layer.
1491+NET_ERROR(HTTP2_RST_STREAM_NO_ERROR_RECEIVED, -372)
1492+
1493+// The pushed stream claimed by the request is no longer available.
1494+NET_ERROR(HTTP2_PUSHED_STREAM_NOT_AVAILABLE, -373)
1495+
1496+// A pushed stream was claimed and later reset by the server. When this happens,
1497+// the request should be retried.
1498+NET_ERROR(HTTP2_CLAIMED_PUSHED_STREAM_RESET_BY_SERVER, -374)
1499+
1500+// An HTTP transaction was retried too many times due for authentication or
1501+// invalid certificates. This may be due to a bug in the net stack that would
1502+// otherwise infinite loop, or if the server or proxy continually requests fresh
1503+// credentials or presents a fresh invalid certificate.
1504+NET_ERROR(TOO_MANY_RETRIES, -375)
1505+
1506+// Received an HTTP/2 frame on a closed stream.
1507+NET_ERROR(HTTP2_STREAM_CLOSED, -376)
1508+
1509+// Client is refusing an HTTP/2 stream.
1510+NET_ERROR(HTTP2_CLIENT_REFUSED_STREAM, -377)
1511+
1512+// A pushed HTTP/2 stream was claimed by a request based on matching URL and
1513+// request headers, but the pushed response headers do not match the request.
1514+NET_ERROR(HTTP2_PUSHED_RESPONSE_DOES_NOT_MATCH, -378)
1515+
1516+// The server returned a non-2xx HTTP response code.
1517+//
1518+// Not that this error is only used by certain APIs that interpret the HTTP
1519+// response itself. URLRequest for instance just passes most non-2xx
1520+// response back as success.
1521+NET_ERROR(HTTP_RESPONSE_CODE_FAILURE, -379)
1522+
1523+// The certificate presented on a QUIC connection does not chain to a known root
1524+// and the origin connected to is not on a list of domains where unknown roots
1525+// are allowed.
1526+NET_ERROR(QUIC_CERT_ROOT_NOT_KNOWN, -380)
1527+
1528+// A GOAWAY frame has been received indicating that the request has not been
1529+// processed and is therefore safe to retry on a different connection.
1530+NET_ERROR(QUIC_GOAWAY_REQUEST_CAN_BE_RETRIED, -381)
1531+
1532+// The cache does not have the requested entry.
1533+NET_ERROR(CACHE_MISS, -400)
1534+
1535+// Unable to read from the disk cache.
1536+NET_ERROR(CACHE_READ_FAILURE, -401)
1537+
1538+// Unable to write to the disk cache.
1539+NET_ERROR(CACHE_WRITE_FAILURE, -402)
1540+
1541+// The operation is not supported for this entry.
1542+NET_ERROR(CACHE_OPERATION_NOT_SUPPORTED, -403)
1543+
1544+// The disk cache is unable to open this entry.
1545+NET_ERROR(CACHE_OPEN_FAILURE, -404)
1546+
1547+// The disk cache is unable to create this entry.
1548+NET_ERROR(CACHE_CREATE_FAILURE, -405)
1549+
1550+// Multiple transactions are racing to create disk cache entries. This is an
1551+// internal error returned from the HttpCache to the HttpCacheTransaction that
1552+// tells the transaction to restart the entry-creation logic because the state
1553+// of the cache has changed.
1554+NET_ERROR(CACHE_RACE, -406)
1555+
1556+// The cache was unable to read a checksum record on an entry. This can be
1557+// returned from attempts to read from the cache. It is an internal error,
1558+// returned by the SimpleCache backend, but not by any URLRequest methods
1559+// or members.
1560+NET_ERROR(CACHE_CHECKSUM_READ_FAILURE, -407)
1561+
1562+// The cache found an entry with an invalid checksum. This can be returned from
1563+// attempts to read from the cache. It is an internal error, returned by the
1564+// SimpleCache backend, but not by any URLRequest methods or members.
1565+NET_ERROR(CACHE_CHECKSUM_MISMATCH, -408)
1566+
1567+// Internal error code for the HTTP cache. The cache lock timeout has fired.
1568+NET_ERROR(CACHE_LOCK_TIMEOUT, -409)
1569+
1570+// Received a challenge after the transaction has read some data, and the
1571+// credentials aren't available.  There isn't a way to get them at that point.
1572+NET_ERROR(CACHE_AUTH_FAILURE_AFTER_READ, -410)
1573+
1574+// Internal not-quite error code for the HTTP cache. In-memory hints suggest
1575+// that the cache entry would not have been useable with the transaction's
1576+// current configuration (e.g. load flags, mode, etc.)
1577+NET_ERROR(CACHE_ENTRY_NOT_SUITABLE, -411)
1578+
1579+// The disk cache is unable to doom this entry.
1580+NET_ERROR(CACHE_DOOM_FAILURE, -412)
1581+
1582+// The disk cache is unable to open or create this entry.
1583+NET_ERROR(CACHE_OPEN_OR_CREATE_FAILURE, -413)
1584+
1585+// The server's response was insecure (e.g. there was a cert error).
1586+NET_ERROR(INSECURE_RESPONSE, -501)
1587+
1588+// An attempt to import a client certificate failed, as the user's key
1589+// database lacked a corresponding private key.
1590+NET_ERROR(NO_PRIVATE_KEY_FOR_CERT, -502)
1591+
1592+// An error adding a certificate to the OS certificate database.
1593+NET_ERROR(ADD_USER_CERT_FAILED, -503)
1594+
1595+// An error occurred while handling a signed exchange.
1596+NET_ERROR(INVALID_SIGNED_EXCHANGE, -504)
1597+
1598+// An error occurred while handling a Web Bundle source.
1599+NET_ERROR(INVALID_WEB_BUNDLE, -505)
1600+
1601+// A Trust Tokens protocol operation-executing request failed for one of a
1602+// number of reasons (precondition failure, internal error, bad response).
1603+NET_ERROR(TRUST_TOKEN_OPERATION_FAILED, -506)
1604+
1605+// When handling a Trust Tokens protocol operation-executing request, the system
1606+// was able to execute the request's Trust Tokens operation without sending the
1607+// request to its destination: for instance, the results could have been present
1608+// in a local cache (for redemption) or the operation could have been diverted
1609+// to a local provider (for "platform-provided" issuance).
1610+NET_ERROR(TRUST_TOKEN_OPERATION_SUCCESS_WITHOUT_SENDING_REQUEST, -507)
1611+
1612+// *** Code -600 is reserved (was FTP_PASV_COMMAND_FAILED). ***
1613+
1614+// A generic error for failed FTP control connection command.
1615+// If possible, please use or add a more specific error code.
1616+NET_ERROR(FTP_FAILED, -601)
1617+
1618+// The server cannot fulfill the request at this point. This is a temporary
1619+// error.
1620+// FTP response code 421.
1621+NET_ERROR(FTP_SERVICE_UNAVAILABLE, -602)
1622+
1623+// The server has aborted the transfer.
1624+// FTP response code 426.
1625+NET_ERROR(FTP_TRANSFER_ABORTED, -603)
1626+
1627+// The file is busy, or some other temporary error condition on opening
1628+// the file.
1629+// FTP response code 450.
1630+NET_ERROR(FTP_FILE_BUSY, -604)
1631+
1632+// Server rejected our command because of syntax errors.
1633+// FTP response codes 500, 501.
1634+NET_ERROR(FTP_SYNTAX_ERROR, -605)
1635+
1636+// Server does not support the command we issued.
1637+// FTP response codes 502, 504.
1638+NET_ERROR(FTP_COMMAND_NOT_SUPPORTED, -606)
1639+
1640+// Server rejected our command because we didn't issue the commands in right
1641+// order.
1642+// FTP response code 503.
1643+NET_ERROR(FTP_BAD_COMMAND_SEQUENCE, -607)
1644+
1645+// PKCS #12 import failed due to incorrect password.
1646+NET_ERROR(PKCS12_IMPORT_BAD_PASSWORD, -701)
1647+
1648+// PKCS #12 import failed due to other error.
1649+NET_ERROR(PKCS12_IMPORT_FAILED, -702)
1650+
1651+// CA import failed - not a CA cert.
1652+NET_ERROR(IMPORT_CA_CERT_NOT_CA, -703)
1653+
1654+// Import failed - certificate already exists in database.
1655+// Note it's a little weird this is an error but reimporting a PKCS12 is ok
1656+// (no-op).  That's how Mozilla does it, though.
1657+NET_ERROR(IMPORT_CERT_ALREADY_EXISTS, -704)
1658+
1659+// CA import failed due to some other error.
1660+NET_ERROR(IMPORT_CA_CERT_FAILED, -705)
1661+
1662+// Server certificate import failed due to some internal error.
1663+NET_ERROR(IMPORT_SERVER_CERT_FAILED, -706)
1664+
1665+// PKCS #12 import failed due to invalid MAC.
1666+NET_ERROR(PKCS12_IMPORT_INVALID_MAC, -707)
1667+
1668+// PKCS #12 import failed due to invalid/corrupt file.
1669+NET_ERROR(PKCS12_IMPORT_INVALID_FILE, -708)
1670+
1671+// PKCS #12 import failed due to unsupported features.
1672+NET_ERROR(PKCS12_IMPORT_UNSUPPORTED, -709)
1673+
1674+// Key generation failed.
1675+NET_ERROR(KEY_GENERATION_FAILED, -710)
1676+
1677+// Error -711 was removed (ORIGIN_BOUND_CERT_GENERATION_FAILED)
1678+
1679+// Failure to export private key.
1680+NET_ERROR(PRIVATE_KEY_EXPORT_FAILED, -712)
1681+
1682+// Self-signed certificate generation failed.
1683+NET_ERROR(SELF_SIGNED_CERT_GENERATION_FAILED, -713)
1684+
1685+// The certificate database changed in some way.
1686+NET_ERROR(CERT_DATABASE_CHANGED, -714)
1687+
1688+// Error -715 was removed (CHANNEL_ID_IMPORT_FAILED)
1689+
1690+// DNS error codes.
1691+
1692+// DNS resolver received a malformed response.
1693+NET_ERROR(DNS_MALFORMED_RESPONSE, -800)
1694+
1695+// DNS server requires TCP
1696+NET_ERROR(DNS_SERVER_REQUIRES_TCP, -801)
1697+
1698+// DNS server failed.  This error is returned for all of the following
1699+// error conditions:
1700+// 1 - Format error - The name server was unable to interpret the query.
1701+// 2 - Server failure - The name server was unable to process this query
1702+//     due to a problem with the name server.
1703+// 4 - Not Implemented - The name server does not support the requested
1704+//     kind of query.
1705+// 5 - Refused - The name server refuses to perform the specified
1706+//     operation for policy reasons.
1707+NET_ERROR(DNS_SERVER_FAILED, -802)
1708+
1709+// DNS transaction timed out.
1710+NET_ERROR(DNS_TIMED_OUT, -803)
1711+
1712+// The entry was not found in cache or other local sources, for lookups where
1713+// only local sources were queried.
1714+// TODO(ericorth): Consider renaming to DNS_LOCAL_MISS or something like that as
1715+// the cache is not necessarily queried either.
1716+NET_ERROR(DNS_CACHE_MISS, -804)
1717+
1718+// Suffix search list rules prevent resolution of the given host name.
1719+NET_ERROR(DNS_SEARCH_EMPTY, -805)
1720+
1721+// Failed to sort addresses according to RFC3484.
1722+NET_ERROR(DNS_SORT_ERROR, -806)
1723+
1724+// Error -807 was removed (DNS_HTTP_FAILED)
1725+
1726+// Failed to resolve the hostname of a DNS-over-HTTPS server.
1727+NET_ERROR(DNS_SECURE_RESOLVER_HOSTNAME_RESOLUTION_FAILED, -808)
1728diff --git a/cef/include/capi/cef_accessibility_handler_capi.h b/cef/include/capi/cef_accessibility_handler_capi.h
1729index 5235aa68b7..cafa9a27d3 100644
1730--- a/cef/include/capi/cef_accessibility_handler_capi.h
1731+++ b/cef/include/capi/cef_accessibility_handler_capi.h
1732@@ -1,4 +1,4 @@
1733-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
1734+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
1735 //
1736 // Redistribution and use in source and binary forms, with or without
1737 // modification, are permitted provided that the following conditions are
1738@@ -33,7 +33,7 @@
1739 // by hand. See the translator.README.txt file in the tools directory for
1740 // more information.
1741 //
1742-// $hash=c487e5fd787b1be8224a8981839e0cfdd0ed74f3$
1743+// $hash=306e44d49ab6198a0fa1bcea50e8a25ee18672be$
1744 //
1745
1746 #ifndef CEF_INCLUDE_CAPI_CEF_ACCESSIBILITY_HANDLER_CAPI_H_
1747diff --git a/cef/include/capi/cef_app_capi.h b/cef/include/capi/cef_app_capi.h
1748index 8dc4595cb9..4554a25dc0 100644
1749--- a/cef/include/capi/cef_app_capi.h
1750+++ b/cef/include/capi/cef_app_capi.h
1751@@ -1,4 +1,4 @@
1752-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
1753+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
1754 //
1755 // Redistribution and use in source and binary forms, with or without
1756 // modification, are permitted provided that the following conditions are
1757@@ -33,7 +33,7 @@
1758 // by hand. See the translator.README.txt file in the tools directory for
1759 // more information.
1760 //
1761-// $hash=a4b63e6e7942e3a3961b4f7141a963980178ae6f$
1762+// $hash=adfba3dd6479b96a95639c13ee1e07bed7b335d0$
1763 //
1764
1765 #ifndef CEF_INCLUDE_CAPI_CEF_APP_CAPI_H_
1766diff --git a/cef/include/capi/cef_audio_handler_capi.h b/cef/include/capi/cef_audio_handler_capi.h
1767index 00a25458d3..ffb9ff0b18 100644
1768--- a/cef/include/capi/cef_audio_handler_capi.h
1769+++ b/cef/include/capi/cef_audio_handler_capi.h
1770@@ -1,4 +1,4 @@
1771-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
1772+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
1773 //
1774 // Redistribution and use in source and binary forms, with or without
1775 // modification, are permitted provided that the following conditions are
1776@@ -33,7 +33,7 @@
1777 // by hand. See the translator.README.txt file in the tools directory for
1778 // more information.
1779 //
1780-// $hash=7a483ed552ecca4f1aaa03800d366beca1ea2dee$
1781+// $hash=fd8d34089842ee8f8490ef1828c3091d12052e28$
1782 //
1783
1784 #ifndef CEF_INCLUDE_CAPI_CEF_AUDIO_HANDLER_CAPI_H_
1785diff --git a/cef/include/capi/cef_auth_callback_capi.h b/cef/include/capi/cef_auth_callback_capi.h
1786index 0e0cffd3f4..6042416513 100644
1787--- a/cef/include/capi/cef_auth_callback_capi.h
1788+++ b/cef/include/capi/cef_auth_callback_capi.h
1789@@ -1,4 +1,4 @@
1790-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
1791+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
1792 //
1793 // Redistribution and use in source and binary forms, with or without
1794 // modification, are permitted provided that the following conditions are
1795@@ -33,7 +33,7 @@
1796 // by hand. See the translator.README.txt file in the tools directory for
1797 // more information.
1798 //
1799-// $hash=2b9508a328ed0218e2c576af455f8d76e5978545$
1800+// $hash=01a33de48ac9780f78d606d8aee2429ddb0c81a2$
1801 //
1802
1803 #ifndef CEF_INCLUDE_CAPI_CEF_AUTH_CALLBACK_CAPI_H_
1804diff --git a/cef/include/capi/cef_browser_capi.h b/cef/include/capi/cef_browser_capi.h
1805index f7a5b17bdb..7517bf0895 100644
1806--- a/cef/include/capi/cef_browser_capi.h
1807+++ b/cef/include/capi/cef_browser_capi.h
1808@@ -1,4 +1,4 @@
1809-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
1810+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
1811 //
1812 // Redistribution and use in source and binary forms, with or without
1813 // modification, are permitted provided that the following conditions are
1814@@ -33,7 +33,7 @@
1815 // by hand. See the translator.README.txt file in the tools directory for
1816 // more information.
1817 //
1818-// $hash=92c4d38f6895018f72fbafeecb13c47320ef0b1d$
1819+// $hash=45bcd802ddf8bc4919ae9b79f70f96b6956cf026$
1820 //
1821
1822 #ifndef CEF_INCLUDE_CAPI_CEF_BROWSER_CAPI_H_
1823@@ -46,8 +46,10 @@
1824 #include "include/capi/cef_frame_capi.h"
1825 #include "include/capi/cef_image_capi.h"
1826 #include "include/capi/cef_navigation_entry_capi.h"
1827+#include "include/capi/cef_permission_request_capi.h"
1828 #include "include/capi/cef_registration_capi.h"
1829 #include "include/capi/cef_request_context_capi.h"
1830+#include "include/capi/cef_task_capi.h"
1831
1832 #ifdef __cplusplus
1833 extern "C" {
1834@@ -55,6 +57,7 @@ extern "C" {
1835
1836 struct _cef_browser_host_t;
1837 struct _cef_client_t;
1838+struct _cef_java_script_result_callback_t;
1839
1840 ///
1841 // Structure used to represent a browser window. When used in the browser
1842@@ -95,6 +98,12 @@ typedef struct _cef_browser_t {
1843   ///
1844   void(CEF_CALLBACK* go_forward)(struct _cef_browser_t* self);
1845
1846+  ///
1847+  // Returns true (1) if the browser can navigate forwards.
1848+  ///
1849+  int(CEF_CALLBACK* can_go_back_or_forward)(struct _cef_browser_t* self,
1850+                                            int num_steps);
1851+
1852   ///
1853   // Returns true (1) if the browser is currently loading.
1854   ///
1855@@ -184,6 +193,19 @@ typedef struct _cef_browser_t {
1856   ///
1857   void(CEF_CALLBACK* get_frame_names)(struct _cef_browser_t* self,
1858                                       cef_string_list_t names);
1859+
1860+  ///
1861+  // Returns the Permission Request Delegate object.
1862+  ///
1863+  struct _cef_browser_permission_request_delegate_t*(
1864+      CEF_CALLBACK* get_permission_request_delegate)(
1865+      struct _cef_browser_t* self);
1866+
1867+  ///
1868+  // Returns the Geolocation Permission handler object.
1869+  ///
1870+  struct _cef_geolocation_acess_t*(CEF_CALLBACK* get_geolocation_permissions)(
1871+      struct _cef_browser_t* self);
1872 } cef_browser_t;
1873
1874 ///
1875@@ -295,6 +317,12 @@ typedef struct _cef_browser_host_t {
1876   struct _cef_browser_t*(CEF_CALLBACK* get_browser)(
1877       struct _cef_browser_host_t* self);
1878
1879+  ///
1880+  // Post task to ui thread.
1881+  ///
1882+  void(CEF_CALLBACK* post_task_to_uithread)(struct _cef_browser_host_t* self,
1883+                                            struct _cef_task_t* task);
1884+
1885   ///
1886   // Request that the browser close. The JavaScript 'onbeforeunload' event will
1887   // be fired. If |force_close| is false (0) the event handler, if any, will be
1888@@ -710,6 +738,102 @@ typedef struct _cef_browser_host_t {
1889       struct _cef_browser_host_t* self,
1890       int frame_rate);
1891
1892+  ///
1893+  // Recompute the WebPreferences based on the current state of the CefSettings,
1894+  // we will also call SetWebPreferences and send the updated WebPreferences to
1895+  // all RenderViews by WebContents.
1896+  ///
1897+  void(CEF_CALLBACK* set_web_preferences)(
1898+      struct _cef_browser_host_t* self,
1899+      const struct _cef_browser_settings_t* browser_settings);
1900+
1901+  ///
1902+  // PutUserAgent
1903+  ///
1904+  void(CEF_CALLBACK* put_user_agent)(struct _cef_browser_host_t* self,
1905+                                     const cef_string_t* ua);
1906+
1907+  ///
1908+  // DefaultUserAgent
1909+  ///
1910+  // The resulting string must be freed by calling cef_string_userfree_free().
1911+  cef_string_userfree_t(CEF_CALLBACK* default_user_agent)(
1912+      struct _cef_browser_host_t* self);
1913+
1914+  ///
1915+  // SetBackgroundColor
1916+  ///
1917+  void(CEF_CALLBACK* set_background_color)(struct _cef_browser_host_t* self,
1918+                                           int color);
1919+
1920+  ///
1921+  // RegisterArkJSfunction
1922+  ///
1923+  void(CEF_CALLBACK* register_ark_jsfunction)(struct _cef_browser_host_t* self,
1924+                                              const cef_string_t* object_name,
1925+                                              cef_string_list_t method_list);
1926+
1927+  ///
1928+  // UnregisterArkJSfunction
1929+  ///
1930+  void(CEF_CALLBACK* unregister_ark_jsfunction)(
1931+      struct _cef_browser_host_t* self,
1932+      const cef_string_t* object_name,
1933+      cef_string_list_t method_list);
1934+
1935+  ///
1936+  // Gets the title for the current page.
1937+  ///
1938+  // The resulting string must be freed by calling cef_string_userfree_free().
1939+  cef_string_userfree_t(CEF_CALLBACK* title)(struct _cef_browser_host_t* self);
1940+
1941+  ///
1942+  // Gets the latest hitdata
1943+  ///
1944+  void(CEF_CALLBACK* get_hit_data)(struct _cef_browser_host_t* self,
1945+                                   int* type,
1946+                                   cef_string_t* extra_data);
1947+
1948+  ///
1949+  // Gets the progress for the current page.
1950+  ///
1951+  int(CEF_CALLBACK* page_load_progress)(struct _cef_browser_host_t* self);
1952+
1953+  ///
1954+  // Gets the progress for the current page.
1955+  ///
1956+  float(CEF_CALLBACK* scale)(struct _cef_browser_host_t* self);
1957+
1958+  ///
1959+  // Loads the given data into this WebView, using baseUrl as the base URL for
1960+  // the content. The base URL is used both to resolve relative URLs and when
1961+  // applying JavaScript's same origin policy. The historyUrl is used for the
1962+  // history entry. optional_param=baseUrl, optional_param=data,
1963+  // optional_param=mimeType, optional_param=encoding, optional_param=historyUrl
1964+  ///
1965+  void(CEF_CALLBACK* load_with_data_and_base_url)(
1966+      struct _cef_browser_host_t* self,
1967+      const cef_string_t* baseUrl,
1968+      const cef_string_t* data,
1969+      const cef_string_t* mimeType,
1970+      const cef_string_t* encoding,
1971+      const cef_string_t* historyUrl);
1972+
1973+  ///
1974+  // Loads the given data into this WebView optional_param=data,
1975+  // optional_param=mimeType, optional_param=encoding,
1976+  ///
1977+  void(CEF_CALLBACK* load_with_data)(struct _cef_browser_host_t* self,
1978+                                     const cef_string_t* data,
1979+                                     const cef_string_t* mimeType,
1980+                                     const cef_string_t* encoding);
1981+
1982+  ///
1983+  // add visited url.
1984+  ///
1985+  void(CEF_CALLBACK* add_visited_links)(struct _cef_browser_host_t* self,
1986+                                        cef_string_list_t urls);
1987+
1988   ///
1989   // Begins a new composition or updates the existing composition. Blink has a
1990   // special node (a composition node) that allows the input function to change
1991@@ -726,10 +850,11 @@ typedef struct _cef_browser_host_t {
1992   // or completed. To cancel the composition call ImeCancelComposition. To
1993   // complete the composition call either ImeCommitText or
1994   // ImeFinishComposingText. Completion is usually signaled when:
1995-  //   A. The client receives a WM_IME_COMPOSITION message with a GCS_RESULTSTR
1996+  //   A. The client receives a WM_IME_COMPOSITION message with a
1997+  //   GCS_RESULTSTR
1998   //      flag (on Windows), or;
1999-  //   B. The client receives a "commit" signal of GtkIMContext (on Linux), or;
2000-  //   C. insertText of NSTextInput is called (on Mac).
2001+  //   B. The client receives a "commit" signal of GtkIMContext (on Linux),
2002+  //   or; C. insertText of NSTextInput is called (on Mac).
2003   //
2004   // This function is only used when window rendering is disabled.
2005   ///
2006@@ -910,6 +1035,14 @@ typedef struct _cef_browser_host_t {
2007   // be called on the UI thread.
2008   ///
2009   int(CEF_CALLBACK* is_audio_muted)(struct _cef_browser_host_t* self);
2010+
2011+  ///
2012+  // Execute a string of JavaScript code, return result by callback
2013+  ///
2014+  void(CEF_CALLBACK* execute_java_script)(
2015+      struct _cef_browser_host_t* self,
2016+      const cef_string_t* code,
2017+      struct _cef_java_script_result_callback_t* callback);
2018 } cef_browser_host_t;
2019
2020 ///
2021@@ -946,6 +1079,25 @@ CEF_EXPORT cef_browser_t* cef_browser_host_create_browser_sync(
2022     struct _cef_dictionary_value_t* extra_info,
2023     struct _cef_request_context_t* request_context);
2024
2025+///
2026+// Structure to implement to be notified of asynchronous completion via
2027+// cef_browser_host_tBase::execute_java_script().
2028+///
2029+typedef struct _cef_java_script_result_callback_t {
2030+  ///
2031+  // Base structure.
2032+  ///
2033+  cef_base_ref_counted_t base;
2034+
2035+  ///
2036+  // Method that will be called upon completion. |num_deleted| will be the
2037+  // number of cookies that were deleted.
2038+  ///
2039+  void(CEF_CALLBACK* on_java_script_exe_result)(
2040+      struct _cef_java_script_result_callback_t* self,
2041+      const cef_string_t* result);
2042+} cef_java_script_result_callback_t;
2043+
2044 #ifdef __cplusplus
2045 }
2046 #endif
2047diff --git a/cef/include/capi/cef_browser_process_handler_capi.h b/cef/include/capi/cef_browser_process_handler_capi.h
2048index 43f8047723..2a3dc178e7 100644
2049--- a/cef/include/capi/cef_browser_process_handler_capi.h
2050+++ b/cef/include/capi/cef_browser_process_handler_capi.h
2051@@ -1,4 +1,4 @@
2052-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2053+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2054 //
2055 // Redistribution and use in source and binary forms, with or without
2056 // modification, are permitted provided that the following conditions are
2057@@ -33,7 +33,7 @@
2058 // by hand. See the translator.README.txt file in the tools directory for
2059 // more information.
2060 //
2061-// $hash=ade537f836add7fe0b5fd94ceba26d678abb3e43$
2062+// $hash=8c97f9b58c642c144cc37824ad820192640307cb$
2063 //
2064
2065 #ifndef CEF_INCLUDE_CAPI_CEF_BROWSER_PROCESS_HANDLER_CAPI_H_
2066diff --git a/cef/include/capi/cef_callback_capi.h b/cef/include/capi/cef_callback_capi.h
2067index 4ed4b825ae..1ece08781f 100644
2068--- a/cef/include/capi/cef_callback_capi.h
2069+++ b/cef/include/capi/cef_callback_capi.h
2070@@ -1,4 +1,4 @@
2071-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2072+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2073 //
2074 // Redistribution and use in source and binary forms, with or without
2075 // modification, are permitted provided that the following conditions are
2076@@ -33,7 +33,7 @@
2077 // by hand. See the translator.README.txt file in the tools directory for
2078 // more information.
2079 //
2080-// $hash=cd8c183355a6808abd763ecc0396b5da6c15b3f9$
2081+// $hash=10ef5088ce2a5c6ffb38f8864d3aad6e5ac88b40$
2082 //
2083
2084 #ifndef CEF_INCLUDE_CAPI_CEF_CALLBACK_CAPI_H_
2085diff --git a/cef/include/capi/cef_client_capi.h b/cef/include/capi/cef_client_capi.h
2086index 8351d9ae76..f7eace3f95 100644
2087--- a/cef/include/capi/cef_client_capi.h
2088+++ b/cef/include/capi/cef_client_capi.h
2089@@ -1,4 +1,4 @@
2090-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2091+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2092 //
2093 // Redistribution and use in source and binary forms, with or without
2094 // modification, are permitted provided that the following conditions are
2095@@ -33,7 +33,7 @@
2096 // by hand. See the translator.README.txt file in the tools directory for
2097 // more information.
2098 //
2099-// $hash=14eca959988209ba8f95037a47192fd50d64f2f1$
2100+// $hash=16bf02f2a17c61e7f0724b364fb3669b1d66210a$
2101 //
2102
2103 #ifndef CEF_INCLUDE_CAPI_CEF_CLIENT_CAPI_H_
2104@@ -53,6 +53,7 @@
2105 #include "include/capi/cef_keyboard_handler_capi.h"
2106 #include "include/capi/cef_life_span_handler_capi.h"
2107 #include "include/capi/cef_load_handler_capi.h"
2108+#include "include/capi/cef_permission_request_capi.h"
2109 #include "include/capi/cef_print_handler_capi.h"
2110 #include "include/capi/cef_process_message_capi.h"
2111 #include "include/capi/cef_render_handler_capi.h"
2112@@ -166,6 +167,12 @@ typedef struct _cef_client_t {
2113   struct _cef_request_handler_t*(CEF_CALLBACK* get_request_handler)(
2114       struct _cef_client_t* self);
2115
2116+  ///
2117+  // Return the handler for browser geolocation permission request events.
2118+  ///
2119+  struct _cef_permission_request_t*(CEF_CALLBACK* get_permission_request)(
2120+      struct _cef_client_t* self);
2121+
2122   ///
2123   // Called when a new message is received from a different process. Return true
2124   // (1) if the message was handled or false (0) otherwise. Do not keep a
2125@@ -177,6 +184,16 @@ typedef struct _cef_client_t {
2126       struct _cef_frame_t* frame,
2127       cef_process_id_t source_process,
2128       struct _cef_process_message_t* message);
2129+
2130+  ///
2131+  // Returns the list of arguments NotifyJavaScriptResult.
2132+  ///
2133+  int(CEF_CALLBACK* notify_java_script_result)(
2134+      struct _cef_client_t* self,
2135+      struct _cef_list_value_t* args,
2136+      const cef_string_t* method,
2137+      const cef_string_t* object_name,
2138+      struct _cef_list_value_t* result);
2139 } cef_client_t;
2140
2141 #ifdef __cplusplus
2142diff --git a/cef/include/capi/cef_command_line_capi.h b/cef/include/capi/cef_command_line_capi.h
2143index df70b2a029..3f2127f0b0 100644
2144--- a/cef/include/capi/cef_command_line_capi.h
2145+++ b/cef/include/capi/cef_command_line_capi.h
2146@@ -1,4 +1,4 @@
2147-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2148+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2149 //
2150 // Redistribution and use in source and binary forms, with or without
2151 // modification, are permitted provided that the following conditions are
2152@@ -33,7 +33,7 @@
2153 // by hand. See the translator.README.txt file in the tools directory for
2154 // more information.
2155 //
2156-// $hash=5af5bf1e877dd53f21f751d332a9e2166817324c$
2157+// $hash=1c67e681e14c38b992b8356f0dfea27e970f2a44$
2158 //
2159
2160 #ifndef CEF_INCLUDE_CAPI_CEF_COMMAND_LINE_CAPI_H_
2161diff --git a/cef/include/capi/cef_context_menu_handler_capi.h b/cef/include/capi/cef_context_menu_handler_capi.h
2162index 59b1f28785..f83dfa3646 100644
2163--- a/cef/include/capi/cef_context_menu_handler_capi.h
2164+++ b/cef/include/capi/cef_context_menu_handler_capi.h
2165@@ -1,4 +1,4 @@
2166-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2167+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2168 //
2169 // Redistribution and use in source and binary forms, with or without
2170 // modification, are permitted provided that the following conditions are
2171@@ -33,7 +33,7 @@
2172 // by hand. See the translator.README.txt file in the tools directory for
2173 // more information.
2174 //
2175-// $hash=175779df75a1405fcc5c337a09e6322c556698ba$
2176+// $hash=fd33ce439e4379d231b6be16bdc1786f314d98e4$
2177 //
2178
2179 #ifndef CEF_INCLUDE_CAPI_CEF_CONTEXT_MENU_HANDLER_CAPI_H_
2180diff --git a/cef/include/capi/cef_cookie_capi.h b/cef/include/capi/cef_cookie_capi.h
2181index d6f7cb68be..86a809cd43 100644
2182--- a/cef/include/capi/cef_cookie_capi.h
2183+++ b/cef/include/capi/cef_cookie_capi.h
2184@@ -1,4 +1,4 @@
2185-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2186+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2187 //
2188 // Redistribution and use in source and binary forms, with or without
2189 // modification, are permitted provided that the following conditions are
2190@@ -33,7 +33,7 @@
2191 // by hand. See the translator.README.txt file in the tools directory for
2192 // more information.
2193 //
2194-// $hash=b19ef1c8a781f8d59276357609fe64370bb8a107$
2195+// $hash=f56fb7f36efbc915453237ce10712eb49e436b00$
2196 //
2197
2198 #ifndef CEF_INCLUDE_CAPI_CEF_COOKIE_CAPI_H_
2199@@ -61,6 +61,35 @@ typedef struct _cef_cookie_manager_t {
2200   ///
2201   cef_base_ref_counted_t base;
2202
2203+  ///
2204+  // Get whether this cookie manager can accpet and send cookies. Returns false
2205+  // (0) if can't.
2206+  ///
2207+  int(CEF_CALLBACK* is_accept_cookie_allowed)(
2208+      struct _cef_cookie_manager_t* self);
2209+
2210+  ///
2211+  // Set whether this cookie manager can accpet and send cookies.
2212+  ///
2213+  void(CEF_CALLBACK* put_accept_cookie_enabled)(
2214+      struct _cef_cookie_manager_t* self,
2215+      int accept);
2216+
2217+  ///
2218+  // Get whether this cookie manager can accpet and send cookies for file scheme
2219+  // URL. Returns false (0) if can't.
2220+  ///
2221+  int(CEF_CALLBACK* is_file_urlscheme_cookies_allowed)(
2222+      struct _cef_cookie_manager_t* self);
2223+
2224+  ///
2225+  // Set whether this cookie manager can accpet and send cookies for file scheme
2226+  // URL.
2227+  ///
2228+  void(CEF_CALLBACK* put_accept_file_urlscheme_cookies_enabled)(
2229+      struct _cef_cookie_manager_t* self,
2230+      int allow);
2231+
2232   ///
2233   // Visit all cookies on the UI thread. The returned cookies are ordered by
2234   // longest path, then by earliest creation date. Returns false (0) if cookies
2235@@ -110,6 +139,7 @@ typedef struct _cef_cookie_manager_t {
2236       struct _cef_cookie_manager_t* self,
2237       const cef_string_t* url,
2238       const cef_string_t* cookie_name,
2239+      int is_session,
2240       struct _cef_delete_cookies_callback_t* callback);
2241
2242   ///
2243@@ -132,6 +162,15 @@ typedef struct _cef_cookie_manager_t {
2244 CEF_EXPORT cef_cookie_manager_t* cef_cookie_manager_get_global_manager(
2245     struct _cef_completion_callback_t* callback);
2246
2247+///
2248+// Convert string cookie to CefCookie. The function will return true (1) when
2249+// excuted success, otherwise return false (0).
2250+///
2251+CEF_EXPORT int cef_cookie_manager_create_cef_cookie(
2252+    const cef_string_t* url,
2253+    const cef_string_t* value,
2254+    struct _cef_cookie_t* cef_cookie);
2255+
2256 ///
2257 // Structure to implement for visiting cookie values. The functions of this
2258 // structure will always be called on the UI thread.
2259@@ -154,6 +193,14 @@ typedef struct _cef_cookie_visitor_t {
2260                            int count,
2261                            int total,
2262                            int* deleteCookie);
2263+
2264+  ///
2265+  // Method that will be called when all cookies have been visited, contenate
2266+  // them into one string line. The string cookie line will be passed into this
2267+  // function.
2268+  ///
2269+  void(CEF_CALLBACK* set_cookie_line)(struct _cef_cookie_visitor_t* self,
2270+                                      const cef_string_t* cookieLine);
2271 } cef_cookie_visitor_t;
2272
2273 ///
2274diff --git a/cef/include/capi/cef_crash_util_capi.h b/cef/include/capi/cef_crash_util_capi.h
2275index 48ce101bbc..2a569bdb80 100644
2276--- a/cef/include/capi/cef_crash_util_capi.h
2277+++ b/cef/include/capi/cef_crash_util_capi.h
2278@@ -1,4 +1,4 @@
2279-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2280+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2281 //
2282 // Redistribution and use in source and binary forms, with or without
2283 // modification, are permitted provided that the following conditions are
2284@@ -33,7 +33,7 @@
2285 // by hand. See the translator.README.txt file in the tools directory for
2286 // more information.
2287 //
2288-// $hash=5e19231e3476eef376c2742e8d375bee7bd4ea2d$
2289+// $hash=0460e68eb7d1b1188706c42d14beafbf9a6f7126$
2290 //
2291
2292 #ifndef CEF_INCLUDE_CAPI_CEF_CRASH_UTIL_CAPI_H_
2293diff --git a/cef/include/capi/cef_devtools_message_observer_capi.h b/cef/include/capi/cef_devtools_message_observer_capi.h
2294index 93fe069b2c..137f82136d 100644
2295--- a/cef/include/capi/cef_devtools_message_observer_capi.h
2296+++ b/cef/include/capi/cef_devtools_message_observer_capi.h
2297@@ -1,4 +1,4 @@
2298-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2299+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2300 //
2301 // Redistribution and use in source and binary forms, with or without
2302 // modification, are permitted provided that the following conditions are
2303@@ -33,7 +33,7 @@
2304 // by hand. See the translator.README.txt file in the tools directory for
2305 // more information.
2306 //
2307-// $hash=1a256c04042ebd4867f39e1c31def558871b2bab$
2308+// $hash=ec62239c2b24ff512b64ca758be825ff57fb3b6b$
2309 //
2310
2311 #ifndef CEF_INCLUDE_CAPI_CEF_DEVTOOLS_MESSAGE_OBSERVER_CAPI_H_
2312diff --git a/cef/include/capi/cef_dialog_handler_capi.h b/cef/include/capi/cef_dialog_handler_capi.h
2313index c0dd985060..51563dbdc0 100644
2314--- a/cef/include/capi/cef_dialog_handler_capi.h
2315+++ b/cef/include/capi/cef_dialog_handler_capi.h
2316@@ -1,4 +1,4 @@
2317-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2318+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2319 //
2320 // Redistribution and use in source and binary forms, with or without
2321 // modification, are permitted provided that the following conditions are
2322@@ -33,7 +33,7 @@
2323 // by hand. See the translator.README.txt file in the tools directory for
2324 // more information.
2325 //
2326-// $hash=5ae5556e4085faf8cf17ee757f5eeac9197f75c0$
2327+// $hash=0f56154217707d141912dc8a298279df8df04311$
2328 //
2329
2330 #ifndef CEF_INCLUDE_CAPI_CEF_DIALOG_HANDLER_CAPI_H_
2331diff --git a/cef/include/capi/cef_display_handler_capi.h b/cef/include/capi/cef_display_handler_capi.h
2332index 09d41dd7a7..5f5a0f34fc 100644
2333--- a/cef/include/capi/cef_display_handler_capi.h
2334+++ b/cef/include/capi/cef_display_handler_capi.h
2335@@ -1,4 +1,4 @@
2336-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2337+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2338 //
2339 // Redistribution and use in source and binary forms, with or without
2340 // modification, are permitted provided that the following conditions are
2341@@ -33,7 +33,7 @@
2342 // by hand. See the translator.README.txt file in the tools directory for
2343 // more information.
2344 //
2345-// $hash=067fd169a30bec1ad8eeacc5ab1ac750cf59640e$
2346+// $hash=0c615f158ce150e61102f4b3493b50951a302231$
2347 //
2348
2349 #ifndef CEF_INCLUDE_CAPI_CEF_DISPLAY_HANDLER_CAPI_H_
2350@@ -80,6 +80,25 @@ typedef struct _cef_display_handler_t {
2351                                            struct _cef_browser_t* browser,
2352                                            cef_string_list_t icon_urls);
2353
2354+  ///
2355+  // onReceivedTouchIconUrl.
2356+  ///
2357+  void(CEF_CALLBACK* on_received_touch_icon_url)(
2358+      struct _cef_display_handler_t* self,
2359+      struct _cef_browser_t* browser,
2360+      const cef_string_t* icon_url,
2361+      int precomposed);
2362+
2363+  ///
2364+  // onReceivedIcon.
2365+  ///
2366+  void(CEF_CALLBACK* on_received_icon)(struct _cef_display_handler_t* self,
2367+                                       const void* data,
2368+                                       size_t width,
2369+                                       size_t height,
2370+                                       cef_color_type_t color_type,
2371+                                       cef_alpha_type_t alpha_type);
2372+
2373   ///
2374   // Called when web content in the page has toggled fullscreen mode. If
2375   // |fullscreen| is true (1) the content will automatically be sized to fill
2376diff --git a/cef/include/capi/cef_dom_capi.h b/cef/include/capi/cef_dom_capi.h
2377index b165078a3e..97300ec387 100644
2378--- a/cef/include/capi/cef_dom_capi.h
2379+++ b/cef/include/capi/cef_dom_capi.h
2380@@ -1,4 +1,4 @@
2381-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2382+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2383 //
2384 // Redistribution and use in source and binary forms, with or without
2385 // modification, are permitted provided that the following conditions are
2386@@ -33,7 +33,7 @@
2387 // by hand. See the translator.README.txt file in the tools directory for
2388 // more information.
2389 //
2390-// $hash=0517dc6c42fdde9fecfc4549fab1ea12b614e143$
2391+// $hash=c6de3fb4d64a2b2ad06a4b9c5e9d7625d40b5bb6$
2392 //
2393
2394 #ifndef CEF_INCLUDE_CAPI_CEF_DOM_CAPI_H_
2395diff --git a/cef/include/capi/cef_download_handler_capi.h b/cef/include/capi/cef_download_handler_capi.h
2396index cfccc28376..29b0587103 100644
2397--- a/cef/include/capi/cef_download_handler_capi.h
2398+++ b/cef/include/capi/cef_download_handler_capi.h
2399@@ -1,4 +1,4 @@
2400-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2401+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2402 //
2403 // Redistribution and use in source and binary forms, with or without
2404 // modification, are permitted provided that the following conditions are
2405@@ -33,7 +33,7 @@
2406 // by hand. See the translator.README.txt file in the tools directory for
2407 // more information.
2408 //
2409-// $hash=f0ceb73b289072a01c45c6e7abf339a4ec924d29$
2410+// $hash=ec13ec3e2819e4ac49792c3a1c57bc60b45fb95b$
2411 //
2412
2413 #ifndef CEF_INCLUDE_CAPI_CEF_DOWNLOAD_HANDLER_CAPI_H_
2414diff --git a/cef/include/capi/cef_download_item_capi.h b/cef/include/capi/cef_download_item_capi.h
2415index 7b628a3504..2d52f11b42 100644
2416--- a/cef/include/capi/cef_download_item_capi.h
2417+++ b/cef/include/capi/cef_download_item_capi.h
2418@@ -1,4 +1,4 @@
2419-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2420+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2421 //
2422 // Redistribution and use in source and binary forms, with or without
2423 // modification, are permitted provided that the following conditions are
2424@@ -33,7 +33,7 @@
2425 // by hand. See the translator.README.txt file in the tools directory for
2426 // more information.
2427 //
2428-// $hash=d84044bb582b029af5fa46c75f35b3da948dffd2$
2429+// $hash=b9f0d91dd2fdb3625365ff8b332b08e1f0ea1187$
2430 //
2431
2432 #ifndef CEF_INCLUDE_CAPI_CEF_DOWNLOAD_ITEM_CAPI_H_
2433diff --git a/cef/include/capi/cef_drag_data_capi.h b/cef/include/capi/cef_drag_data_capi.h
2434index 97efa21a3e..7e133155d6 100644
2435--- a/cef/include/capi/cef_drag_data_capi.h
2436+++ b/cef/include/capi/cef_drag_data_capi.h
2437@@ -1,4 +1,4 @@
2438-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2439+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2440 //
2441 // Redistribution and use in source and binary forms, with or without
2442 // modification, are permitted provided that the following conditions are
2443@@ -33,7 +33,7 @@
2444 // by hand. See the translator.README.txt file in the tools directory for
2445 // more information.
2446 //
2447-// $hash=9663321e2be1d000ac54e195c81f210ae40773d1$
2448+// $hash=b6e3236a062cd25ec26c3daeb1940d1e1bf0d96a$
2449 //
2450
2451 #ifndef CEF_INCLUDE_CAPI_CEF_DRAG_DATA_CAPI_H_
2452diff --git a/cef/include/capi/cef_drag_handler_capi.h b/cef/include/capi/cef_drag_handler_capi.h
2453index 260fa4810b..68b26d7165 100644
2454--- a/cef/include/capi/cef_drag_handler_capi.h
2455+++ b/cef/include/capi/cef_drag_handler_capi.h
2456@@ -1,4 +1,4 @@
2457-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2458+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2459 //
2460 // Redistribution and use in source and binary forms, with or without
2461 // modification, are permitted provided that the following conditions are
2462@@ -33,7 +33,7 @@
2463 // by hand. See the translator.README.txt file in the tools directory for
2464 // more information.
2465 //
2466-// $hash=1cc1f134e68406ae3b05f7e181e12f27262772f0$
2467+// $hash=5b2051c42c1d4c41b85ca823d34b26bfa5de6777$
2468 //
2469
2470 #ifndef CEF_INCLUDE_CAPI_CEF_DRAG_HANDLER_CAPI_H_
2471diff --git a/cef/include/capi/cef_extension_capi.h b/cef/include/capi/cef_extension_capi.h
2472index f51d570d66..24ba87d641 100644
2473--- a/cef/include/capi/cef_extension_capi.h
2474+++ b/cef/include/capi/cef_extension_capi.h
2475@@ -1,4 +1,4 @@
2476-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2477+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2478 //
2479 // Redistribution and use in source and binary forms, with or without
2480 // modification, are permitted provided that the following conditions are
2481@@ -33,7 +33,7 @@
2482 // by hand. See the translator.README.txt file in the tools directory for
2483 // more information.
2484 //
2485-// $hash=5d5251098be1477705de2a21502dec2d8338ce00$
2486+// $hash=fcfe34c1517ebdb3f00c1f737b91361e771b820d$
2487 //
2488
2489 #ifndef CEF_INCLUDE_CAPI_CEF_EXTENSION_CAPI_H_
2490diff --git a/cef/include/capi/cef_extension_handler_capi.h b/cef/include/capi/cef_extension_handler_capi.h
2491index 023417c09c..73c4f3bca1 100644
2492--- a/cef/include/capi/cef_extension_handler_capi.h
2493+++ b/cef/include/capi/cef_extension_handler_capi.h
2494@@ -1,4 +1,4 @@
2495-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2496+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2497 //
2498 // Redistribution and use in source and binary forms, with or without
2499 // modification, are permitted provided that the following conditions are
2500@@ -33,7 +33,7 @@
2501 // by hand. See the translator.README.txt file in the tools directory for
2502 // more information.
2503 //
2504-// $hash=c952241dabb9d99109ebb64acba0124e43150628$
2505+// $hash=768e2436e54cceb2675ddd03ebdc61b5c0785bdc$
2506 //
2507
2508 #ifndef CEF_INCLUDE_CAPI_CEF_EXTENSION_HANDLER_CAPI_H_
2509diff --git a/cef/include/capi/cef_file_util_capi.h b/cef/include/capi/cef_file_util_capi.h
2510index d706775605..234f4240f8 100644
2511--- a/cef/include/capi/cef_file_util_capi.h
2512+++ b/cef/include/capi/cef_file_util_capi.h
2513@@ -1,4 +1,4 @@
2514-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2515+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2516 //
2517 // Redistribution and use in source and binary forms, with or without
2518 // modification, are permitted provided that the following conditions are
2519@@ -33,7 +33,7 @@
2520 // by hand. See the translator.README.txt file in the tools directory for
2521 // more information.
2522 //
2523-// $hash=00d75d4f1968686cec7db84a59df89d98d8fe146$
2524+// $hash=e76fa23e9682bf0865319d93e4009752ac8f854f$
2525 //
2526
2527 #ifndef CEF_INCLUDE_CAPI_CEF_FILE_UTIL_CAPI_H_
2528diff --git a/cef/include/capi/cef_find_handler_capi.h b/cef/include/capi/cef_find_handler_capi.h
2529index 3d42a13fdc..c2f3e08aaa 100644
2530--- a/cef/include/capi/cef_find_handler_capi.h
2531+++ b/cef/include/capi/cef_find_handler_capi.h
2532@@ -1,4 +1,4 @@
2533-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2534+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2535 //
2536 // Redistribution and use in source and binary forms, with or without
2537 // modification, are permitted provided that the following conditions are
2538@@ -33,7 +33,7 @@
2539 // by hand. See the translator.README.txt file in the tools directory for
2540 // more information.
2541 //
2542-// $hash=03bb69a14868a95abf3bf7b1608dc351480e307f$
2543+// $hash=b1fe7f7db5ab92c6ae64dc1288b6fd47c80f9423$
2544 //
2545
2546 #ifndef CEF_INCLUDE_CAPI_CEF_FIND_HANDLER_CAPI_H_
2547diff --git a/cef/include/capi/cef_focus_handler_capi.h b/cef/include/capi/cef_focus_handler_capi.h
2548index 69fb5a45c6..1615986150 100644
2549--- a/cef/include/capi/cef_focus_handler_capi.h
2550+++ b/cef/include/capi/cef_focus_handler_capi.h
2551@@ -1,4 +1,4 @@
2552-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2553+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2554 //
2555 // Redistribution and use in source and binary forms, with or without
2556 // modification, are permitted provided that the following conditions are
2557@@ -33,7 +33,7 @@
2558 // by hand. See the translator.README.txt file in the tools directory for
2559 // more information.
2560 //
2561-// $hash=0fccb41381e922e9d9545ae45ba3e6cf1916c4b0$
2562+// $hash=a136a2679c8af339b21a89e8ae3090a9dbb8daa7$
2563 //
2564
2565 #ifndef CEF_INCLUDE_CAPI_CEF_FOCUS_HANDLER_CAPI_H_
2566diff --git a/cef/include/capi/cef_frame_capi.h b/cef/include/capi/cef_frame_capi.h
2567index 7a6f6046cd..4e619607f1 100644
2568--- a/cef/include/capi/cef_frame_capi.h
2569+++ b/cef/include/capi/cef_frame_capi.h
2570@@ -1,4 +1,4 @@
2571-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2572+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2573 //
2574 // Redistribution and use in source and binary forms, with or without
2575 // modification, are permitted provided that the following conditions are
2576@@ -33,7 +33,7 @@
2577 // by hand. See the translator.README.txt file in the tools directory for
2578 // more information.
2579 //
2580-// $hash=bce865a34f45e6dee8f413f0d6bd7f4c37ab55c0$
2581+// $hash=ae1cd10d052cdc0f603c9dbf9b99f46746a795ef$
2582 //
2583
2584 #ifndef CEF_INCLUDE_CAPI_CEF_FRAME_CAPI_H_
2585@@ -214,6 +214,18 @@ typedef struct _cef_frame_t {
2586   void(CEF_CALLBACK* visit_dom)(struct _cef_frame_t* self,
2587                                 struct _cef_domvisitor_t* visitor);
2588
2589+  ///
2590+  // Loads the given URL with additional HTTP headers, specified as a map from
2591+  // name to value. Note that if this map contains any of the headers that are
2592+  // set by default by this WebView, such as those controlling caching, accept
2593+  // types or the User-Agent, their values may be overridden by this WebView's
2594+  // defaults.
2595+  ///
2596+  void(CEF_CALLBACK* load_header_url)(
2597+      struct _cef_frame_t* self,
2598+      const cef_string_t* url,
2599+      const cef_string_t* additionalHttpHeaders);
2600+
2601   ///
2602   // Create a new URL request that will be treated as originating from this
2603   // frame and the associated browser. This request may be intercepted by the
2604diff --git a/cef/include/capi/cef_image_capi.h b/cef/include/capi/cef_image_capi.h
2605index 338e3151c7..99af056297 100644
2606--- a/cef/include/capi/cef_image_capi.h
2607+++ b/cef/include/capi/cef_image_capi.h
2608@@ -1,4 +1,4 @@
2609-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2610+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2611 //
2612 // Redistribution and use in source and binary forms, with or without
2613 // modification, are permitted provided that the following conditions are
2614@@ -33,7 +33,7 @@
2615 // by hand. See the translator.README.txt file in the tools directory for
2616 // more information.
2617 //
2618-// $hash=d9da8862142742e780086714bbd4fb44ac95cf2c$
2619+// $hash=b5a36ef39ff250c9d3cb1e9a8c7ee38d7e0f8b3f$
2620 //
2621
2622 #ifndef CEF_INCLUDE_CAPI_CEF_IMAGE_CAPI_H_
2623diff --git a/cef/include/capi/cef_jsdialog_handler_capi.h b/cef/include/capi/cef_jsdialog_handler_capi.h
2624index 9ebc436ea1..c0ab4497ed 100644
2625--- a/cef/include/capi/cef_jsdialog_handler_capi.h
2626+++ b/cef/include/capi/cef_jsdialog_handler_capi.h
2627@@ -1,4 +1,4 @@
2628-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2629+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2630 //
2631 // Redistribution and use in source and binary forms, with or without
2632 // modification, are permitted provided that the following conditions are
2633@@ -33,7 +33,7 @@
2634 // by hand. See the translator.README.txt file in the tools directory for
2635 // more information.
2636 //
2637-// $hash=d991e2a7d1a58a013e4d3a963361fed6918f4ec3$
2638+// $hash=c68332a779bab425aa2e6a858d20a43448631890$
2639 //
2640
2641 #ifndef CEF_INCLUDE_CAPI_CEF_JSDIALOG_HANDLER_CAPI_H_
2642diff --git a/cef/include/capi/cef_keyboard_handler_capi.h b/cef/include/capi/cef_keyboard_handler_capi.h
2643index e88ab7272b..3d6c50fc38 100644
2644--- a/cef/include/capi/cef_keyboard_handler_capi.h
2645+++ b/cef/include/capi/cef_keyboard_handler_capi.h
2646@@ -1,4 +1,4 @@
2647-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2648+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2649 //
2650 // Redistribution and use in source and binary forms, with or without
2651 // modification, are permitted provided that the following conditions are
2652@@ -33,7 +33,7 @@
2653 // by hand. See the translator.README.txt file in the tools directory for
2654 // more information.
2655 //
2656-// $hash=d804a2db0f9ac13afd249407c85cb8d5852508ac$
2657+// $hash=140d3a3ce78f5e8ab50a24a2fd6377e7a8ea3256$
2658 //
2659
2660 #ifndef CEF_INCLUDE_CAPI_CEF_KEYBOARD_HANDLER_CAPI_H_
2661diff --git a/cef/include/capi/cef_life_span_handler_capi.h b/cef/include/capi/cef_life_span_handler_capi.h
2662index b06a3445b2..a5be3bbe54 100644
2663--- a/cef/include/capi/cef_life_span_handler_capi.h
2664+++ b/cef/include/capi/cef_life_span_handler_capi.h
2665@@ -1,4 +1,4 @@
2666-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2667+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2668 //
2669 // Redistribution and use in source and binary forms, with or without
2670 // modification, are permitted provided that the following conditions are
2671@@ -33,7 +33,7 @@
2672 // by hand. See the translator.README.txt file in the tools directory for
2673 // more information.
2674 //
2675-// $hash=d7521ac4f73dabd876344400a165d15954c770b0$
2676+// $hash=a27d95f5d86c5d4ab8a0ced5f05f43923df8b84d$
2677 //
2678
2679 #ifndef CEF_INCLUDE_CAPI_CEF_LIFE_SPAN_HANDLER_CAPI_H_
2680diff --git a/cef/include/capi/cef_load_handler_capi.h b/cef/include/capi/cef_load_handler_capi.h
2681index 4352a822a8..13871a2b69 100644
2682--- a/cef/include/capi/cef_load_handler_capi.h
2683+++ b/cef/include/capi/cef_load_handler_capi.h
2684@@ -1,4 +1,4 @@
2685-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2686+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2687 //
2688 // Redistribution and use in source and binary forms, with or without
2689 // modification, are permitted provided that the following conditions are
2690@@ -33,7 +33,7 @@
2691 // by hand. See the translator.README.txt file in the tools directory for
2692 // more information.
2693 //
2694-// $hash=6c6a719d7cbbc01adfdc9bbe0dff6da10e06e3f3$
2695+// $hash=4e59a8c7cda2f13ee54599773755637ec846fe84$
2696 //
2697
2698 #ifndef CEF_INCLUDE_CAPI_CEF_LOAD_HANDLER_CAPI_H_
2699@@ -43,6 +43,7 @@
2700 #include "include/capi/cef_base_capi.h"
2701 #include "include/capi/cef_browser_capi.h"
2702 #include "include/capi/cef_frame_capi.h"
2703+#include "include/capi/cef_response_capi.h"
2704
2705 #ifdef __cplusplus
2706 extern "C" {
2707@@ -117,6 +118,26 @@ typedef struct _cef_load_handler_t {
2708                                     cef_errorcode_t errorCode,
2709                                     const cef_string_t* errorText,
2710                                     const cef_string_t* failedUrl);
2711+
2712+  ///
2713+  // OnLoadErrorWithRequest
2714+  ///
2715+  void(CEF_CALLBACK* on_load_error_with_request)(
2716+      struct _cef_load_handler_t* self,
2717+      struct _cef_request_t* request,
2718+      int is_main_frame,
2719+      int has_user_gesture,
2720+      int error_code,
2721+      const cef_string_t* error_text);
2722+
2723+  ///
2724+  // OnHttpError
2725+  ///
2726+  void(CEF_CALLBACK* on_http_error)(struct _cef_load_handler_t* self,
2727+                                    struct _cef_request_t* request,
2728+                                    int is_main_frame,
2729+                                    int has_user_gesture,
2730+                                    struct _cef_response_t* response);
2731 } cef_load_handler_t;
2732
2733 #ifdef __cplusplus
2734diff --git a/cef/include/capi/cef_media_router_capi.h b/cef/include/capi/cef_media_router_capi.h
2735index 6d7b4f20a1..e370e52040 100644
2736--- a/cef/include/capi/cef_media_router_capi.h
2737+++ b/cef/include/capi/cef_media_router_capi.h
2738@@ -1,4 +1,4 @@
2739-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2740+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2741 //
2742 // Redistribution and use in source and binary forms, with or without
2743 // modification, are permitted provided that the following conditions are
2744@@ -33,7 +33,7 @@
2745 // by hand. See the translator.README.txt file in the tools directory for
2746 // more information.
2747 //
2748-// $hash=79e4e38c732c0cfeef495c8a9726e105054012bb$
2749+// $hash=3db7459a1940c37898699cc97f69ba9249a6f1fd$
2750 //
2751
2752 #ifndef CEF_INCLUDE_CAPI_CEF_MEDIA_ROUTER_CAPI_H_
2753diff --git a/cef/include/capi/cef_menu_model_capi.h b/cef/include/capi/cef_menu_model_capi.h
2754index be2a547119..a1f7920ce9 100644
2755--- a/cef/include/capi/cef_menu_model_capi.h
2756+++ b/cef/include/capi/cef_menu_model_capi.h
2757@@ -1,4 +1,4 @@
2758-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2759+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2760 //
2761 // Redistribution and use in source and binary forms, with or without
2762 // modification, are permitted provided that the following conditions are
2763@@ -33,7 +33,7 @@
2764 // by hand. See the translator.README.txt file in the tools directory for
2765 // more information.
2766 //
2767-// $hash=28fa978051bd3ddff69d58e0dc8f445f64a61480$
2768+// $hash=9f30f2caa9eedc0d4fe963dbf0127602ffcbec61$
2769 //
2770
2771 #ifndef CEF_INCLUDE_CAPI_CEF_MENU_MODEL_CAPI_H_
2772diff --git a/cef/include/capi/cef_menu_model_delegate_capi.h b/cef/include/capi/cef_menu_model_delegate_capi.h
2773index 95a437aeba..bd4628568f 100644
2774--- a/cef/include/capi/cef_menu_model_delegate_capi.h
2775+++ b/cef/include/capi/cef_menu_model_delegate_capi.h
2776@@ -1,4 +1,4 @@
2777-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2778+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2779 //
2780 // Redistribution and use in source and binary forms, with or without
2781 // modification, are permitted provided that the following conditions are
2782@@ -33,7 +33,7 @@
2783 // by hand. See the translator.README.txt file in the tools directory for
2784 // more information.
2785 //
2786-// $hash=edc411cb0447a6c2965cdeb5f709fe56c43ec2bb$
2787+// $hash=bdb670bcaa9eb9f5748900ad25bcc061155d6076$
2788 //
2789
2790 #ifndef CEF_INCLUDE_CAPI_CEF_MENU_MODEL_DELEGATE_CAPI_H_
2791diff --git a/cef/include/capi/cef_navigation_entry_capi.h b/cef/include/capi/cef_navigation_entry_capi.h
2792index 1e257e58bb..4d4e07f10d 100644
2793--- a/cef/include/capi/cef_navigation_entry_capi.h
2794+++ b/cef/include/capi/cef_navigation_entry_capi.h
2795@@ -1,4 +1,4 @@
2796-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2797+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2798 //
2799 // Redistribution and use in source and binary forms, with or without
2800 // modification, are permitted provided that the following conditions are
2801@@ -33,7 +33,7 @@
2802 // by hand. See the translator.README.txt file in the tools directory for
2803 // more information.
2804 //
2805-// $hash=f14afbd6941bcb37b14cce81569882512c3d7194$
2806+// $hash=3a7dd4a6a1b5e0d9191be6c4dd2f0135f43de643$
2807 //
2808
2809 #ifndef CEF_INCLUDE_CAPI_CEF_NAVIGATION_ENTRY_CAPI_H_
2810diff --git a/cef/include/capi/cef_origin_whitelist_capi.h b/cef/include/capi/cef_origin_whitelist_capi.h
2811index fb7f45fb61..563bbdd2cd 100644
2812--- a/cef/include/capi/cef_origin_whitelist_capi.h
2813+++ b/cef/include/capi/cef_origin_whitelist_capi.h
2814@@ -1,4 +1,4 @@
2815-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2816+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2817 //
2818 // Redistribution and use in source and binary forms, with or without
2819 // modification, are permitted provided that the following conditions are
2820@@ -33,7 +33,7 @@
2821 // by hand. See the translator.README.txt file in the tools directory for
2822 // more information.
2823 //
2824-// $hash=6798e6147540596c1abac8c7457d9d1d4d99bd54$
2825+// $hash=0939a44345bea8df7ca5f1dbd6afbe41972121f2$
2826 //
2827
2828 #ifndef CEF_INCLUDE_CAPI_CEF_ORIGIN_WHITELIST_CAPI_H_
2829diff --git a/cef/include/capi/cef_parser_capi.h b/cef/include/capi/cef_parser_capi.h
2830index eef3a0583c..d3ec0ee5d4 100644
2831--- a/cef/include/capi/cef_parser_capi.h
2832+++ b/cef/include/capi/cef_parser_capi.h
2833@@ -1,4 +1,4 @@
2834-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2835+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2836 //
2837 // Redistribution and use in source and binary forms, with or without
2838 // modification, are permitted provided that the following conditions are
2839@@ -33,7 +33,7 @@
2840 // by hand. See the translator.README.txt file in the tools directory for
2841 // more information.
2842 //
2843-// $hash=84149324b177c47287b935dcb3d5900a33acfdf5$
2844+// $hash=f5e1c0fc43c6e85dbafa66975d9dc5e2bc7be69f$
2845 //
2846
2847 #ifndef CEF_INCLUDE_CAPI_CEF_PARSER_CAPI_H_
2848diff --git a/cef/include/capi/cef_path_util_capi.h b/cef/include/capi/cef_path_util_capi.h
2849index e70ff9f228..3cbb3ba4b0 100644
2850--- a/cef/include/capi/cef_path_util_capi.h
2851+++ b/cef/include/capi/cef_path_util_capi.h
2852@@ -1,4 +1,4 @@
2853-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
2854+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2855 //
2856 // Redistribution and use in source and binary forms, with or without
2857 // modification, are permitted provided that the following conditions are
2858@@ -33,7 +33,7 @@
2859 // by hand. See the translator.README.txt file in the tools directory for
2860 // more information.
2861 //
2862-// $hash=0ae1fe7f7141eb05eb7fd44c2d41e4c576afae1e$
2863+// $hash=41ddd04d4efb147b05eb93816af1591ec3b61b76$
2864 //
2865
2866 #ifndef CEF_INCLUDE_CAPI_CEF_PATH_UTIL_CAPI_H_
2867diff --git a/cef/include/capi/cef_permission_request_capi.h b/cef/include/capi/cef_permission_request_capi.h
2868new file mode 100644
2869index 0000000000..2be5e9ec8c
2870--- /dev/null
2871+++ b/cef/include/capi/cef_permission_request_capi.h
2872@@ -0,0 +1,227 @@
2873+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
2874+//
2875+// Redistribution and use in source and binary forms, with or without
2876+// modification, are permitted provided that the following conditions are
2877+// met:
2878+//
2879+//    * Redistributions of source code must retain the above copyright
2880+// notice, this list of conditions and the following disclaimer.
2881+//    * Redistributions in binary form must reproduce the above
2882+// copyright notice, this list of conditions and the following disclaimer
2883+// in the documentation and/or other materials provided with the
2884+// distribution.
2885+//    * Neither the name of Google Inc. nor the name Chromium Embedded
2886+// Framework nor the names of its contributors may be used to endorse
2887+// or promote products derived from this software without specific prior
2888+// written permission.
2889+//
2890+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2891+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2892+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2893+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2894+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2895+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2896+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2897+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2898+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2899+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2900+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2901+//
2902+// ---------------------------------------------------------------------------
2903+//
2904+// This file was generated by the CEF translator tool and should not edited
2905+// by hand. See the translator.README.txt file in the tools directory for
2906+// more information.
2907+//
2908+// $hash=e930f6445aaeb80ff2f6b1a3077d7d0d4bbd7109$
2909+//
2910+
2911+#ifndef CEF_INCLUDE_CAPI_CEF_PERMISSION_REQUEST_CAPI_H_
2912+#define CEF_INCLUDE_CAPI_CEF_PERMISSION_REQUEST_CAPI_H_
2913+#pragma once
2914+
2915+#include "include/capi/cef_base_capi.h"
2916+#include "include/internal/cef_types.h"
2917+
2918+#ifdef __cplusplus
2919+extern "C" {
2920+#endif
2921+
2922+///
2923+// Structure used to report permission request for the specified origin.
2924+///
2925+typedef struct _cef_access_request_t {
2926+  ///
2927+  // Base structure.
2928+  ///
2929+  cef_base_ref_counted_t base;
2930+
2931+  ///
2932+  // Get the origin that is trying to acess the resource.
2933+  ///
2934+  // The resulting string must be freed by calling cef_string_userfree_free().
2935+  cef_string_userfree_t(CEF_CALLBACK* origin)(
2936+      struct _cef_access_request_t* self);
2937+
2938+  ///
2939+  // Get the resource that the origin is trying to acess.
2940+  ///
2941+  int(CEF_CALLBACK* resource_acess_id)(struct _cef_access_request_t* self);
2942+
2943+  ///
2944+  // Report whether the origin is allowed to acess the resource.
2945+  ///
2946+  void(CEF_CALLBACK* report_request_result)(struct _cef_access_request_t* self,
2947+                                            int allowed);
2948+} cef_access_request_t;
2949+
2950+///
2951+// Implement this structure to handle permission requests.
2952+///
2953+typedef struct _cef_permission_request_t {
2954+  ///
2955+  // Base structure.
2956+  ///
2957+  cef_base_ref_counted_t base;
2958+
2959+  ///
2960+  // Notify the host application that web content from the specified origin is
2961+  // attempting to use the Geolocation API, but no permission state is currently
2962+  // set for that origin. The host application should invoke the specified
2963+  // callback with the desired permission state.
2964+  ///
2965+  void(CEF_CALLBACK* on_geolocation_show)(
2966+      struct _cef_permission_request_t* self,
2967+      const cef_string_t* origin);
2968+
2969+  ///
2970+  // Revert the operation in the OnGeolocationShow.
2971+  ///
2972+  void(CEF_CALLBACK* on_geolocation_hide)(
2973+      struct _cef_permission_request_t* self);
2974+
2975+  ///
2976+  // Notify the host application that web content from the specified origin is
2977+  // attempting to access the resources, but no permission state is currently
2978+  // set for that origin. The host application should invoke the specified
2979+  // callback with the desired permission state.
2980+  ///
2981+  void(CEF_CALLBACK* on_permission_request)(
2982+      struct _cef_permission_request_t* self,
2983+      struct _cef_access_request_t* request);
2984+
2985+  ///
2986+  // Revert the operation in the OnPermissionRequest.
2987+  ///
2988+  void(CEF_CALLBACK* on_permission_request_canceled)(
2989+      struct _cef_permission_request_t* self,
2990+      struct _cef_access_request_t* request);
2991+} cef_permission_request_t;
2992+
2993+///
2994+// Structure used to handle the permission requests from |BrowserContext|.
2995+///
2996+typedef struct _cef_browser_permission_request_delegate_t {
2997+  ///
2998+  // Base structure.
2999+  ///
3000+  cef_base_ref_counted_t base;
3001+
3002+  ///
3003+  // Handle the Geolocation permission requests.
3004+  ///
3005+  void(CEF_CALLBACK* ask_geolocation_permission)(
3006+      struct _cef_browser_permission_request_delegate_t* self,
3007+      const cef_string_t* origin,
3008+      cef_permission_callback_t callback);
3009+
3010+  ///
3011+  // Cancel the Geolocation permission requests.
3012+  ///
3013+  void(CEF_CALLBACK* abort_ask_geolocation_permission)(
3014+      struct _cef_browser_permission_request_delegate_t* self,
3015+      const cef_string_t* origin);
3016+
3017+  ///
3018+  // Handle the Protected Media Identifier permission requests.
3019+  ///
3020+  void(CEF_CALLBACK* ask_protected_media_identifier_permission)(
3021+      struct _cef_browser_permission_request_delegate_t* self,
3022+      const cef_string_t* origin,
3023+      cef_permission_callback_t callback);
3024+
3025+  ///
3026+  // Cancel the Protected Media Identifier permission requests.
3027+  ///
3028+  void(CEF_CALLBACK* abort_ask_protected_media_identifier_permission)(
3029+      struct _cef_browser_permission_request_delegate_t* self,
3030+      const cef_string_t* origin);
3031+
3032+  ///
3033+  // Handle the MIDI Sysex permission requests.
3034+  ///
3035+  void(CEF_CALLBACK* ask_midisysex_permission)(
3036+      struct _cef_browser_permission_request_delegate_t* self,
3037+      const cef_string_t* origin,
3038+      cef_permission_callback_t callback);
3039+
3040+  ///
3041+  // Cancel the MIDI Sysex permission requests.
3042+  ///
3043+  void(CEF_CALLBACK* abort_ask_midisysex_permission)(
3044+      struct _cef_browser_permission_request_delegate_t* self,
3045+      const cef_string_t* origin);
3046+
3047+  ///
3048+  // The callback for the Geolocation permission requests.
3049+  ///
3050+  void(CEF_CALLBACK* notify_geolocation_permission)(
3051+      struct _cef_browser_permission_request_delegate_t* self,
3052+      int value,
3053+      const cef_string_t* origin);
3054+} cef_browser_permission_request_delegate_t;
3055+
3056+///
3057+// Structure used to set the geolocation permission state for the specified
3058+// origin.
3059+///
3060+typedef struct _cef_geolocation_acess_t {
3061+  ///
3062+  // Base structure.
3063+  ///
3064+  cef_base_ref_counted_t base;
3065+
3066+  ///
3067+  // Return true (1) if the geolocation permission state is set for the
3068+  // specified origin.
3069+  ///
3070+  int(CEF_CALLBACK* contain_origin)(struct _cef_geolocation_acess_t* self,
3071+                                    const cef_string_t* origin);
3072+
3073+  ///
3074+  // Return true (1) if the geolocation permission state set for the specified
3075+  // origin is true (1).
3076+  ///
3077+  int(CEF_CALLBACK* is_origin_access_enabled)(
3078+      struct _cef_geolocation_acess_t* self,
3079+      const cef_string_t* origin);
3080+
3081+  ///
3082+  // Set the geolocation permission state to true (1)  for the specified origin.
3083+  ///
3084+  void(CEF_CALLBACK* enabled)(struct _cef_geolocation_acess_t* self,
3085+                              const cef_string_t* origin);
3086+
3087+  ///
3088+  // Set the geolocation permission state to false (0)  for the specified
3089+  // origin.
3090+  ///
3091+  void(CEF_CALLBACK* disabled)(struct _cef_geolocation_acess_t* self,
3092+                               const cef_string_t* origin);
3093+} cef_geolocation_acess_t;
3094+
3095+#ifdef __cplusplus
3096+}
3097+#endif
3098+
3099+#endif  // CEF_INCLUDE_CAPI_CEF_PERMISSION_REQUEST_CAPI_H_
3100diff --git a/cef/include/capi/cef_print_handler_capi.h b/cef/include/capi/cef_print_handler_capi.h
3101index a3d7d3cf91..df321dea17 100644
3102--- a/cef/include/capi/cef_print_handler_capi.h
3103+++ b/cef/include/capi/cef_print_handler_capi.h
3104@@ -1,4 +1,4 @@
3105-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3106+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3107 //
3108 // Redistribution and use in source and binary forms, with or without
3109 // modification, are permitted provided that the following conditions are
3110@@ -33,7 +33,7 @@
3111 // by hand. See the translator.README.txt file in the tools directory for
3112 // more information.
3113 //
3114-// $hash=84fc58b3898f25476d9cdd260553390ba5e0b30b$
3115+// $hash=e26be3efc18d8c79d019c02b1d73a7ec2866b142$
3116 //
3117
3118 #ifndef CEF_INCLUDE_CAPI_CEF_PRINT_HANDLER_CAPI_H_
3119diff --git a/cef/include/capi/cef_print_settings_capi.h b/cef/include/capi/cef_print_settings_capi.h
3120index 4019599462..e611abfd47 100644
3121--- a/cef/include/capi/cef_print_settings_capi.h
3122+++ b/cef/include/capi/cef_print_settings_capi.h
3123@@ -1,4 +1,4 @@
3124-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3125+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3126 //
3127 // Redistribution and use in source and binary forms, with or without
3128 // modification, are permitted provided that the following conditions are
3129@@ -33,7 +33,7 @@
3130 // by hand. See the translator.README.txt file in the tools directory for
3131 // more information.
3132 //
3133-// $hash=4b52323c4ce2d0ebcc3438e16fc9a9b181a58adc$
3134+// $hash=fdbd26f9dd20dbd7813fc17a8c34650b2da19581$
3135 //
3136
3137 #ifndef CEF_INCLUDE_CAPI_CEF_PRINT_SETTINGS_CAPI_H_
3138diff --git a/cef/include/capi/cef_process_message_capi.h b/cef/include/capi/cef_process_message_capi.h
3139index 5cee0e8108..b87770ba48 100644
3140--- a/cef/include/capi/cef_process_message_capi.h
3141+++ b/cef/include/capi/cef_process_message_capi.h
3142@@ -1,4 +1,4 @@
3143-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3144+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3145 //
3146 // Redistribution and use in source and binary forms, with or without
3147 // modification, are permitted provided that the following conditions are
3148@@ -33,7 +33,7 @@
3149 // by hand. See the translator.README.txt file in the tools directory for
3150 // more information.
3151 //
3152-// $hash=53ff22b73527aa331d2bd96e008f4cb4f0413042$
3153+// $hash=2549ea10cd3a41bc04ab81bad24eb12787de68b9$
3154 //
3155
3156 #ifndef CEF_INCLUDE_CAPI_CEF_PROCESS_MESSAGE_CAPI_H_
3157diff --git a/cef/include/capi/cef_process_util_capi.h b/cef/include/capi/cef_process_util_capi.h
3158index e968af1ad2..f22dd7e8ab 100644
3159--- a/cef/include/capi/cef_process_util_capi.h
3160+++ b/cef/include/capi/cef_process_util_capi.h
3161@@ -1,4 +1,4 @@
3162-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3163+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3164 //
3165 // Redistribution and use in source and binary forms, with or without
3166 // modification, are permitted provided that the following conditions are
3167@@ -33,7 +33,7 @@
3168 // by hand. See the translator.README.txt file in the tools directory for
3169 // more information.
3170 //
3171-// $hash=c476a8d22852994d9d9695db901efaef13bbfc9d$
3172+// $hash=1f2b752c4e314b240ce95cb3b87863c2f99534a8$
3173 //
3174
3175 #ifndef CEF_INCLUDE_CAPI_CEF_PROCESS_UTIL_CAPI_H_
3176diff --git a/cef/include/capi/cef_registration_capi.h b/cef/include/capi/cef_registration_capi.h
3177index 2ad93caf5c..3285569eb8 100644
3178--- a/cef/include/capi/cef_registration_capi.h
3179+++ b/cef/include/capi/cef_registration_capi.h
3180@@ -1,4 +1,4 @@
3181-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3182+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3183 //
3184 // Redistribution and use in source and binary forms, with or without
3185 // modification, are permitted provided that the following conditions are
3186@@ -33,7 +33,7 @@
3187 // by hand. See the translator.README.txt file in the tools directory for
3188 // more information.
3189 //
3190-// $hash=8cde223bdb8d25ff163edd95da0d9e238b298016$
3191+// $hash=d5efa37953d0f0097fef20bc18f4938621c6b168$
3192 //
3193
3194 #ifndef CEF_INCLUDE_CAPI_CEF_REGISTRATION_CAPI_H_
3195diff --git a/cef/include/capi/cef_render_handler_capi.h b/cef/include/capi/cef_render_handler_capi.h
3196index 0dd8716557..a57a968602 100644
3197--- a/cef/include/capi/cef_render_handler_capi.h
3198+++ b/cef/include/capi/cef_render_handler_capi.h
3199@@ -1,4 +1,4 @@
3200-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3201+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3202 //
3203 // Redistribution and use in source and binary forms, with or without
3204 // modification, are permitted provided that the following conditions are
3205@@ -33,7 +33,7 @@
3206 // by hand. See the translator.README.txt file in the tools directory for
3207 // more information.
3208 //
3209-// $hash=e4bdab963041a270edabc0954b415eb4cae8e5cb$
3210+// $hash=da1762d0fa16d2e4c2b7281bcaeb6181e00eb1af$
3211 //
3212
3213 #ifndef CEF_INCLUDE_CAPI_CEF_RENDER_HANDLER_CAPI_H_
3214@@ -198,6 +198,14 @@ typedef struct _cef_render_handler_t {
3215       double x,
3216       double y);
3217
3218+  ///
3219+  // Called when the RootLayer has changed.
3220+  ///
3221+  void(CEF_CALLBACK* on_root_layer_changed)(struct _cef_render_handler_t* self,
3222+                                            struct _cef_browser_t* browser,
3223+                                            int height,
3224+                                            int width);
3225+
3226   ///
3227   // Called when the IME composition range has changed. |selected_range| is the
3228   // range of characters that have been selected. |character_bounds| is the
3229diff --git a/cef/include/capi/cef_render_process_handler_capi.h b/cef/include/capi/cef_render_process_handler_capi.h
3230index 5359e9df79..c949cf11b4 100644
3231--- a/cef/include/capi/cef_render_process_handler_capi.h
3232+++ b/cef/include/capi/cef_render_process_handler_capi.h
3233@@ -1,4 +1,4 @@
3234-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3235+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3236 //
3237 // Redistribution and use in source and binary forms, with or without
3238 // modification, are permitted provided that the following conditions are
3239@@ -33,7 +33,7 @@
3240 // by hand. See the translator.README.txt file in the tools directory for
3241 // more information.
3242 //
3243-// $hash=41339414bca54054046a8f7fbce402a0e0dd8020$
3244+// $hash=c1b07725cbf7cd1fb4ef207a17fda98b8e9e750f$
3245 //
3246
3247 #ifndef CEF_INCLUDE_CAPI_CEF_RENDER_PROCESS_HANDLER_CAPI_H_
3248diff --git a/cef/include/capi/cef_request_callback_capi.h b/cef/include/capi/cef_request_callback_capi.h
3249index 112d3a4f56..3799fb2d0d 100644
3250--- a/cef/include/capi/cef_request_callback_capi.h
3251+++ b/cef/include/capi/cef_request_callback_capi.h
3252@@ -1,4 +1,4 @@
3253-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3254+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3255 //
3256 // Redistribution and use in source and binary forms, with or without
3257 // modification, are permitted provided that the following conditions are
3258@@ -33,7 +33,7 @@
3259 // by hand. See the translator.README.txt file in the tools directory for
3260 // more information.
3261 //
3262-// $hash=273af5bd01c6ab5d4df8efb2af2b4e2da9c21760$
3263+// $hash=830a1e8ef0e0910fde07c4f4c4fb7df7f8d74a66$
3264 //
3265
3266 #ifndef CEF_INCLUDE_CAPI_CEF_REQUEST_CALLBACK_CAPI_H_
3267diff --git a/cef/include/capi/cef_request_capi.h b/cef/include/capi/cef_request_capi.h
3268index a0f835baec..3ddd18fef5 100644
3269--- a/cef/include/capi/cef_request_capi.h
3270+++ b/cef/include/capi/cef_request_capi.h
3271@@ -1,4 +1,4 @@
3272-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3273+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3274 //
3275 // Redistribution and use in source and binary forms, with or without
3276 // modification, are permitted provided that the following conditions are
3277@@ -33,7 +33,7 @@
3278 // by hand. See the translator.README.txt file in the tools directory for
3279 // more information.
3280 //
3281-// $hash=a5e9055958c3588d583d4d128a5d7c8639f39946$
3282+// $hash=47b361878452f2a94e559782913d80beb0dba25a$
3283 //
3284
3285 #ifndef CEF_INCLUDE_CAPI_CEF_REQUEST_CAPI_H_
3286diff --git a/cef/include/capi/cef_request_context_capi.h b/cef/include/capi/cef_request_context_capi.h
3287index 9871a214d8..3dc3ab3a3f 100644
3288--- a/cef/include/capi/cef_request_context_capi.h
3289+++ b/cef/include/capi/cef_request_context_capi.h
3290@@ -1,4 +1,4 @@
3291-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3292+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3293 //
3294 // Redistribution and use in source and binary forms, with or without
3295 // modification, are permitted provided that the following conditions are
3296@@ -33,7 +33,7 @@
3297 // by hand. See the translator.README.txt file in the tools directory for
3298 // more information.
3299 //
3300-// $hash=2e42334fc22050e207e5a0af6fe290a592e4105f$
3301+// $hash=9faa2d004412793c0b4d9f9a487197bb02dc6da8$
3302 //
3303
3304 #ifndef CEF_INCLUDE_CAPI_CEF_REQUEST_CONTEXT_CAPI_H_
3305diff --git a/cef/include/capi/cef_request_context_handler_capi.h b/cef/include/capi/cef_request_context_handler_capi.h
3306index c14f672869..5428253026 100644
3307--- a/cef/include/capi/cef_request_context_handler_capi.h
3308+++ b/cef/include/capi/cef_request_context_handler_capi.h
3309@@ -1,4 +1,4 @@
3310-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3311+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3312 //
3313 // Redistribution and use in source and binary forms, with or without
3314 // modification, are permitted provided that the following conditions are
3315@@ -33,7 +33,7 @@
3316 // by hand. See the translator.README.txt file in the tools directory for
3317 // more information.
3318 //
3319-// $hash=fa148db8a0ecd79966814086fb92e439687be701$
3320+// $hash=f5082ce09256e084167c6fe3e6cf2a46fe7262ff$
3321 //
3322
3323 #ifndef CEF_INCLUDE_CAPI_CEF_REQUEST_CONTEXT_HANDLER_CAPI_H_
3324diff --git a/cef/include/capi/cef_request_handler_capi.h b/cef/include/capi/cef_request_handler_capi.h
3325index 596c4b7c1e..bf623801b2 100644
3326--- a/cef/include/capi/cef_request_handler_capi.h
3327+++ b/cef/include/capi/cef_request_handler_capi.h
3328@@ -1,4 +1,4 @@
3329-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3330+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3331 //
3332 // Redistribution and use in source and binary forms, with or without
3333 // modification, are permitted provided that the following conditions are
3334@@ -33,7 +33,7 @@
3335 // by hand. See the translator.README.txt file in the tools directory for
3336 // more information.
3337 //
3338-// $hash=1d8b3f540a8305ce1738c5fe7c716434062c67b0$
3339+// $hash=f71942c55763a057642cb4b23a212d9c858db6a0$
3340 //
3341
3342 #ifndef CEF_INCLUDE_CAPI_CEF_REQUEST_HANDLER_CAPI_H_
3343diff --git a/cef/include/capi/cef_resource_bundle_capi.h b/cef/include/capi/cef_resource_bundle_capi.h
3344index 8f6351b126..9e83df4059 100644
3345--- a/cef/include/capi/cef_resource_bundle_capi.h
3346+++ b/cef/include/capi/cef_resource_bundle_capi.h
3347@@ -1,4 +1,4 @@
3348-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3349+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3350 //
3351 // Redistribution and use in source and binary forms, with or without
3352 // modification, are permitted provided that the following conditions are
3353@@ -33,7 +33,7 @@
3354 // by hand. See the translator.README.txt file in the tools directory for
3355 // more information.
3356 //
3357-// $hash=ffe0de3b50e0a612bd1b055b873c265b030e721d$
3358+// $hash=a9e35ca17785f77666db7650208cacfd9a85c3e0$
3359 //
3360
3361 #ifndef CEF_INCLUDE_CAPI_CEF_RESOURCE_BUNDLE_CAPI_H_
3362diff --git a/cef/include/capi/cef_resource_bundle_handler_capi.h b/cef/include/capi/cef_resource_bundle_handler_capi.h
3363index 4f87d716ef..a72d6dffd3 100644
3364--- a/cef/include/capi/cef_resource_bundle_handler_capi.h
3365+++ b/cef/include/capi/cef_resource_bundle_handler_capi.h
3366@@ -1,4 +1,4 @@
3367-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3368+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3369 //
3370 // Redistribution and use in source and binary forms, with or without
3371 // modification, are permitted provided that the following conditions are
3372@@ -33,7 +33,7 @@
3373 // by hand. See the translator.README.txt file in the tools directory for
3374 // more information.
3375 //
3376-// $hash=b9723e0dfe6d03c24665eac2264396743a5254df$
3377+// $hash=3d7b3d4702c8d35dc8780f9e87eb7560d6ce1dee$
3378 //
3379
3380 #ifndef CEF_INCLUDE_CAPI_CEF_RESOURCE_BUNDLE_HANDLER_CAPI_H_
3381diff --git a/cef/include/capi/cef_resource_handler_capi.h b/cef/include/capi/cef_resource_handler_capi.h
3382index 9dc7b0bde2..4c581cb71f 100644
3383--- a/cef/include/capi/cef_resource_handler_capi.h
3384+++ b/cef/include/capi/cef_resource_handler_capi.h
3385@@ -1,4 +1,4 @@
3386-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3387+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3388 //
3389 // Redistribution and use in source and binary forms, with or without
3390 // modification, are permitted provided that the following conditions are
3391@@ -33,7 +33,7 @@
3392 // by hand. See the translator.README.txt file in the tools directory for
3393 // more information.
3394 //
3395-// $hash=a9598f4e94a864e749b425aa62bc519589f5753e$
3396+// $hash=67df3d56f0cc0f58d2b0a2fe884bbb2c1c39813f$
3397 //
3398
3399 #ifndef CEF_INCLUDE_CAPI_CEF_RESOURCE_HANDLER_CAPI_H_
3400diff --git a/cef/include/capi/cef_resource_request_handler_capi.h b/cef/include/capi/cef_resource_request_handler_capi.h
3401index 3f436a2b7e..66e605cd14 100644
3402--- a/cef/include/capi/cef_resource_request_handler_capi.h
3403+++ b/cef/include/capi/cef_resource_request_handler_capi.h
3404@@ -1,4 +1,4 @@
3405-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3406+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3407 //
3408 // Redistribution and use in source and binary forms, with or without
3409 // modification, are permitted provided that the following conditions are
3410@@ -33,7 +33,7 @@
3411 // by hand. See the translator.README.txt file in the tools directory for
3412 // more information.
3413 //
3414-// $hash=aec52d0efc8407495fe1fc4821616673da7ed17a$
3415+// $hash=17f1853125ab8cc00765275d8bf1d3bc63433e05$
3416 //
3417
3418 #ifndef CEF_INCLUDE_CAPI_CEF_RESOURCE_REQUEST_HANDLER_CAPI_H_
3419diff --git a/cef/include/capi/cef_response_capi.h b/cef/include/capi/cef_response_capi.h
3420index 640ed91c7a..d4973e6cda 100644
3421--- a/cef/include/capi/cef_response_capi.h
3422+++ b/cef/include/capi/cef_response_capi.h
3423@@ -1,4 +1,4 @@
3424-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3425+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3426 //
3427 // Redistribution and use in source and binary forms, with or without
3428 // modification, are permitted provided that the following conditions are
3429@@ -33,7 +33,7 @@
3430 // by hand. See the translator.README.txt file in the tools directory for
3431 // more information.
3432 //
3433-// $hash=8202bbf8e7f7ae474182c483f0f599b13f6914eb$
3434+// $hash=6ebf7adcdaee57772810c1528b27140ae95966d0$
3435 //
3436
3437 #ifndef CEF_INCLUDE_CAPI_CEF_RESPONSE_CAPI_H_
3438diff --git a/cef/include/capi/cef_response_filter_capi.h b/cef/include/capi/cef_response_filter_capi.h
3439index c5943fb8be..2267054ca8 100644
3440--- a/cef/include/capi/cef_response_filter_capi.h
3441+++ b/cef/include/capi/cef_response_filter_capi.h
3442@@ -1,4 +1,4 @@
3443-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3444+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3445 //
3446 // Redistribution and use in source and binary forms, with or without
3447 // modification, are permitted provided that the following conditions are
3448@@ -33,7 +33,7 @@
3449 // by hand. See the translator.README.txt file in the tools directory for
3450 // more information.
3451 //
3452-// $hash=cdadf516dc77455c5a3d6633bfb12e1cb276b9bb$
3453+// $hash=fb06b9630b95fedb5d202aab7814d914ab7c943b$
3454 //
3455
3456 #ifndef CEF_INCLUDE_CAPI_CEF_RESPONSE_FILTER_CAPI_H_
3457diff --git a/cef/include/capi/cef_scheme_capi.h b/cef/include/capi/cef_scheme_capi.h
3458index 84fb28dc94..444506c93f 100644
3459--- a/cef/include/capi/cef_scheme_capi.h
3460+++ b/cef/include/capi/cef_scheme_capi.h
3461@@ -1,4 +1,4 @@
3462-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3463+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3464 //
3465 // Redistribution and use in source and binary forms, with or without
3466 // modification, are permitted provided that the following conditions are
3467@@ -33,7 +33,7 @@
3468 // by hand. See the translator.README.txt file in the tools directory for
3469 // more information.
3470 //
3471-// $hash=9384e0b2bc27ccbdd7ebb1a86f213c28fd2784a1$
3472+// $hash=df8c46dd19ef6a3964c49d79e770de6e4245e208$
3473 //
3474
3475 #ifndef CEF_INCLUDE_CAPI_CEF_SCHEME_CAPI_H_
3476diff --git a/cef/include/capi/cef_server_capi.h b/cef/include/capi/cef_server_capi.h
3477index d18d846068..a3aa6a64d9 100644
3478--- a/cef/include/capi/cef_server_capi.h
3479+++ b/cef/include/capi/cef_server_capi.h
3480@@ -1,4 +1,4 @@
3481-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3482+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3483 //
3484 // Redistribution and use in source and binary forms, with or without
3485 // modification, are permitted provided that the following conditions are
3486@@ -33,7 +33,7 @@
3487 // by hand. See the translator.README.txt file in the tools directory for
3488 // more information.
3489 //
3490-// $hash=37b3332057dbcf705b61a51cf14640d171d18a74$
3491+// $hash=72c2b4f976016cea50e54a386c09a786973c01a3$
3492 //
3493
3494 #ifndef CEF_INCLUDE_CAPI_CEF_SERVER_CAPI_H_
3495diff --git a/cef/include/capi/cef_ssl_info_capi.h b/cef/include/capi/cef_ssl_info_capi.h
3496index 1c03e1f516..b122a75862 100644
3497--- a/cef/include/capi/cef_ssl_info_capi.h
3498+++ b/cef/include/capi/cef_ssl_info_capi.h
3499@@ -1,4 +1,4 @@
3500-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3501+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3502 //
3503 // Redistribution and use in source and binary forms, with or without
3504 // modification, are permitted provided that the following conditions are
3505@@ -33,7 +33,7 @@
3506 // by hand. See the translator.README.txt file in the tools directory for
3507 // more information.
3508 //
3509-// $hash=aefb3b63aba8f5df6ab6dc11e2029820c75c36cf$
3510+// $hash=d72f3b34b4150f29f1491b2c729f4a8afc4a33f4$
3511 //
3512
3513 #ifndef CEF_INCLUDE_CAPI_CEF_SSL_INFO_CAPI_H_
3514diff --git a/cef/include/capi/cef_ssl_status_capi.h b/cef/include/capi/cef_ssl_status_capi.h
3515index c2a0ecdebe..49268b3f24 100644
3516--- a/cef/include/capi/cef_ssl_status_capi.h
3517+++ b/cef/include/capi/cef_ssl_status_capi.h
3518@@ -1,4 +1,4 @@
3519-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3520+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3521 //
3522 // Redistribution and use in source and binary forms, with or without
3523 // modification, are permitted provided that the following conditions are
3524@@ -33,7 +33,7 @@
3525 // by hand. See the translator.README.txt file in the tools directory for
3526 // more information.
3527 //
3528-// $hash=93eb2bc0f51da08a41fb906436654b3452b74fb3$
3529+// $hash=1bc8a73a196fbbb6cec3dd1738b817575b17706d$
3530 //
3531
3532 #ifndef CEF_INCLUDE_CAPI_CEF_SSL_STATUS_CAPI_H_
3533diff --git a/cef/include/capi/cef_stream_capi.h b/cef/include/capi/cef_stream_capi.h
3534index e0db46afeb..3197a5b1f5 100644
3535--- a/cef/include/capi/cef_stream_capi.h
3536+++ b/cef/include/capi/cef_stream_capi.h
3537@@ -1,4 +1,4 @@
3538-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3539+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3540 //
3541 // Redistribution and use in source and binary forms, with or without
3542 // modification, are permitted provided that the following conditions are
3543@@ -33,7 +33,7 @@
3544 // by hand. See the translator.README.txt file in the tools directory for
3545 // more information.
3546 //
3547-// $hash=61ff7a4ebc917482bad5daba7089b92cc62bada8$
3548+// $hash=87f6cad177614ece33d9574f0f2964e5bb97d613$
3549 //
3550
3551 #ifndef CEF_INCLUDE_CAPI_CEF_STREAM_CAPI_H_
3552diff --git a/cef/include/capi/cef_string_visitor_capi.h b/cef/include/capi/cef_string_visitor_capi.h
3553index 8798cf4f75..4acd1b472a 100644
3554--- a/cef/include/capi/cef_string_visitor_capi.h
3555+++ b/cef/include/capi/cef_string_visitor_capi.h
3556@@ -1,4 +1,4 @@
3557-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3558+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3559 //
3560 // Redistribution and use in source and binary forms, with or without
3561 // modification, are permitted provided that the following conditions are
3562@@ -33,7 +33,7 @@
3563 // by hand. See the translator.README.txt file in the tools directory for
3564 // more information.
3565 //
3566-// $hash=30d4a63d53bce310ad641cbe5096ae126a664076$
3567+// $hash=398537ec88bfe902c49908db4a549da297594b70$
3568 //
3569
3570 #ifndef CEF_INCLUDE_CAPI_CEF_STRING_VISITOR_CAPI_H_
3571diff --git a/cef/include/capi/cef_task_capi.h b/cef/include/capi/cef_task_capi.h
3572index 9087af3ceb..5f6281e1b9 100644
3573--- a/cef/include/capi/cef_task_capi.h
3574+++ b/cef/include/capi/cef_task_capi.h
3575@@ -1,4 +1,4 @@
3576-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3577+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3578 //
3579 // Redistribution and use in source and binary forms, with or without
3580 // modification, are permitted provided that the following conditions are
3581@@ -33,7 +33,7 @@
3582 // by hand. See the translator.README.txt file in the tools directory for
3583 // more information.
3584 //
3585-// $hash=a8b2162b7c3b7cede392e8531c46a1277e990689$
3586+// $hash=e943dd2af818e5a5f19f6cbd1648896684c666c6$
3587 //
3588
3589 #ifndef CEF_INCLUDE_CAPI_CEF_TASK_CAPI_H_
3590diff --git a/cef/include/capi/cef_thread_capi.h b/cef/include/capi/cef_thread_capi.h
3591index 09dc421a05..4b99983d5b 100644
3592--- a/cef/include/capi/cef_thread_capi.h
3593+++ b/cef/include/capi/cef_thread_capi.h
3594@@ -1,4 +1,4 @@
3595-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3596+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3597 //
3598 // Redistribution and use in source and binary forms, with or without
3599 // modification, are permitted provided that the following conditions are
3600@@ -33,7 +33,7 @@
3601 // by hand. See the translator.README.txt file in the tools directory for
3602 // more information.
3603 //
3604-// $hash=9a471c97e43ad3d1d042ba3dc6d887f2f4b0d851$
3605+// $hash=d99ffc2270c1cf8b0f06dd08c1b6e9b27cee4bc8$
3606 //
3607
3608 #ifndef CEF_INCLUDE_CAPI_CEF_THREAD_CAPI_H_
3609diff --git a/cef/include/capi/cef_trace_capi.h b/cef/include/capi/cef_trace_capi.h
3610index 28304312a9..df39462f05 100644
3611--- a/cef/include/capi/cef_trace_capi.h
3612+++ b/cef/include/capi/cef_trace_capi.h
3613@@ -1,4 +1,4 @@
3614-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3615+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3616 //
3617 // Redistribution and use in source and binary forms, with or without
3618 // modification, are permitted provided that the following conditions are
3619@@ -33,7 +33,7 @@
3620 // by hand. See the translator.README.txt file in the tools directory for
3621 // more information.
3622 //
3623-// $hash=99779f8a728d2e1a0b87d6d6b89bd28e5da16d4c$
3624+// $hash=a7b4410e0a35eb0aba747014665419fb6b6fcb67$
3625 //
3626
3627 #ifndef CEF_INCLUDE_CAPI_CEF_TRACE_CAPI_H_
3628diff --git a/cef/include/capi/cef_urlrequest_capi.h b/cef/include/capi/cef_urlrequest_capi.h
3629index 3b3e8281cf..75a834c811 100644
3630--- a/cef/include/capi/cef_urlrequest_capi.h
3631+++ b/cef/include/capi/cef_urlrequest_capi.h
3632@@ -1,4 +1,4 @@
3633-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3634+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3635 //
3636 // Redistribution and use in source and binary forms, with or without
3637 // modification, are permitted provided that the following conditions are
3638@@ -33,7 +33,7 @@
3639 // by hand. See the translator.README.txt file in the tools directory for
3640 // more information.
3641 //
3642-// $hash=11c227079ec0687adeaa8a085aeec37c89346ee7$
3643+// $hash=a14d77cd7756797afb4db3d28a2359da53011bfa$
3644 //
3645
3646 #ifndef CEF_INCLUDE_CAPI_CEF_URLREQUEST_CAPI_H_
3647diff --git a/cef/include/capi/cef_v8_capi.h b/cef/include/capi/cef_v8_capi.h
3648index c11f9d36ad..824c3dbb48 100644
3649--- a/cef/include/capi/cef_v8_capi.h
3650+++ b/cef/include/capi/cef_v8_capi.h
3651@@ -1,4 +1,4 @@
3652-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3653+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3654 //
3655 // Redistribution and use in source and binary forms, with or without
3656 // modification, are permitted provided that the following conditions are
3657@@ -33,7 +33,7 @@
3658 // by hand. See the translator.README.txt file in the tools directory for
3659 // more information.
3660 //
3661-// $hash=23dc3ab761547687a491e5d7303b73b2d0d54e7a$
3662+// $hash=2bdcad7f8e3c03285a5e5ddb9a02a5a2182f254c$
3663 //
3664
3665 #ifndef CEF_INCLUDE_CAPI_CEF_V8_CAPI_H_
3666diff --git a/cef/include/capi/cef_values_capi.h b/cef/include/capi/cef_values_capi.h
3667index d6001b4c5e..90df63d6ce 100644
3668--- a/cef/include/capi/cef_values_capi.h
3669+++ b/cef/include/capi/cef_values_capi.h
3670@@ -1,4 +1,4 @@
3671-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3672+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3673 //
3674 // Redistribution and use in source and binary forms, with or without
3675 // modification, are permitted provided that the following conditions are
3676@@ -33,7 +33,7 @@
3677 // by hand. See the translator.README.txt file in the tools directory for
3678 // more information.
3679 //
3680-// $hash=d9074be0e6960c69cfe2c39b92b4dd6f529210d1$
3681+// $hash=c557496bdc1403b25b22ca9354a942478131c7ce$
3682 //
3683
3684 #ifndef CEF_INCLUDE_CAPI_CEF_VALUES_CAPI_H_
3685diff --git a/cef/include/capi/cef_waitable_event_capi.h b/cef/include/capi/cef_waitable_event_capi.h
3686index 83ce7c7d90..aa507e1083 100644
3687--- a/cef/include/capi/cef_waitable_event_capi.h
3688+++ b/cef/include/capi/cef_waitable_event_capi.h
3689@@ -1,4 +1,4 @@
3690-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3691+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3692 //
3693 // Redistribution and use in source and binary forms, with or without
3694 // modification, are permitted provided that the following conditions are
3695@@ -33,7 +33,7 @@
3696 // by hand. See the translator.README.txt file in the tools directory for
3697 // more information.
3698 //
3699-// $hash=ed698ff6cb09ee2ed87614e2733c742db827ed4f$
3700+// $hash=aff380a4fa3f1a26063170381d47c67971511f1d$
3701 //
3702
3703 #ifndef CEF_INCLUDE_CAPI_CEF_WAITABLE_EVENT_CAPI_H_
3704diff --git a/cef/include/capi/cef_web_plugin_capi.h b/cef/include/capi/cef_web_plugin_capi.h
3705index 77597e9546..33a788b865 100644
3706--- a/cef/include/capi/cef_web_plugin_capi.h
3707+++ b/cef/include/capi/cef_web_plugin_capi.h
3708@@ -1,4 +1,4 @@
3709-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3710+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3711 //
3712 // Redistribution and use in source and binary forms, with or without
3713 // modification, are permitted provided that the following conditions are
3714@@ -33,7 +33,7 @@
3715 // by hand. See the translator.README.txt file in the tools directory for
3716 // more information.
3717 //
3718-// $hash=f74bf4d33914d56d760f1bf5aadcf2651740c711$
3719+// $hash=34fce84ddc16f815ddf44745f93dfd86cfd51e96$
3720 //
3721
3722 #ifndef CEF_INCLUDE_CAPI_CEF_WEB_PLUGIN_CAPI_H_
3723diff --git a/cef/include/capi/cef_x509_certificate_capi.h b/cef/include/capi/cef_x509_certificate_capi.h
3724index c474718b86..8650b4055d 100644
3725--- a/cef/include/capi/cef_x509_certificate_capi.h
3726+++ b/cef/include/capi/cef_x509_certificate_capi.h
3727@@ -1,4 +1,4 @@
3728-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3729+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3730 //
3731 // Redistribution and use in source and binary forms, with or without
3732 // modification, are permitted provided that the following conditions are
3733@@ -33,7 +33,7 @@
3734 // by hand. See the translator.README.txt file in the tools directory for
3735 // more information.
3736 //
3737-// $hash=e06ad8a1e173edd1e888ce6a8f8a9d95394e6a44$
3738+// $hash=32b942f6b50b842ddec08addc2b5794f2a272dbe$
3739 //
3740
3741 #ifndef CEF_INCLUDE_CAPI_CEF_X509_CERTIFICATE_CAPI_H_
3742diff --git a/cef/include/capi/cef_xml_reader_capi.h b/cef/include/capi/cef_xml_reader_capi.h
3743index 74be5dbaf2..75f32a4d1d 100644
3744--- a/cef/include/capi/cef_xml_reader_capi.h
3745+++ b/cef/include/capi/cef_xml_reader_capi.h
3746@@ -1,4 +1,4 @@
3747-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3748+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3749 //
3750 // Redistribution and use in source and binary forms, with or without
3751 // modification, are permitted provided that the following conditions are
3752@@ -33,7 +33,7 @@
3753 // by hand. See the translator.README.txt file in the tools directory for
3754 // more information.
3755 //
3756-// $hash=76de25a0d0f0a2cc4657f46c26ec44b6d7d937e8$
3757+// $hash=c3bdf957dfd307568842b95599e3259d4c8d8f44$
3758 //
3759
3760 #ifndef CEF_INCLUDE_CAPI_CEF_XML_READER_CAPI_H_
3761diff --git a/cef/include/capi/cef_zip_reader_capi.h b/cef/include/capi/cef_zip_reader_capi.h
3762index aa9a79a6a6..5d89935336 100644
3763--- a/cef/include/capi/cef_zip_reader_capi.h
3764+++ b/cef/include/capi/cef_zip_reader_capi.h
3765@@ -1,4 +1,4 @@
3766-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3767+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3768 //
3769 // Redistribution and use in source and binary forms, with or without
3770 // modification, are permitted provided that the following conditions are
3771@@ -33,7 +33,7 @@
3772 // by hand. See the translator.README.txt file in the tools directory for
3773 // more information.
3774 //
3775-// $hash=d3d4ee91a69edd5f12785871b5c5a55e86c5c675$
3776+// $hash=ac91bcd40e1439ee1e742cc47989530b112c99bd$
3777 //
3778
3779 #ifndef CEF_INCLUDE_CAPI_CEF_ZIP_READER_CAPI_H_
3780diff --git a/cef/include/capi/test/cef_test_helpers_capi.h b/cef/include/capi/test/cef_test_helpers_capi.h
3781index 8d89c05348..128ab4c649 100644
3782--- a/cef/include/capi/test/cef_test_helpers_capi.h
3783+++ b/cef/include/capi/test/cef_test_helpers_capi.h
3784@@ -1,4 +1,4 @@
3785-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3786+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3787 //
3788 // Redistribution and use in source and binary forms, with or without
3789 // modification, are permitted provided that the following conditions are
3790@@ -33,7 +33,7 @@
3791 // by hand. See the translator.README.txt file in the tools directory for
3792 // more information.
3793 //
3794-// $hash=f9db602ed3bcb4b8ceb583034db9d0297b2961fd$
3795+// $hash=584acfdb7be699b0192c46ac9fa88084f141e845$
3796 //
3797
3798 #ifndef CEF_INCLUDE_CAPI_TEST_CEF_TEST_HELPERS_CAPI_H_
3799diff --git a/cef/include/capi/test/cef_translator_test_capi.h b/cef/include/capi/test/cef_translator_test_capi.h
3800index 8f68eb461f..48811c5e88 100644
3801--- a/cef/include/capi/test/cef_translator_test_capi.h
3802+++ b/cef/include/capi/test/cef_translator_test_capi.h
3803@@ -1,4 +1,4 @@
3804-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3805+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3806 //
3807 // Redistribution and use in source and binary forms, with or without
3808 // modification, are permitted provided that the following conditions are
3809@@ -33,7 +33,7 @@
3810 // by hand. See the translator.README.txt file in the tools directory for
3811 // more information.
3812 //
3813-// $hash=a20dfae14509f99270e5ce1422790681aee2d5f2$
3814+// $hash=d70d5b74890e3ca91f01333ebdb4f3298caeb619$
3815 //
3816
3817 #ifndef CEF_INCLUDE_CAPI_TEST_CEF_TRANSLATOR_TEST_CAPI_H_
3818diff --git a/cef/include/capi/views/cef_box_layout_capi.h b/cef/include/capi/views/cef_box_layout_capi.h
3819index 06d83bade9..6499ec22fd 100644
3820--- a/cef/include/capi/views/cef_box_layout_capi.h
3821+++ b/cef/include/capi/views/cef_box_layout_capi.h
3822@@ -1,4 +1,4 @@
3823-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3824+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3825 //
3826 // Redistribution and use in source and binary forms, with or without
3827 // modification, are permitted provided that the following conditions are
3828@@ -33,7 +33,7 @@
3829 // by hand. See the translator.README.txt file in the tools directory for
3830 // more information.
3831 //
3832-// $hash=069553694811acdd7a7871c895d73fc4f3e2798a$
3833+// $hash=bf1d1dc95fa2053645a348d6f554688b9d06c83a$
3834 //
3835
3836 #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_BOX_LAYOUT_CAPI_H_
3837diff --git a/cef/include/capi/views/cef_browser_view_capi.h b/cef/include/capi/views/cef_browser_view_capi.h
3838index 30fd5db049..ab629c8a61 100644
3839--- a/cef/include/capi/views/cef_browser_view_capi.h
3840+++ b/cef/include/capi/views/cef_browser_view_capi.h
3841@@ -1,4 +1,4 @@
3842-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3843+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3844 //
3845 // Redistribution and use in source and binary forms, with or without
3846 // modification, are permitted provided that the following conditions are
3847@@ -33,7 +33,7 @@
3848 // by hand. See the translator.README.txt file in the tools directory for
3849 // more information.
3850 //
3851-// $hash=3e4eb9ed3a0cb28ae0459a50f20c8405c7722437$
3852+// $hash=9ae10b92eed7495112c94825521ac46fb9327ef7$
3853 //
3854
3855 #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_BROWSER_VIEW_CAPI_H_
3856diff --git a/cef/include/capi/views/cef_browser_view_delegate_capi.h b/cef/include/capi/views/cef_browser_view_delegate_capi.h
3857index 9852c37bd9..27ae4c1c4e 100644
3858--- a/cef/include/capi/views/cef_browser_view_delegate_capi.h
3859+++ b/cef/include/capi/views/cef_browser_view_delegate_capi.h
3860@@ -1,4 +1,4 @@
3861-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3862+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3863 //
3864 // Redistribution and use in source and binary forms, with or without
3865 // modification, are permitted provided that the following conditions are
3866@@ -33,7 +33,7 @@
3867 // by hand. See the translator.README.txt file in the tools directory for
3868 // more information.
3869 //
3870-// $hash=220a126af3682f716f10b9019e8d1461702aa7c9$
3871+// $hash=520df1f3e00efbffc9d499149f2f797bf0f85c99$
3872 //
3873
3874 #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_BROWSER_VIEW_DELEGATE_CAPI_H_
3875diff --git a/cef/include/capi/views/cef_button_capi.h b/cef/include/capi/views/cef_button_capi.h
3876index 92069a75fd..40e71ec963 100644
3877--- a/cef/include/capi/views/cef_button_capi.h
3878+++ b/cef/include/capi/views/cef_button_capi.h
3879@@ -1,4 +1,4 @@
3880-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3881+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3882 //
3883 // Redistribution and use in source and binary forms, with or without
3884 // modification, are permitted provided that the following conditions are
3885@@ -33,7 +33,7 @@
3886 // by hand. See the translator.README.txt file in the tools directory for
3887 // more information.
3888 //
3889-// $hash=eb8e4197f2dba4829b1ed54957e1d5043fb8adaa$
3890+// $hash=5ebbf84a506d3d4d0bfb3d8db48f060a682f1ac9$
3891 //
3892
3893 #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_BUTTON_CAPI_H_
3894diff --git a/cef/include/capi/views/cef_button_delegate_capi.h b/cef/include/capi/views/cef_button_delegate_capi.h
3895index af84d045e2..d853dbf97e 100644
3896--- a/cef/include/capi/views/cef_button_delegate_capi.h
3897+++ b/cef/include/capi/views/cef_button_delegate_capi.h
3898@@ -1,4 +1,4 @@
3899-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3900+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3901 //
3902 // Redistribution and use in source and binary forms, with or without
3903 // modification, are permitted provided that the following conditions are
3904@@ -33,7 +33,7 @@
3905 // by hand. See the translator.README.txt file in the tools directory for
3906 // more information.
3907 //
3908-// $hash=f4c4a72bf4db6abaf709f5ce4fb648c2532c85bc$
3909+// $hash=9f1752ee949e98662a718de764e83f26ce06ec26$
3910 //
3911
3912 #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_BUTTON_DELEGATE_CAPI_H_
3913diff --git a/cef/include/capi/views/cef_display_capi.h b/cef/include/capi/views/cef_display_capi.h
3914index 6140b8816e..40c304b44f 100644
3915--- a/cef/include/capi/views/cef_display_capi.h
3916+++ b/cef/include/capi/views/cef_display_capi.h
3917@@ -1,4 +1,4 @@
3918-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3919+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3920 //
3921 // Redistribution and use in source and binary forms, with or without
3922 // modification, are permitted provided that the following conditions are
3923@@ -33,7 +33,7 @@
3924 // by hand. See the translator.README.txt file in the tools directory for
3925 // more information.
3926 //
3927-// $hash=1f9c61687a16a5c095c73afd47c1c0a27096ab3c$
3928+// $hash=2fd0db428ce5902d59a7802c901e1c13b2367b5a$
3929 //
3930
3931 #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_DISPLAY_CAPI_H_
3932diff --git a/cef/include/capi/views/cef_fill_layout_capi.h b/cef/include/capi/views/cef_fill_layout_capi.h
3933index b76bd9d7ad..a8778a96d6 100644
3934--- a/cef/include/capi/views/cef_fill_layout_capi.h
3935+++ b/cef/include/capi/views/cef_fill_layout_capi.h
3936@@ -1,4 +1,4 @@
3937-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3938+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3939 //
3940 // Redistribution and use in source and binary forms, with or without
3941 // modification, are permitted provided that the following conditions are
3942@@ -33,7 +33,7 @@
3943 // by hand. See the translator.README.txt file in the tools directory for
3944 // more information.
3945 //
3946-// $hash=967f99321db8d0a900e33f3032b3ba1a6bd6bc9c$
3947+// $hash=13972453cdca328c6ee81249aeb202d80da6d290$
3948 //
3949
3950 #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_FILL_LAYOUT_CAPI_H_
3951diff --git a/cef/include/capi/views/cef_label_button_capi.h b/cef/include/capi/views/cef_label_button_capi.h
3952index a9f6dc7684..47ff1de60f 100644
3953--- a/cef/include/capi/views/cef_label_button_capi.h
3954+++ b/cef/include/capi/views/cef_label_button_capi.h
3955@@ -1,4 +1,4 @@
3956-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3957+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3958 //
3959 // Redistribution and use in source and binary forms, with or without
3960 // modification, are permitted provided that the following conditions are
3961@@ -33,7 +33,7 @@
3962 // by hand. See the translator.README.txt file in the tools directory for
3963 // more information.
3964 //
3965-// $hash=ae11ffbfed64dc255909f01a7abccbf6acfb5922$
3966+// $hash=de3e738efca85a84422c92fa8504b24ed4efab8a$
3967 //
3968
3969 #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_LABEL_BUTTON_CAPI_H_
3970diff --git a/cef/include/capi/views/cef_layout_capi.h b/cef/include/capi/views/cef_layout_capi.h
3971index 4cc2f7a4cc..8047df752a 100644
3972--- a/cef/include/capi/views/cef_layout_capi.h
3973+++ b/cef/include/capi/views/cef_layout_capi.h
3974@@ -1,4 +1,4 @@
3975-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3976+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3977 //
3978 // Redistribution and use in source and binary forms, with or without
3979 // modification, are permitted provided that the following conditions are
3980@@ -33,7 +33,7 @@
3981 // by hand. See the translator.README.txt file in the tools directory for
3982 // more information.
3983 //
3984-// $hash=6a10260132a69996885e20fe54f552fca6f0862b$
3985+// $hash=6ef0d3d4390654fc1460a2ff586f2bbfd62e96b8$
3986 //
3987
3988 #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_LAYOUT_CAPI_H_
3989diff --git a/cef/include/capi/views/cef_menu_button_capi.h b/cef/include/capi/views/cef_menu_button_capi.h
3990index c9265787bd..50aaca9d60 100644
3991--- a/cef/include/capi/views/cef_menu_button_capi.h
3992+++ b/cef/include/capi/views/cef_menu_button_capi.h
3993@@ -1,4 +1,4 @@
3994-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
3995+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
3996 //
3997 // Redistribution and use in source and binary forms, with or without
3998 // modification, are permitted provided that the following conditions are
3999@@ -33,7 +33,7 @@
4000 // by hand. See the translator.README.txt file in the tools directory for
4001 // more information.
4002 //
4003-// $hash=56ea894f85a5ec444d7899d8ccb548e34b4ba891$
4004+// $hash=925b09f77cd71327a447bf5c9601cc21a7eb7c3a$
4005 //
4006
4007 #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_MENU_BUTTON_CAPI_H_
4008diff --git a/cef/include/capi/views/cef_menu_button_delegate_capi.h b/cef/include/capi/views/cef_menu_button_delegate_capi.h
4009index e0c1ae39a9..c5f22aabac 100644
4010--- a/cef/include/capi/views/cef_menu_button_delegate_capi.h
4011+++ b/cef/include/capi/views/cef_menu_button_delegate_capi.h
4012@@ -1,4 +1,4 @@
4013-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
4014+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
4015 //
4016 // Redistribution and use in source and binary forms, with or without
4017 // modification, are permitted provided that the following conditions are
4018@@ -33,7 +33,7 @@
4019 // by hand. See the translator.README.txt file in the tools directory for
4020 // more information.
4021 //
4022-// $hash=d04871b1f67c5074874d68a50e14e9746d1f175d$
4023+// $hash=ca7948602a0d20a5bd0271065d79e8679898eff6$
4024 //
4025
4026 #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_MENU_BUTTON_DELEGATE_CAPI_H_
4027diff --git a/cef/include/capi/views/cef_panel_capi.h b/cef/include/capi/views/cef_panel_capi.h
4028index 64566d6ff9..276c6206d4 100644
4029--- a/cef/include/capi/views/cef_panel_capi.h
4030+++ b/cef/include/capi/views/cef_panel_capi.h
4031@@ -1,4 +1,4 @@
4032-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
4033+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
4034 //
4035 // Redistribution and use in source and binary forms, with or without
4036 // modification, are permitted provided that the following conditions are
4037@@ -33,7 +33,7 @@
4038 // by hand. See the translator.README.txt file in the tools directory for
4039 // more information.
4040 //
4041-// $hash=9a56cb55b4454c640ec9edf0af58fbdf7142c129$
4042+// $hash=d5311ffa72e57d240f6963b1f45a278041bd33f4$
4043 //
4044
4045 #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_PANEL_CAPI_H_
4046diff --git a/cef/include/capi/views/cef_panel_delegate_capi.h b/cef/include/capi/views/cef_panel_delegate_capi.h
4047index 9ad7a49df5..bef0a26510 100644
4048--- a/cef/include/capi/views/cef_panel_delegate_capi.h
4049+++ b/cef/include/capi/views/cef_panel_delegate_capi.h
4050@@ -1,4 +1,4 @@
4051-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
4052+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
4053 //
4054 // Redistribution and use in source and binary forms, with or without
4055 // modification, are permitted provided that the following conditions are
4056@@ -33,7 +33,7 @@
4057 // by hand. See the translator.README.txt file in the tools directory for
4058 // more information.
4059 //
4060-// $hash=954694f6f807cdbff3d5b0533cedae118019b469$
4061+// $hash=3b6b3ef725189debb1dd43db395a111f50dee60c$
4062 //
4063
4064 #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_PANEL_DELEGATE_CAPI_H_
4065diff --git a/cef/include/capi/views/cef_scroll_view_capi.h b/cef/include/capi/views/cef_scroll_view_capi.h
4066index 9a697c322e..2c93f45c3a 100644
4067--- a/cef/include/capi/views/cef_scroll_view_capi.h
4068+++ b/cef/include/capi/views/cef_scroll_view_capi.h
4069@@ -1,4 +1,4 @@
4070-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
4071+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
4072 //
4073 // Redistribution and use in source and binary forms, with or without
4074 // modification, are permitted provided that the following conditions are
4075@@ -33,7 +33,7 @@
4076 // by hand. See the translator.README.txt file in the tools directory for
4077 // more information.
4078 //
4079-// $hash=74c1ec16b0fd36657bc6227e19ff529a9e9e7afa$
4080+// $hash=374b16fddbbb8bedc2dbb2e03dcfaa8cddba6aeb$
4081 //
4082
4083 #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_SCROLL_VIEW_CAPI_H_
4084diff --git a/cef/include/capi/views/cef_textfield_capi.h b/cef/include/capi/views/cef_textfield_capi.h
4085index deb179e3ed..fbb97eea93 100644
4086--- a/cef/include/capi/views/cef_textfield_capi.h
4087+++ b/cef/include/capi/views/cef_textfield_capi.h
4088@@ -1,4 +1,4 @@
4089-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
4090+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
4091 //
4092 // Redistribution and use in source and binary forms, with or without
4093 // modification, are permitted provided that the following conditions are
4094@@ -33,7 +33,7 @@
4095 // by hand. See the translator.README.txt file in the tools directory for
4096 // more information.
4097 //
4098-// $hash=ffe125c11cab3b704f22e232837f36414b1a36a6$
4099+// $hash=798f84672412f544765b800d03cf284b066f818c$
4100 //
4101
4102 #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_TEXTFIELD_CAPI_H_
4103diff --git a/cef/include/capi/views/cef_textfield_delegate_capi.h b/cef/include/capi/views/cef_textfield_delegate_capi.h
4104index ea22493e71..167249eef6 100644
4105--- a/cef/include/capi/views/cef_textfield_delegate_capi.h
4106+++ b/cef/include/capi/views/cef_textfield_delegate_capi.h
4107@@ -1,4 +1,4 @@
4108-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
4109+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
4110 //
4111 // Redistribution and use in source and binary forms, with or without
4112 // modification, are permitted provided that the following conditions are
4113@@ -33,7 +33,7 @@
4114 // by hand. See the translator.README.txt file in the tools directory for
4115 // more information.
4116 //
4117-// $hash=4d1e834a5a548f1da317aceb92c590590651ed99$
4118+// $hash=44337fe515a5acf51829e1dd00a54f2c1230aba5$
4119 //
4120
4121 #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_TEXTFIELD_DELEGATE_CAPI_H_
4122diff --git a/cef/include/capi/views/cef_view_capi.h b/cef/include/capi/views/cef_view_capi.h
4123index dcf0e9e4e3..f4367a2187 100644
4124--- a/cef/include/capi/views/cef_view_capi.h
4125+++ b/cef/include/capi/views/cef_view_capi.h
4126@@ -1,4 +1,4 @@
4127-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
4128+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
4129 //
4130 // Redistribution and use in source and binary forms, with or without
4131 // modification, are permitted provided that the following conditions are
4132@@ -33,7 +33,7 @@
4133 // by hand. See the translator.README.txt file in the tools directory for
4134 // more information.
4135 //
4136-// $hash=9881a00ef237b6972f14c071544387fc90fe18f1$
4137+// $hash=a2f35807b488fcb00674418d25f4f3d8e544bf9f$
4138 //
4139
4140 #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_VIEW_CAPI_H_
4141diff --git a/cef/include/capi/views/cef_view_delegate_capi.h b/cef/include/capi/views/cef_view_delegate_capi.h
4142index 9c2a0844e0..7756a33072 100644
4143--- a/cef/include/capi/views/cef_view_delegate_capi.h
4144+++ b/cef/include/capi/views/cef_view_delegate_capi.h
4145@@ -1,4 +1,4 @@
4146-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
4147+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
4148 //
4149 // Redistribution and use in source and binary forms, with or without
4150 // modification, are permitted provided that the following conditions are
4151@@ -33,7 +33,7 @@
4152 // by hand. See the translator.README.txt file in the tools directory for
4153 // more information.
4154 //
4155-// $hash=a060cb3c53317d758e7f6b4a275288cd08f086e7$
4156+// $hash=06b8e3c806864f42170d7d050d21a10a094df2df$
4157 //
4158
4159 #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_VIEW_DELEGATE_CAPI_H_
4160diff --git a/cef/include/capi/views/cef_window_capi.h b/cef/include/capi/views/cef_window_capi.h
4161index d9e584bfda..a8d267f05a 100644
4162--- a/cef/include/capi/views/cef_window_capi.h
4163+++ b/cef/include/capi/views/cef_window_capi.h
4164@@ -1,4 +1,4 @@
4165-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
4166+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
4167 //
4168 // Redistribution and use in source and binary forms, with or without
4169 // modification, are permitted provided that the following conditions are
4170@@ -33,7 +33,7 @@
4171 // by hand. See the translator.README.txt file in the tools directory for
4172 // more information.
4173 //
4174-// $hash=15f88e3521ca96947fe8b1f91f251eb3405fb293$
4175+// $hash=d391352a3ffd7bd9485c3d0c33674ff523a9a61d$
4176 //
4177
4178 #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_WINDOW_CAPI_H_
4179diff --git a/cef/include/capi/views/cef_window_delegate_capi.h b/cef/include/capi/views/cef_window_delegate_capi.h
4180index 4cf6188c40..bcf48dc0cb 100644
4181--- a/cef/include/capi/views/cef_window_delegate_capi.h
4182+++ b/cef/include/capi/views/cef_window_delegate_capi.h
4183@@ -1,4 +1,4 @@
4184-// Copyright (c) 2021 Marshall A. Greenblatt. All rights reserved.
4185+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
4186 //
4187 // Redistribution and use in source and binary forms, with or without
4188 // modification, are permitted provided that the following conditions are
4189@@ -33,7 +33,7 @@
4190 // by hand. See the translator.README.txt file in the tools directory for
4191 // more information.
4192 //
4193-// $hash=b43e6106fde84f3bab4dd566efab23a50adaf94d$
4194+// $hash=da087348fa213f9ce4ceb37d248d9aaecc04e5d3$
4195 //
4196
4197 #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_WINDOW_DELEGATE_CAPI_H_
4198diff --git a/cef/include/cef_api_hash.h b/cef/include/cef_api_hash.h
4199index c09e0c63ce..6449fab747 100644
4200--- a/cef/include/cef_api_hash.h
4201+++ b/cef/include/cef_api_hash.h
4202@@ -42,15 +42,15 @@
4203 // way that may cause binary incompatibility with other builds. The universal
4204 // hash value will change if any platform is affected whereas the platform hash
4205 // values will change only if that particular platform is affected.
4206-#define CEF_API_HASH_UNIVERSAL "d026196d35d8894a836ab3a3d033b84195cdb835"
4207+#define CEF_API_HASH_UNIVERSAL "d7e9904bce60295dd04e64d40efe4da6a362210c"
4208 #if defined(OS_WIN)
4209-#define CEF_API_HASH_PLATFORM "4150bd26e7bf639a9b1f3e5860af8c76eeae8570"
4210+#define CEF_API_HASH_PLATFORM "2b7373e08ea7313f324f799cf199f4499a0f3efc"
4211 #elif defined(OS_MAC)
4212-#define CEF_API_HASH_PLATFORM "5cc32f88bd134410eff86b21095138b339d572f2"
4213+#define CEF_API_HASH_PLATFORM "42bfe0cdf84e5eeedf2f6736bea7a3db1fa3295d"
4214 #elif defined(OS_LINUX)
4215-#define CEF_API_HASH_PLATFORM "b227b3fdd6142a9d8ff0f2252a71425f15960800"
4216+#define CEF_API_HASH_PLATFORM "d5c72291f0a9668264d2d8ac246d6c8c84fea0cc"
4217 #elif defined(OS_OHOS)
4218-#define CEF_API_HASH_PLATFORM "b227b3fdd6142a9d8ff0f2252a71425f15960800"
4219+#define CEF_API_HASH_PLATFORM "d5c72291f0a9668264d2d8ac246d6c8c84fea0cc"
4220 #endif
4221
4222 #ifdef __cplusplus
4223diff --git a/cef/include/cef_browser.h b/cef/include/cef_browser.h
4224index cab6ce50eb..a0496a272a 100644
4225--- a/cef/include/cef_browser.h
4226+++ b/cef/include/cef_browser.h
4227@@ -45,11 +45,14 @@
4228 #include "include/cef_frame.h"
4229 #include "include/cef_image.h"
4230 #include "include/cef_navigation_entry.h"
4231+#include "include/cef_permission_request.h"
4232 #include "include/cef_registration.h"
4233 #include "include/cef_request_context.h"
4234+#include "include/cef_task.h"
4235
4236 class CefBrowserHost;
4237 class CefClient;
4238+class CefJavaScriptResultCallback;
4239
4240 ///
4241 // Class used to represent a browser window. When used in the browser process
4242@@ -91,6 +94,12 @@ class CefBrowser : public virtual CefBaseRefCounted {
4243   /*--cef()--*/
4244   virtual void GoForward() = 0;
4245
4246+  ///
4247+  // Returns true if the browser can navigate forwards.
4248+  ///
4249+  /*--cef()--*/
4250+  virtual bool CanGoBackOrForward(int num_steps) = 0;
4251+
4252   ///
4253   // Returns true if the browser is currently loading.
4254   ///
4255@@ -186,6 +195,18 @@ class CefBrowser : public virtual CefBaseRefCounted {
4256   ///
4257   /*--cef()--*/
4258   virtual void GetFrameNames(std::vector<CefString>& names) = 0;
4259+
4260+  ///
4261+  // Returns the Permission Request Delegate object.
4262+  ///
4263+  /*--cef()--*/
4264+  virtual CefRefPtr<CefBrowserPermissionRequestDelegate> GetPermissionRequestDelegate() = 0;
4265+
4266+  ///
4267+  // Returns the Geolocation Permission handler object.
4268+  ///
4269+  /*--cef()--*/
4270+  virtual CefRefPtr<CefGeolocationAcess> GetGeolocationPermissions() = 0;
4271 };
4272
4273 ///
4274@@ -322,6 +343,12 @@ class CefBrowserHost : public virtual CefBaseRefCounted {
4275   /*--cef()--*/
4276   virtual CefRefPtr<CefBrowser> GetBrowser() = 0;
4277
4278+  ///
4279+  // Post task to ui thread.
4280+  ///
4281+  /*--cef()--*/
4282+  virtual void PostTaskToUIThread(CefRefPtr<CefTask> task) = 0;
4283+
4284   ///
4285   // Request that the browser close. The JavaScript 'onbeforeunload' event will
4286   // be fired. If |force_close| is false the event handler, if any, will be
4287@@ -739,26 +766,124 @@ class CefBrowserHost : public virtual CefBaseRefCounted {
4288   /*--cef()--*/
4289   virtual void SetWindowlessFrameRate(int frame_rate) = 0;
4290
4291+  /* ---------- ohos webview add begin --------- */
4292+  ///
4293+  // Recompute the WebPreferences based on the current state of the CefSettings,
4294+  // we will also call SetWebPreferences and send the updated WebPreferences to
4295+  // all RenderViews by WebContents.
4296+  ///
4297+  /*--cef()--*/
4298+  virtual void SetWebPreferences(
4299+      const CefBrowserSettings& browser_settings) = 0;
4300+
4301+  ///
4302+  // PutUserAgent
4303+  ///
4304+  /*--cef()--*/
4305+  virtual void PutUserAgent(const CefString& ua) = 0;
4306+
4307+  ///
4308+  // DefaultUserAgent
4309+  ///
4310+  /*--cef()--*/
4311+  virtual CefString DefaultUserAgent() = 0;
4312+
4313+  ///
4314+  // SetBackgroundColor
4315+  ///
4316+  /*--cef()--*/
4317+  virtual void SetBackgroundColor(int color) = 0;
4318+
4319+  ///
4320+  // RegisterArkJSfunction
4321+  ///
4322+  /*--cef()--*/
4323+  virtual void RegisterArkJSfunction(const CefString& object_name, const std::vector<CefString>& method_list) = 0;
4324+
4325+  ///
4326+  // UnregisterArkJSfunction
4327+  ///
4328+  /*--cef(optional_param=method_list)--*/
4329+  virtual void UnregisterArkJSfunction(const CefString& object_name, const std::vector<CefString>& method_list) = 0;
4330+  /* ---------- ohos webview add end --------- */
4331+
4332+  ///
4333+  // Gets the title for the current page.
4334+  ///
4335+  /*--cef()--*/
4336+  virtual CefString Title() = 0;
4337+
4338+  ///
4339+  // Gets the latest hitdata
4340+  ///
4341+  /*--cef()--*/
4342+  virtual void GetHitData(int& type, CefString& extra_data) = 0;
4343+
4344+  ///
4345+  // Gets the progress for the current page.
4346+  ///
4347+  /*--cef()--*/
4348+  virtual int PageLoadProgress() = 0;
4349+
4350+  ///
4351+  // Gets the progress for the current page.
4352+  ///
4353+  /*--cef()--*/
4354+  virtual float Scale() = 0;
4355+
4356+  ///
4357+  // Loads the given data into this WebView, using baseUrl as the base URL for
4358+  // the content. The base URL is used both to resolve relative URLs and when
4359+  // applying JavaScript's same origin policy. The historyUrl is used for the
4360+  // history entry.
4361+  // optional_param=baseUrl, optional_param=data, optional_param=mimeType,
4362+  // optional_param=encoding, optional_param=historyUrl
4363+  ///
4364+  /*--cef(optional_param=baseUrl, optional_param=data, optional_param=mimeType,
4365+          optional_param=encoding, optional_param=historyUrl)--*/
4366+  virtual void LoadWithDataAndBaseUrl(const CefString& baseUrl,
4367+                                      const CefString& data,
4368+                                      const CefString& mimeType,
4369+                                      const CefString& encoding,
4370+                                      const CefString& historyUrl) = 0;
4371+
4372   ///
4373-  // Begins a new composition or updates the existing composition. Blink has a
4374-  // special node (a composition node) that allows the input method to change
4375-  // text without affecting other DOM nodes. |text| is the optional text that
4376-  // will be inserted into the composition node. |underlines| is an optional set
4377-  // of ranges that will be underlined in the resulting text.
4378-  // |replacement_range| is an optional range of the existing text that will be
4379-  // replaced. |selection_range| is an optional range of the resulting text that
4380-  // will be selected after insertion or replacement. The |replacement_range|
4381-  // value is only used on OS X.
4382+  // Loads the given data into this WebView
4383+  // optional_param=data, optional_param=mimeType, optional_param=encoding,
4384+  ///
4385+  /*--cef(optional_param=data, optional_param=mimeType, optional_param=encoding,)--*/
4386+  virtual void LoadWithData(const CefString& data,
4387+                            const CefString& mimeType,
4388+                            const CefString& encoding) = 0;
4389+
4390+  ///
4391+  // add visited url.
4392+  ///
4393+  /*--cef(optional_param=urls)--*/
4394+  virtual void AddVisitedLinks(const std::vector<CefString>& urls) {}
4395+
4396+  ///
4397+  // Begins a new composition or updates the existing composition. Blink has
4398+  // a special node (a composition node) that allows the input method to
4399+  // change text without affecting other DOM nodes. |text| is the optional
4400+  // text that will be inserted into the composition node. |underlines| is
4401+  // an optional set of ranges that will be underlined in the resulting
4402+  // text. |replacement_range| is an optional range of the existing text
4403+  // that will be replaced. |selection_range| is an optional range of the
4404+  // resulting text that will be selected after insertion or replacement.
4405+  // The |replacement_range| value is only used on OS X.
4406   //
4407-  // This method may be called multiple times as the composition changes. When
4408-  // the client is done making changes the composition should either be canceled
4409-  // or completed. To cancel the composition call ImeCancelComposition. To
4410-  // complete the composition call either ImeCommitText or
4411-  // ImeFinishComposingText. Completion is usually signaled when:
4412-  //   A. The client receives a WM_IME_COMPOSITION message with a GCS_RESULTSTR
4413+  // This method may be called multiple times as the composition changes.
4414+  // When the client is done making changes the composition should either be
4415+  // canceled or completed. To cancel the composition call
4416+  // ImeCancelComposition. To complete the composition call either
4417+  // ImeCommitText or ImeFinishComposingText. Completion is usually signaled
4418+  // when:
4419+  //   A. The client receives a WM_IME_COMPOSITION message with a
4420+  //   GCS_RESULTSTR
4421   //      flag (on Windows), or;
4422-  //   B. The client receives a "commit" signal of GtkIMContext (on Linux), or;
4423-  //   C. insertText of NSTextInput is called (on Mac).
4424+  //   B. The client receives a "commit" signal of GtkIMContext (on Linux),
4425+  //   or; C. insertText of NSTextInput is called (on Mac).
4426   //
4427   // This method is only used when window rendering is disabled.
4428   ///
4429@@ -940,6 +1065,28 @@ class CefBrowserHost : public virtual CefBaseRefCounted {
4430   ///
4431   /*--cef()--*/
4432   virtual bool IsAudioMuted() = 0;
4433+
4434+  ///
4435+  // Execute a string of JavaScript code, return result by callback
4436+  ///
4437+  /*--cef()--*/
4438+  virtual void ExecuteJavaScript(const CefString& code,
4439+                                 CefRefPtr<CefJavaScriptResultCallback> callback) = 0;
4440+};
4441+
4442+///
4443+// Interface to implement to be notified of asynchronous completion via
4444+// CefBrowserHostBase::ExecuteJavaScript().
4445+///
4446+/*--cef(source=client)--*/
4447+class CefJavaScriptResultCallback : public virtual CefBaseRefCounted {
4448+ public:
4449+  ///
4450+  // Method that will be called upon completion. |num_deleted| will be the
4451+  // number of cookies that were deleted.
4452+  ///
4453+  /*--cef()--*/
4454+  virtual void OnJavaScriptExeResult(const CefString& result) = 0;
4455 };
4456
4457 #endif  // CEF_INCLUDE_CEF_BROWSER_H_
4458diff --git a/cef/include/cef_client.h b/cef/include/cef_client.h
4459index 20e5ede627..759c20f52c 100644
4460--- a/cef/include/cef_client.h
4461+++ b/cef/include/cef_client.h
4462@@ -51,6 +51,7 @@
4463 #include "include/cef_keyboard_handler.h"
4464 #include "include/cef_life_span_handler.h"
4465 #include "include/cef_load_handler.h"
4466+#include "include/cef_permission_request.h"
4467 #include "include/cef_print_handler.h"
4468 #include "include/cef_process_message.h"
4469 #include "include/cef_render_handler.h"
4470@@ -159,6 +160,12 @@ class CefClient : public virtual CefBaseRefCounted {
4471   /*--cef()--*/
4472   virtual CefRefPtr<CefRequestHandler> GetRequestHandler() { return nullptr; }
4473
4474+  ///
4475+  // Return the handler for browser geolocation permission request events.
4476+  ///
4477+  /*--cef()--*/
4478+  virtual CefRefPtr<CefPermissionRequest> GetPermissionRequest() { return nullptr; }
4479+
4480   ///
4481   // Called when a new message is received from a different process. Return true
4482   // if the message was handled or false otherwise. Do not keep a reference to
4483@@ -171,6 +178,15 @@ class CefClient : public virtual CefBaseRefCounted {
4484                                         CefRefPtr<CefProcessMessage> message) {
4485     return false;
4486   }
4487+
4488+  ///
4489+  // Returns the list of arguments NotifyJavaScriptResult.
4490+  ///
4491+  /*--cef()--*/
4492+  virtual int NotifyJavaScriptResult(CefRefPtr<CefListValue> args,
4493+                                      const CefString& method,
4494+                                      const CefString& object_name,
4495+                                      CefRefPtr<CefListValue> result) { return 0; };
4496 };
4497
4498 #endif  // CEF_INCLUDE_CEF_CLIENT_H_
4499diff --git a/cef/include/cef_cookie.h b/cef/include/cef_cookie.h
4500index bea152ce94..8eb3beea39 100644
4501--- a/cef/include/cef_cookie.h
4502+++ b/cef/include/cef_cookie.h
4503@@ -64,6 +64,40 @@ class CefCookieManager : public virtual CefBaseRefCounted {
4504   static CefRefPtr<CefCookieManager> GetGlobalManager(
4505       CefRefPtr<CefCompletionCallback> callback);
4506
4507+  ///
4508+  // Convert string cookie to CefCookie. The method will return true when excuted
4509+  // success, otherwise return false.
4510+  ///
4511+  /*--cef()--*/
4512+  static bool CreateCefCookie(const CefString& url, const CefString& value,
4513+                              CefCookie& cef_cookie);
4514+
4515+  ///
4516+  // Get whether this cookie manager can accpet and send cookies. Returns false if
4517+  // can't.
4518+  ///
4519+  /*--cef()--*/
4520+  virtual bool IsAcceptCookieAllowed() = 0;
4521+
4522+  ///
4523+  // Set whether this cookie manager can accpet and send cookies.
4524+  ///
4525+  /*--cef()--*/
4526+  virtual void PutAcceptCookieEnabled(bool accept) = 0;
4527+
4528+  ///
4529+  // Get whether this cookie manager can accpet and send cookies for file scheme URL.
4530+  // Returns false if can't.
4531+  ///
4532+  /*--cef()--*/
4533+  virtual bool IsFileURLSchemeCookiesAllowed() = 0;
4534+
4535+  ///
4536+  // Set whether this cookie manager can accpet and send cookies for file scheme URL.
4537+  ///
4538+  /*--cef()--*/
4539+  virtual void PutAcceptFileURLSchemeCookiesEnabled(bool allow) = 0;
4540+
4541   ///
4542   // Visit all cookies on the UI thread. The returned cookies are ordered by
4543   // longest path, then by earliest creation date. Returns false if cookies
4544@@ -113,6 +147,7 @@ class CefCookieManager : public virtual CefBaseRefCounted {
4545           optional_param=callback)--*/
4546   virtual bool DeleteCookies(const CefString& url,
4547                              const CefString& cookie_name,
4548+                             bool is_session,
4549                              CefRefPtr<CefDeleteCookiesCallback> callback) = 0;
4550
4551   ///
4552@@ -143,6 +178,14 @@ class CefCookieVisitor : public virtual CefBaseRefCounted {
4553                      int count,
4554                      int total,
4555                      bool& deleteCookie) = 0;
4556+
4557+  ///
4558+  // Method that will be called when all cookies have been visited, contenate
4559+  // them into one string line. The string cookie line will be passed into this
4560+  // method.
4561+  ///
4562+  /*--cef()--*/
4563+  virtual void SetCookieLine(const CefString& cookieLine) {}
4564 };
4565
4566 ///
4567diff --git a/cef/include/cef_display_handler.h b/cef/include/cef_display_handler.h
4568index 61636f1047..cffbbe6fba 100644
4569--- a/cef/include/cef_display_handler.h
4570+++ b/cef/include/cef_display_handler.h
4571@@ -71,6 +71,24 @@ class CefDisplayHandler : public virtual CefBaseRefCounted {
4572   virtual void OnFaviconURLChange(CefRefPtr<CefBrowser> browser,
4573                                   const std::vector<CefString>& icon_urls) {}
4574
4575+  ///
4576+  // onReceivedTouchIconUrl.
4577+  ///
4578+  /*--cef()--*/
4579+  virtual void OnReceivedTouchIconUrl(CefRefPtr<CefBrowser> browser,
4580+                                      const CefString& icon_url,
4581+                                      bool precomposed) {}
4582+
4583+  ///
4584+  // onReceivedIcon.
4585+  ///
4586+  /*--cef()--*/
4587+  virtual void OnReceivedIcon(const void* data,
4588+                              size_t width,
4589+                              size_t height,
4590+                              cef_color_type_t color_type,
4591+                              cef_alpha_type_t alpha_type) {}
4592+
4593   ///
4594   // Called when web content in the page has toggled fullscreen mode. If
4595   // |fullscreen| is true the content will automatically be sized to fill the
4596diff --git a/cef/include/cef_frame.h b/cef/include/cef_frame.h
4597index a1d0bbadcf..2f99585f9a 100644
4598--- a/cef/include/cef_frame.h
4599+++ b/cef/include/cef_frame.h
4600@@ -219,6 +219,14 @@ class CefFrame : public virtual CefBaseRefCounted {
4601   /*--cef()--*/
4602   virtual void VisitDOM(CefRefPtr<CefDOMVisitor> visitor) = 0;
4603
4604+  ///
4605+  // Loads the given URL with additional HTTP headers, specified as a map
4606+  // from name to value. Note that if this map contains any of the headers that are set by default by this WebView,
4607+  // such as those controlling caching, accept types or the User-Agent, their values may be overridden by this WebView's defaults.
4608+  ///
4609+  /*--cef(optional_param=url, optional_param=additionalHttpHeaders)--*/
4610+  virtual void LoadHeaderUrl(const CefString& url, const CefString& additionalHttpHeaders) = 0;
4611+
4612   ///
4613   // Create a new URL request that will be treated as originating from this
4614   // frame and the associated browser. This request may be intercepted by the
4615diff --git a/cef/include/cef_load_handler.h b/cef/include/cef_load_handler.h
4616index 66b556732d..3389aa306b 100644
4617--- a/cef/include/cef_load_handler.h
4618+++ b/cef/include/cef_load_handler.h
4619@@ -41,6 +41,7 @@
4620 #include "include/cef_base.h"
4621 #include "include/cef_browser.h"
4622 #include "include/cef_frame.h"
4623+#include "include/cef_response.h"
4624
4625 ///
4626 // Implement this interface to handle events related to browser load status. The
4627@@ -111,6 +112,25 @@ class CefLoadHandler : public virtual CefBaseRefCounted {
4628                            ErrorCode errorCode,
4629                            const CefString& errorText,
4630                            const CefString& failedUrl) {}
4631+
4632+  ///
4633+  // OnLoadErrorWithRequest
4634+  ///
4635+  /*--cef()--*/
4636+  virtual void OnLoadErrorWithRequest(CefRefPtr<CefRequest> request,
4637+                                      bool is_main_frame,
4638+                                      bool has_user_gesture,
4639+                                      int error_code,
4640+                                      const CefString& error_text) {}
4641+
4642+  ///
4643+  // OnHttpError
4644+  ///
4645+  /*--cef()--*/
4646+  virtual void OnHttpError(CefRefPtr<CefRequest> request,
4647+                                   bool is_main_frame,
4648+                                   bool has_user_gesture,
4649+                                   CefRefPtr<CefResponse> response) {}
4650 };
4651
4652 #endif  // CEF_INCLUDE_CEF_LOAD_HANDLER_H_
4653diff --git a/cef/include/cef_permission_request.h b/cef/include/cef_permission_request.h
4654new file mode 100644
4655index 0000000000..89931b9a32
4656--- /dev/null
4657+++ b/cef/include/cef_permission_request.h
4658@@ -0,0 +1,149 @@
4659+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
4660+// Use of this source code is governed by a BSD-style license that can be
4661+// found in the LICENSE file.
4662+
4663+#ifndef CEF_INCLUDE_CEF_PERMISSION_REQUEST_H_
4664+#define CEF_INCLUDE_CEF_PERMISSION_REQUEST_H_
4665+#pragma once
4666+
4667+#include "include/cef_base.h"
4668+#include "include/internal/cef_types.h"
4669+
4670+///
4671+// Class used to report permission request for the specified origin.
4672+///
4673+/*--cef(source=library)--*/
4674+class CefAccessRequest : public virtual CefBaseRefCounted {
4675+ public:
4676+  ///
4677+  // Get the origin that is trying to acess the resource.
4678+  ///
4679+  /*--cef()--*/
4680+  virtual CefString Origin() = 0;
4681+  ///
4682+  // Get the resource that the origin is trying to acess.
4683+  ///
4684+  /*--cef()--*/
4685+  virtual int ResourceAcessId() = 0;
4686+  ///
4687+  // Report whether the origin is allowed to acess the resource.
4688+  ///
4689+  /*--cef()--*/
4690+  virtual void ReportRequestResult(bool allowed) = 0;
4691+};
4692+
4693+///
4694+// Implement this interface to handle permission requests.
4695+///
4696+/*--cef(source=client,no_debugct_check)--*/
4697+class CefPermissionRequest : public virtual CefBaseRefCounted {
4698+ public:
4699+  ///
4700+  // Notify the host application that web content from the specified origin is
4701+  // attempting to use the Geolocation API, but no permission state is currently
4702+  // set for that origin. The host application should invoke the specified
4703+  // callback with the desired permission state.
4704+  ///
4705+  /*--cef()--*/
4706+  virtual void OnGeolocationShow(const CefString& origin) = 0;
4707+  ///
4708+  // Revert the operation in the OnGeolocationShow.
4709+  ///
4710+  /*--cef()--*/
4711+  virtual void OnGeolocationHide() = 0;
4712+  ///
4713+  // Notify the host application that web content from the specified origin is
4714+  // attempting to access the resources, but no permission state is currently
4715+  // set for that origin. The host application should invoke the specified
4716+  // callback with the desired permission state.
4717+  ///
4718+  /*--cef()--*/
4719+  virtual void OnPermissionRequest(CefRefPtr<CefAccessRequest> request) = 0;
4720+  ///
4721+  // Revert the operation in the OnPermissionRequest.
4722+  ///
4723+  /*--cef()--*/
4724+  virtual void OnPermissionRequestCanceled(
4725+      CefRefPtr<CefAccessRequest> request) = 0;
4726+};
4727+
4728+///
4729+// Class used to handle the permission requests from |BrowserContext|.
4730+///
4731+/*--cef(source=library)--*/
4732+class CefBrowserPermissionRequestDelegate : public virtual CefBaseRefCounted {
4733+ public:
4734+  ///
4735+  // Handle the Geolocation permission requests.
4736+  ///
4737+  /*--cef()--*/
4738+  virtual void AskGeolocationPermission(const CefString& origin,
4739+                                        cef_permission_callback_t callback) = 0;
4740+  ///
4741+  // Cancel the Geolocation permission requests.
4742+  ///
4743+  /*--cef()--*/
4744+  virtual void AbortAskGeolocationPermission(const CefString& origin) = 0;
4745+  ///
4746+  // Handle the Protected Media Identifier permission requests.
4747+  ///
4748+  /*--cef()--*/
4749+  virtual void AskProtectedMediaIdentifierPermission(
4750+      const CefString& origin,
4751+      cef_permission_callback_t callback) = 0;
4752+  ///
4753+  // Cancel the Protected Media Identifier permission requests.
4754+  ///
4755+  /*--cef()--*/
4756+  virtual void AbortAskProtectedMediaIdentifierPermission(
4757+      const CefString& origin) = 0;
4758+  ///
4759+  // Handle the MIDI Sysex permission requests.
4760+  ///
4761+  /*--cef()--*/
4762+  virtual void AskMIDISysexPermission(const CefString& origin,
4763+                                      cef_permission_callback_t callback) = 0;
4764+  ///
4765+  // Cancel the MIDI Sysex permission requests.
4766+  ///
4767+  /*--cef()--*/
4768+  virtual void AbortAskMIDISysexPermission(const CefString& origin) = 0;
4769+  ///
4770+  // The callback for the Geolocation permission requests.
4771+  ///
4772+  /*--cef()--*/
4773+  virtual void NotifyGeolocationPermission(bool value,
4774+                                           const CefString& origin) = 0;
4775+};
4776+
4777+///
4778+// Class used to set the geolocation permission state for the specified origin.
4779+///
4780+/*--cef(source=library)--*/
4781+class CefGeolocationAcess : public virtual CefBaseRefCounted {
4782+ public:
4783+  ///
4784+  // Return true if the geolocation permission state is set for the specified
4785+  // origin.
4786+  ///
4787+  /*--cef()--*/
4788+  virtual bool ContainOrigin(const CefString& origin) = 0;
4789+  ///
4790+  // Return true if the geolocation permission state set for the specified
4791+  // origin is true.
4792+  ///
4793+  /*--cef()--*/
4794+  virtual bool IsOriginAccessEnabled(const CefString& origin) = 0;
4795+  ///
4796+  // Set the geolocation permission state to true  for the specified origin.
4797+  ///
4798+  /*--cef()--*/
4799+  virtual void Enabled(const CefString& origin) = 0;
4800+  ///
4801+  // Set the geolocation permission state to false  for the specified origin.
4802+  ///
4803+  /*--cef()--*/
4804+  virtual void Disabled(const CefString& origin) = 0;
4805+};
4806+
4807+#endif  // CEF_INCLUDE_CEF_PERMISSION_REQUEST_H_
4808diff --git a/cef/include/cef_render_handler.h b/cef/include/cef_render_handler.h
4809index f101083a79..286418081d 100644
4810--- a/cef/include/cef_render_handler.h
4811+++ b/cef/include/cef_render_handler.h
4812@@ -202,6 +202,14 @@ class CefRenderHandler : public virtual CefBaseRefCounted {
4813                                      double x,
4814                                      double y) {}
4815
4816+  ///
4817+  // Called when the RootLayer has changed.
4818+  ///
4819+  /*--cef()--*/
4820+  virtual void OnRootLayerChanged(CefRefPtr<CefBrowser> browser,
4821+                                     int height,
4822+                                     int width) {}
4823+
4824   ///
4825   // Called when the IME composition range has changed. |selected_range| is the
4826   // range of characters that have been selected. |character_bounds| is the
4827diff --git a/cef/include/internal/cef_types.h b/cef/include/internal/cef_types.h
4828index db67632877..980265365a 100644
4829--- a/cef/include/internal/cef_types.h
4830+++ b/cef/include/internal/cef_types.h
4831@@ -32,6 +32,7 @@
4832 #pragma once
4833
4834 #include "include/base/cef_basictypes.h"
4835+#include "include/base/cef_callback.h"
4836 #include "include/internal/cef_string.h"
4837 #include "include/internal/cef_string_list.h"
4838 #include "include/internal/cef_time.h"
4839@@ -45,6 +46,9 @@
4840 #include "include/internal/cef_types_linux.h"
4841 #endif
4842
4843+// Permission request callback.
4844+typedef base::Callback<void(bool)> cef_permission_callback_t;
4845+
4846 // 32-bit ARGB color value, not premultiplied. The color components are always
4847 // in a known order. Equivalent to the SkColor type.
4848 typedef uint32 cef_color_t;
4849@@ -684,6 +688,23 @@ typedef struct _cef_browser_settings_t {
4850   // empty then "en-US,en" will be used.
4851   ///
4852   cef_string_t accept_language_list;
4853+
4854+  /* ohos webview begin */
4855+  ///
4856+  // Force the background color to be dark
4857+  ///
4858+  cef_state_t force_dark_mode_enabled;
4859+  cef_state_t loads_images_automatically;
4860+  bool javascript_can_open_windows_automatically;
4861+  int text_size_percent;
4862+  int mixed_content_mode;
4863+  cef_state_t allow_running_insecure_content;
4864+  cef_state_t strict_mixed_content_checking;
4865+  cef_state_t allow_mixed_content_upgrades;
4866+  bool geolocation_enabled;
4867+  bool supports_double_tap_zoom;
4868+  bool supports_multi_touch_zoom;
4869+  /* ohos webview end */
4870 } cef_browser_settings_t;
4871
4872 ///
4873@@ -945,7 +966,11 @@ typedef enum {
4874   ERR_NONE = 0,
4875
4876 #define NET_ERROR(label, value) ERR_##label = value,
4877+#if defined(COMPILE_WITH_OHOS)
4878+#include "include/base/internal/cef_net_error_list_ohos.h"
4879+#else
4880 #include "include/base/internal/cef_net_error_list.h"
4881+#endif
4882 #undef NET_ERROR
4883
4884 } cef_errorcode_t;
4885@@ -2653,6 +2678,11 @@ typedef enum {
4886   // BGRA with 8 bits per pixel (32bits total).
4887   ///
4888   CEF_COLOR_TYPE_BGRA_8888,
4889+
4890+  ///
4891+  // Unknown color type.
4892+  ///
4893+  CEF_COLOR_TYPE_UNKNOWN,
4894 } cef_color_type_t;
4895
4896 ///
4897@@ -2673,6 +2703,11 @@ typedef enum {
4898   // Transparency with post-multiplied alpha component.
4899   ///
4900   CEF_ALPHA_TYPE_POSTMULTIPLIED,
4901+
4902+  ///
4903+  // Unknown alpha type.
4904+  ///
4905+  CEF_ALPHA_TYPE_UNKNOWN,
4906 } cef_alpha_type_t;
4907
4908 ///
4909diff --git a/cef/include/internal/cef_types_wrappers.h b/cef/include/internal/cef_types_wrappers.h
4910index 78ecdb5c41..49429490a9 100644
4911--- a/cef/include/internal/cef_types_wrappers.h
4912+++ b/cef/include/internal/cef_types_wrappers.h
4913@@ -725,6 +725,21 @@ struct CefBrowserSettingsTraits {
4914     cef_string_set(src->accept_language_list.str,
4915                    src->accept_language_list.length,
4916                    &target->accept_language_list, copy);
4917+
4918+    /* ohos webview begin */
4919+    target->force_dark_mode_enabled = src->force_dark_mode_enabled;
4920+    target->javascript_can_open_windows_automatically =
4921+        src->javascript_can_open_windows_automatically;
4922+    target->loads_images_automatically = src->loads_images_automatically;
4923+    target->text_size_percent = src->text_size_percent;
4924+    target->mixed_content_mode = src->mixed_content_mode;
4925+    target->allow_running_insecure_content = src->allow_running_insecure_content;
4926+    target->strict_mixed_content_checking = src->strict_mixed_content_checking;
4927+    target->allow_mixed_content_upgrades = src->allow_mixed_content_upgrades;
4928+    target->geolocation_enabled = src->geolocation_enabled;
4929+    target->supports_double_tap_zoom = src->supports_double_tap_zoom;
4930+    target->supports_multi_touch_zoom = src->supports_multi_touch_zoom;
4931+    /* ohos webview end */
4932   }
4933 };
4934
4935diff --git a/cef/libcef/browser/alloy/alloy_browser_context.cc b/cef/libcef/browser/alloy/alloy_browser_context.cc
4936index 96516f4d5f..65d870cda1 100644
4937--- a/cef/libcef/browser/alloy/alloy_browser_context.cc
4938+++ b/cef/libcef/browser/alloy/alloy_browser_context.cc
4939@@ -1,6 +1,7 @@
4940-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
4941-// Use of this source code is governed by a BSD-style license that can be
4942-// found in the LICENSE file.
4943+// Copyright (c) 2022 Huawei Device Co., Ltd.
4944+// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
4945+// reserved. Use of this source code is governed by a BSD-style license that can
4946+// be found in the LICENSE file.
4947
4948 #include "libcef/browser/alloy/alloy_browser_context.h"
4949
4950@@ -9,6 +10,7 @@
4951
4952 #include "libcef/browser/download_manager_delegate.h"
4953 #include "libcef/browser/extensions/extension_system.h"
4954+#include "libcef/browser/permission/alloy_permission_manager.h"
4955 #include "libcef/browser/prefs/browser_prefs.h"
4956 #include "libcef/browser/ssl_host_state_delegate.h"
4957 #include "libcef/browser/thread_util.h"
4958@@ -381,7 +383,9 @@ content::SSLHostStateDelegate* AlloyBrowserContext::GetSSLHostStateDelegate() {
4959
4960 content::PermissionControllerDelegate*
4961 AlloyBrowserContext::GetPermissionControllerDelegate() {
4962-  return nullptr;
4963+  if (!permission_manager_.get())
4964+    permission_manager_.reset(new AlloyPermissionManager());
4965+  return permission_manager_.get();
4966 }
4967
4968 content::BackgroundFetchDelegate*
4969diff --git a/cef/libcef/browser/alloy/alloy_browser_context.h b/cef/libcef/browser/alloy/alloy_browser_context.h
4970index 72c458196d..d9ebf677ef 100644
4971--- a/cef/libcef/browser/alloy/alloy_browser_context.h
4972+++ b/cef/libcef/browser/alloy/alloy_browser_context.h
4973@@ -1,6 +1,7 @@
4974-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
4975-// Use of this source code is governed by a BSD-style license that can be
4976-// found in the LICENSE file.
4977+// Copyright (c) 2022 Huawei Device Co., Ltd.
4978+// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
4979+// reserved. Use of this source code is governed by a BSD-style license that can
4980+// be found in the LICENSE file.
4981
4982 #ifndef CEF_LIBCEF_BROWSER_ALLOY_ALLOY_BROWSER_CONTEXT_H_
4983 #define CEF_LIBCEF_BROWSER_ALLOY_ALLOY_BROWSER_CONTEXT_H_
4984@@ -141,6 +142,7 @@ class AlloyBrowserContext : public ChromeProfileAlloy,
4985   std::unique_ptr<content::ResourceContext> resource_context_;
4986
4987   scoped_refptr<MediaDeviceIDSalt> media_device_id_salt_;
4988+  std::unique_ptr<content::PermissionControllerDelegate> permission_manager_;
4989
4990   DISALLOW_COPY_AND_ASSIGN(AlloyBrowserContext);
4991 };
4992diff --git a/cef/libcef/browser/alloy/alloy_browser_host_impl.cc b/cef/libcef/browser/alloy/alloy_browser_host_impl.cc
4993index ec9b8e6bcf..73e7113807 100644
4994--- a/cef/libcef/browser/alloy/alloy_browser_host_impl.cc
4995+++ b/cef/libcef/browser/alloy/alloy_browser_host_impl.cc
4996@@ -1,7 +1,7 @@
4997-// Copyright (c) 2012 The Chromium Embedded Framework Authors.
4998-// Portions copyright (c) 2011 The Chromium Authors. All rights reserved.
4999-// Use of this source code is governed by a BSD-style license that can be
5000-// found in the LICENSE file.
5001+// Copyright (c) 2022 Huawei Device Co., Ltd.
5002+// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
5003+// reserved. Use of this source code is governed by a BSD-style license that can
5004+// be found in the LICENSE file.
5005
5006 #include "libcef/browser/alloy/alloy_browser_host_impl.h"
5007
5008@@ -19,6 +19,8 @@
5009 #include "libcef/browser/media_capture_devices_dispatcher.h"
5010 #include "libcef/browser/native/cursor_util.h"
5011 #include "libcef/browser/osr/osr_util.h"
5012+#include "libcef/browser/osr/render_widget_host_view_osr.h"
5013+#include "libcef/browser/prefs/renderer_prefs.h"
5014 #include "libcef/browser/request_context_impl.h"
5015 #include "libcef/browser/thread_util.h"
5016 #include "libcef/common/cef_messages.h"
5017@@ -567,6 +569,10 @@ bool AlloyBrowserHostImpl::IsBackgroundHost() {
5018   return is_background_host_;
5019 }
5020
5021+SkColor AlloyBrowserHostImpl::GetBackgroundColor() const {
5022+  return base_background_color_;
5023+}
5024+
5025 bool AlloyBrowserHostImpl::IsWindowRenderingDisabled() {
5026   return IsWindowless();
5027 }
5028@@ -1226,6 +1232,33 @@ bool AlloyBrowserHostImpl::HandleContextMenu(
5029   return HandleContextMenu(web_contents(), params);
5030 }
5031
5032+void AlloyBrowserHostImpl::SetBackgroundColor(int color) {
5033+  if (color == base_background_color_) {
5034+    return;
5035+  }
5036+
5037+  base_background_color_ = color;
5038+  OnWebPreferencesChanged();
5039+}
5040+
5041+void AlloyBrowserHostImpl::UpdateBackgroundColor(int color) {
5042+  auto rvh = web_contents()->GetRenderViewHost();
5043+
5044+  if (rvh->GetWidget()->GetView()) {
5045+    rvh->GetWidget()->GetView()->SetBackgroundColor(color);
5046+  }
5047+}
5048+
5049+void AlloyBrowserHostImpl::UpdateZoomSupportEnabled() {
5050+  auto rvh = web_contents()->GetRenderViewHost();
5051+  CefRenderWidgetHostViewOSR* view = static_cast<CefRenderWidgetHostViewOSR*>(rvh->GetWidget()->GetView());
5052+
5053+  if (view) {
5054+    view->SetDoubleTapSupportEnabled(settings_.supports_double_tap_zoom);
5055+    view->SetMultiTouchZoomSupportEnabled(settings_.supports_multi_touch_zoom);
5056+  }
5057+}
5058+
5059 KeyboardEventProcessingResult AlloyBrowserHostImpl::PreHandleKeyboardEvent(
5060     content::WebContents* source,
5061     const content::NativeWebKeyboardEvent& event) {
5062@@ -1483,6 +1516,8 @@ void AlloyBrowserHostImpl::RenderFrameCreated(
5063
5064 void AlloyBrowserHostImpl::RenderViewReady() {
5065   platform_delegate_->RenderViewReady();
5066+  UpdateBackgroundColor(base_background_color_);
5067+  UpdateZoomSupportEnabled();
5068 }
5069
5070 void AlloyBrowserHostImpl::DidFinishNavigation(
5071@@ -1645,3 +1680,17 @@ void AlloyBrowserHostImpl::EnsureFileDialogManager() {
5072         this, platform_delegate_->CreateFileDialogRunner()));
5073   }
5074 }
5075+
5076+void AlloyBrowserHostImpl::AddVisitedLinks(const std::vector<CefString>& urls) {
5077+  std::vector<GURL> urlList = std::vector<GURL>();
5078+  for (auto url : urls) {
5079+    urlList.push_back(url_util::MakeGURL(url, /*fixup=*/false));
5080+  }
5081+  if (web_contents()) {
5082+    auto cef_browser_context =
5083+        static_cast<AlloyBrowserContext*>(web_contents()->GetBrowserContext());
5084+    if (cef_browser_context) {
5085+      cef_browser_context->AddVisitedURLs(urlList);
5086+    }
5087+  }
5088+}
5089diff --git a/cef/libcef/browser/alloy/alloy_browser_host_impl.h b/cef/libcef/browser/alloy/alloy_browser_host_impl.h
5090index faee30792c..799295d3eb 100644
5091--- a/cef/libcef/browser/alloy/alloy_browser_host_impl.h
5092+++ b/cef/libcef/browser/alloy/alloy_browser_host_impl.h
5093@@ -1,7 +1,7 @@
5094-// Copyright (c) 2012 The Chromium Embedded Framework Authors.
5095-// Portions copyright (c) 2011 The Chromium Authors. All rights reserved.
5096-// Use of this source code is governed by a BSD-style license that can be
5097-// found in the LICENSE file.
5098+// Copyright (c) 2022 Huawei Device Co., Ltd.
5099+// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
5100+// reserved. Use of this source code is governed by a BSD-style license that can
5101+// be found in the LICENSE file.
5102
5103 #ifndef CEF_LIBCEF_BROWSER_ALLOY_ALLOY_BROWSER_HOST_IMPL_H_
5104 #define CEF_LIBCEF_BROWSER_ALLOY_ALLOY_BROWSER_HOST_IMPL_H_
5105@@ -148,6 +148,7 @@ class AlloyBrowserHostImpl : public CefBrowserHostBase,
5106                             const CefSize& max_size) override;
5107   CefRefPtr<CefExtension> GetExtension() override;
5108   bool IsBackgroundHost() override;
5109+  SkColor GetBackgroundColor() const;
5110
5111   // Returns true if windowless rendering is enabled.
5112   bool IsWindowless() const override;
5113@@ -203,6 +204,10 @@ class AlloyBrowserHostImpl : public CefBrowserHostBase,
5114   };
5115   DestructionState destruction_state() const { return destruction_state_; }
5116
5117+  /* ohos webview begin */
5118+  void SetBackgroundColor(int color) override;
5119+  /* ohos webview end */
5120+
5121   // content::WebContentsDelegate methods.
5122   content::WebContents* OpenURLFromTab(
5123       content::WebContents* source,
5124@@ -306,6 +311,7 @@ class AlloyBrowserHostImpl : public CefBrowserHostBase,
5125       const std::vector<content::AXLocationChangeNotificationDetails>& locData)
5126       override;
5127   void WebContentsDestroyed() override;
5128+  void AddVisitedLinks(const std::vector<CefString>& urls) override;
5129
5130  private:
5131   friend class CefBrowserPlatformDelegateAlloy;
5132@@ -343,6 +349,10 @@ class AlloyBrowserHostImpl : public CefBrowserHostBase,
5133
5134   void SetFocusInternal(bool focus);
5135
5136+  void UpdateBackgroundColor(int color);
5137+
5138+  void UpdateZoomSupportEnabled();
5139+
5140   CefWindowHandle opener_;
5141   const bool is_windowless_;
5142   CefWindowHandle host_window_handle_ = kNullWindowHandle;
5143@@ -373,6 +383,8 @@ class AlloyBrowserHostImpl : public CefBrowserHostBase,
5144   // starts running when a tab stops being audible, and is canceled if it starts
5145   // being audible again before it fires.
5146   base::OneShotTimer recently_audible_timer_;
5147+
5148+  int base_background_color_ = 0xffffffff;
5149 };
5150
5151 #endif  // CEF_LIBCEF_BROWSER_ALLOY_ALLOY_BROWSER_HOST_IMPL_H_
5152diff --git a/cef/libcef/browser/alloy/alloy_content_browser_client.cc b/cef/libcef/browser/alloy/alloy_content_browser_client.cc
5153index 33be06def0..2a2e3cf6ea 100644
5154--- a/cef/libcef/browser/alloy/alloy_content_browser_client.cc
5155+++ b/cef/libcef/browser/alloy/alloy_content_browser_client.cc
5156@@ -955,6 +955,16 @@ bool AlloyContentBrowserClient::CanCreateWindow(
5157   CEF_REQUIRE_UIT();
5158   *no_javascript_access = false;
5159
5160+  content::WebContents* web_contents =
5161+      content::WebContents::FromRenderFrameHost(opener);
5162+  CefRefPtr<CefBrowserHostBase> browser_host =
5163+      CefBrowserHostBase::GetBrowserForContents(web_contents);
5164+
5165+  if (!browser_host->settings().javascript_can_open_windows_automatically) {
5166+    LOG(INFO) << "javascript_can_open_windows_automatically false";
5167+    return false;
5168+  }
5169+
5170   return CefBrowserInfoManager::GetInstance()->CanCreateWindow(
5171       opener, target_url, referrer, frame_name, disposition, features,
5172       user_gesture, opener_suppressed, no_javascript_access);
5173@@ -998,9 +1008,8 @@ void AlloyContentBrowserClient::DidCreatePpapiPlugin(
5174           new ChromeBrowserPepperHostFactory(browser_host)));
5175 }
5176
5177-std::unique_ptr<content::DevToolsManagerDelegate>
5178-AlloyContentBrowserClient::CreateDevToolsManagerDelegate() {
5179-  return std::make_unique<CefDevToolsManagerDelegate>();
5180+content::DevToolsManagerDelegate* AlloyContentBrowserClient::GetDevToolsManagerDelegate() {
5181+  return new CefDevToolsManagerDelegate();
5182 }
5183
5184 std::vector<std::unique_ptr<content::NavigationThrottle>>
5185@@ -1211,6 +1220,16 @@ void AlloyContentBrowserClient::ConfigureNetworkContextParams(
5186         cert_verifier_creation_params) {
5187   // This method may be called during shutdown when using multi-threaded
5188   // message loop mode. In that case exit early to avoid crashes.
5189+  AlloyBrowserContext* cef_context = static_cast<AlloyBrowserContext*>(CefBrowserContext::FromBrowserContext(context));
5190+
5191+  base::FilePath cache_path;
5192+  if (base::PathService::Get(base::DIR_CACHE, &cache_path)) {
5193+    if (cef_context->ShouldPersistSessionCookies()) {
5194+      network_context_params->cookie_path = cache_path.Append(base::FilePath("cookie.db"));
5195+    }
5196+    network_context_params->persist_session_cookies = cef_context->ShouldPersistSessionCookies();
5197+    network_context_params->restore_old_session_cookies = cef_context->ShouldRestoreOldSessionCookies();
5198+  }
5199   if (!SystemNetworkContextManager::GetInstance()) {
5200     // This must match the value expected in
5201     // StoragePartitionImpl::InitNetworkContext.
5202@@ -1218,8 +1237,6 @@ void AlloyContentBrowserClient::ConfigureNetworkContextParams(
5203     return;
5204   }
5205
5206-  auto cef_context = CefBrowserContext::FromBrowserContext(context);
5207-
5208   Profile* profile = cef_context->AsProfile();
5209   ProfileNetworkContextService* service =
5210       ProfileNetworkContextServiceFactory::GetForContext(profile);
5211diff --git a/cef/libcef/browser/alloy/alloy_content_browser_client.h b/cef/libcef/browser/alloy/alloy_content_browser_client.h
5212index 35b45c4f89..19b3cebebb 100644
5213--- a/cef/libcef/browser/alloy/alloy_content_browser_client.h
5214+++ b/cef/libcef/browser/alloy/alloy_content_browser_client.h
5215@@ -109,8 +109,7 @@ class AlloyContentBrowserClient : public content::ContentBrowserClient {
5216   void BrowserURLHandlerCreated(content::BrowserURLHandler* handler) override;
5217   std::string GetDefaultDownloadName() override;
5218   void DidCreatePpapiPlugin(content::BrowserPpapiHost* browser_host) override;
5219-  std::unique_ptr<content::DevToolsManagerDelegate>
5220-  CreateDevToolsManagerDelegate();
5221+  content::DevToolsManagerDelegate* GetDevToolsManagerDelegate() override;
5222   std::vector<std::unique_ptr<content::NavigationThrottle>>
5223   CreateThrottlesForNavigation(
5224       content::NavigationHandle* navigation_handle) override;
5225diff --git a/cef/libcef/browser/alloy/browser_platform_delegate_alloy.cc b/cef/libcef/browser/alloy/browser_platform_delegate_alloy.cc
5226index 18aad738c2..099cfbec28 100644
5227--- a/cef/libcef/browser/alloy/browser_platform_delegate_alloy.cc
5228+++ b/cef/libcef/browser/alloy/browser_platform_delegate_alloy.cc
5229@@ -254,6 +254,15 @@ void CefBrowserPlatformDelegateAlloy::SendCaptureLostEvent() {
5230     widget->LostCapture();
5231 }
5232
5233+void CefBrowserPlatformDelegateAlloy::SendTouchEventToRender(const CefTouchEvent& event) {
5234+  if (!browser_)
5235+    return;
5236+  auto frame = browser_->GetMainFrame();
5237+  if (frame && frame->IsValid()) {
5238+    static_cast<CefFrameHostImpl*>(frame.get())->SendTouchEvent(event);
5239+  }
5240+}
5241+
5242 #if defined(OS_WIN) || (defined(OS_POSIX) && !defined(OS_MAC))
5243 void CefBrowserPlatformDelegateAlloy::NotifyMoveOrResizeStarted() {
5244   if (!browser_)
5245diff --git a/cef/libcef/browser/alloy/browser_platform_delegate_alloy.h b/cef/libcef/browser/alloy/browser_platform_delegate_alloy.h
5246index dcd8879cc0..8622f73c51 100644
5247--- a/cef/libcef/browser/alloy/browser_platform_delegate_alloy.h
5248+++ b/cef/libcef/browser/alloy/browser_platform_delegate_alloy.h
5249@@ -37,6 +37,7 @@ class CefBrowserPlatformDelegateAlloy : public CefBrowserPlatformDelegate {
5250   extensions::ExtensionHost* GetExtensionHost() const override;
5251   void BrowserDestroyed(CefBrowserHostBase* browser) override;
5252   void SendCaptureLostEvent() override;
5253+  void SendTouchEventToRender(const CefTouchEvent& event);
5254 #if defined(OS_WIN) || (defined(OS_POSIX) && !defined(OS_MAC))
5255   void NotifyMoveOrResizeStarted() override;
5256 #endif
5257diff --git a/cef/libcef/browser/browser_contents_delegate.cc b/cef/libcef/browser/browser_contents_delegate.cc
5258index f6f26956c1..fca6d1e95f 100644
5259--- a/cef/libcef/browser/browser_contents_delegate.cc
5260+++ b/cef/libcef/browser/browser_contents_delegate.cc
5261@@ -1,12 +1,14 @@
5262-// Copyright 2020 The Chromium Embedded Framework Authors. All rights reserved.
5263-// Use of this source code is governed by a BSD-style license that can be
5264-// found in the LICENSE file.
5265+// Copyright (c) 2022 Huawei Device Co., Ltd.
5266+// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
5267+// reserved. Use of this source code is governed by a BSD-style license that can
5268+// be found in the LICENSE file.
5269
5270 #include "libcef/browser/browser_contents_delegate.h"
5271
5272 #include "libcef/browser/browser_host_base.h"
5273 #include "libcef/browser/browser_platform_delegate.h"
5274 #include "libcef/browser/browser_util.h"
5275+#include "libcef/common/request_impl.h"
5276
5277 #include "content/public/browser/keyboard_event_processing_result.h"
5278 #include "content/public/browser/native_web_keyboard_event.h"
5279@@ -29,7 +31,7 @@ CefBrowserContentsDelegate::CefBrowserContentsDelegate(
5280 void CefBrowserContentsDelegate::ObserveWebContents(
5281     content::WebContents* new_contents) {
5282   WebContentsObserver::Observe(new_contents);
5283-
5284+  icon_helper_->SetWebContents(new_contents);
5285   if (new_contents) {
5286     registrar_.reset(new content::NotificationRegistrar);
5287
5288@@ -410,7 +412,17 @@ void CefBrowserContentsDelegate::DidFinishNavigation(
5289     // If the error happened before commit then this call will originate from
5290     // RenderFrameHostImpl::OnDidFailProvisionalLoadWithError.
5291     // OnLoadStart/OnLoadEnd will not be called.
5292-    OnLoadError(frame.get(), navigation_handle->GetURL(), error_code);
5293+
5294+    CefRefPtr<CefRequestImpl> request = new CefRequestImpl();
5295+    CefString cef_url(navigation_handle->GetURL().spec());
5296+    CefString cef_method(navigation_handle->IsPost() ? "POST" : "GET");
5297+    request->SetURL(cef_url);
5298+    request->SetMethod(cef_method);
5299+    request->Set(net::HttpRequestHeaders());
5300+    OnLoadError(request,
5301+                navigation_handle->IsInMainFrame(),
5302+                navigation_handle->HasUserGesture(),
5303+                error_code);
5304   }
5305 }
5306
5307@@ -473,6 +485,7 @@ void CefBrowserContentsDelegate::DidUpdateFaviconURL(
5308       }
5309     }
5310   }
5311+  icon_helper_->OnUpdateFaviconURL(render_frame_host, candidates);
5312 }
5313
5314 void CefBrowserContentsDelegate::OnWebContentsFocused(
5315@@ -594,6 +607,23 @@ void CefBrowserContentsDelegate::OnLoadError(CefRefPtr<CefFrame> frame,
5316   }
5317 }
5318
5319+void CefBrowserContentsDelegate::OnLoadError(CefRefPtr<CefRequest> request,
5320+                                             bool is_main_frame,
5321+                                             bool has_user_gesture,
5322+                                             int error_code) {
5323+  if (auto c = client()) {
5324+    if (auto handler = c->GetLoadHandler()) {
5325+      auto navigation_lock = browser_info_->CreateNavigationLock();
5326+      // On the handler that loading has failed.
5327+      handler->OnLoadErrorWithRequest(request,
5328+                                      is_main_frame,
5329+                                      has_user_gesture,
5330+                                      error_code,
5331+                                      net::ErrorToShortString(error_code));
5332+    }
5333+  }
5334+}
5335+
5336 void CefBrowserContentsDelegate::OnTitleChange(const std::u16string& title) {
5337   if (auto c = client()) {
5338     if (auto handler = c->GetDisplayHandler()) {
5339@@ -621,3 +651,15 @@ void CefBrowserContentsDelegate::OnStateChanged(State state_changed) {
5340     observer.OnStateChanged(state_changed);
5341   }
5342 }
5343+
5344+void CefBrowserContentsDelegate::InitIconHelper() {
5345+  icon_helper_ = new IconHelper();
5346+  icon_helper_->SetBrowser(CefBrowserContentsDelegate::browser());
5347+  CefRefPtr<CefClient> client = CefBrowserContentsDelegate::client();
5348+  if (client) {
5349+    CefRefPtr<CefDisplayHandler> handler = client->GetDisplayHandler();
5350+    if (handler) {
5351+      icon_helper_->SetDisplayHandler(handler);
5352+    }
5353+  }
5354+}
5355diff --git a/cef/libcef/browser/browser_contents_delegate.h b/cef/libcef/browser/browser_contents_delegate.h
5356index 9977552a8f..991010f4f7 100644
5357--- a/cef/libcef/browser/browser_contents_delegate.h
5358+++ b/cef/libcef/browser/browser_contents_delegate.h
5359@@ -1,6 +1,7 @@
5360-// Copyright 2020 The Chromium Embedded Framework Authors. All rights reserved.
5361-// Use of this source code is governed by a BSD-style license that can be
5362-// found in the LICENSE file.
5363+// Copyright (c) 2022 Huawei Device Co., Ltd.
5364+// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
5365+// reserved. Use of this source code is governed by a BSD-style license that can
5366+// be found in the LICENSE file.
5367
5368 #ifndef CEF_LIBCEF_BROWSER_BROWSER_CONTENTS_DELEGATE_H_
5369 #define CEF_LIBCEF_BROWSER_BROWSER_CONTENTS_DELEGATE_H_
5370@@ -9,6 +10,7 @@
5371 #include <memory>
5372
5373 #include "libcef/browser/frame_host_impl.h"
5374+#include "libcef/browser/icon_helper.h"
5375
5376 #include "base/observer_list.h"
5377 #include "content/public/browser/notification_observer.h"
5378@@ -153,6 +155,7 @@ class CefBrowserContentsDelegate : public content::WebContentsDelegate,
5379                  const GURL& url,
5380                  int http_status_code);
5381   bool OnSetFocus(cef_focus_source_t source);
5382+  void InitIconHelper();
5383
5384  private:
5385   CefRefPtr<CefClient> client() const;
5386@@ -164,6 +167,10 @@ class CefBrowserContentsDelegate : public content::WebContentsDelegate,
5387   void OnLoadStart(CefRefPtr<CefFrame> frame,
5388                    ui::PageTransition transition_type);
5389   void OnLoadError(CefRefPtr<CefFrame> frame, const GURL& url, int error_code);
5390+  void OnLoadError(CefRefPtr<CefRequest> request,
5391+                   bool is_in_main_frame,
5392+                   bool has_user_gesture,
5393+                   int error_code);
5394   void OnTitleChange(const std::u16string& title);
5395   void OnFullscreenModeChange(bool fullscreen);
5396
5397@@ -192,6 +199,9 @@ class CefBrowserContentsDelegate : public content::WebContentsDelegate,
5398   // True if the focus is currently on an editable field on the page.
5399   bool focus_on_editable_field_ = false;
5400
5401+  // Store web site icon.
5402+  CefRefPtr<IconHelper> icon_helper_;
5403+
5404   DISALLOW_COPY_AND_ASSIGN(CefBrowserContentsDelegate);
5405 };
5406
5407diff --git a/cef/libcef/browser/browser_host_base.cc b/cef/libcef/browser/browser_host_base.cc
5408index 20760ddff7..9f046ffc57 100644
5409--- a/cef/libcef/browser/browser_host_base.cc
5410+++ b/cef/libcef/browser/browser_host_base.cc
5411@@ -1,20 +1,27 @@
5412-// Copyright 2020 The Chromium Embedded Framework Authors. All rights reserved.
5413-// Use of this source code is governed by a BSD-style license that can be
5414-// found in the LICENSE file.
5415+// Copyright (c) 2022 Huawei Device Co., Ltd.
5416+// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
5417+// reserved. Use of this source code is governed by a BSD-style license that can
5418+// be found in the LICENSE file.
5419+
5420
5421 #include "libcef/browser/browser_host_base.h"
5422
5423+#include "cef/include/cef_parser.h"
5424 #include "libcef/browser/browser_info_manager.h"
5425 #include "libcef/browser/browser_platform_delegate.h"
5426 #include "libcef/browser/context.h"
5427 #include "libcef/browser/image_impl.h"
5428 #include "libcef/browser/navigation_entry_impl.h"
5429+#include "libcef/browser/permission/alloy_access_request.h"
5430+#include "libcef/browser/permission/alloy_geolocation_access.h"
5431 #include "libcef/browser/thread_util.h"
5432 #include "libcef/common/net/url_util.h"
5433
5434+#include "base/json/json_writer.h"
5435 #include "base/logging.h"
5436 #include "chrome/browser/spellchecker/spellcheck_factory.h"
5437 #include "chrome/browser/spellchecker/spellcheck_service.h"
5438+#include "components/embedder_support/user_agent_utils.h"
5439 #include "components/favicon/core/favicon_url.h"
5440 #include "components/spellcheck/common/spellcheck_features.h"
5441 #include "content/public/browser/browser_context.h"
5442@@ -27,6 +34,12 @@
5443 #include "components/spellcheck/browser/spellcheck_platform.h"
5444 #endif
5445
5446+#include "content/browser/web_contents/web_contents_impl.h"
5447+
5448+#if defined(OS_OHOS)
5449+#include "libcef/browser/javascript/oh_javascript_injector.h"
5450+#endif
5451+
5452 namespace {
5453
5454 // Associates a CefBrowserHostBase instance with a WebContents. This object will
5455@@ -67,6 +80,7 @@ class WebContentsUserDataAdapter : public base::SupportsUserData::Data {
5456
5457 }  // namespace
5458
5459+using namespace NWEB;
5460 // static
5461 CefRefPtr<CefBrowserHostBase> CefBrowserHostBase::GetBrowserForHost(
5462     const content::RenderViewHost* host) {
5463@@ -169,10 +183,12 @@ CefBrowserHostBase::CefBrowserHostBase(
5464   CEF_REQUIRE_UIT();
5465   DCHECK(!browser_info_->browser().get());
5466   browser_info_->SetBrowser(this);
5467-
5468   contents_delegate_ =
5469       std::make_unique<CefBrowserContentsDelegate>(browser_info_);
5470   contents_delegate_->AddObserver(this);
5471+  contents_delegate_->InitIconHelper();
5472+  permission_request_handler_.reset(new AlloyPermissionRequestHandler(
5473+      client_->GetPermissionRequest(), GetWebContents()));
5474 }
5475
5476 void CefBrowserHostBase::InitializeBrowser() {
5477@@ -181,6 +197,10 @@ void CefBrowserHostBase::InitializeBrowser() {
5478   // Associate the WebContents with this browser object.
5479   DCHECK(GetWebContents());
5480   WebContentsUserDataAdapter::Register(this);
5481+
5482+#if defined(OS_OHOS)
5483+  new OhJavascriptInjector(GetWebContents(), client_);
5484+#endif
5485 }
5486
5487 void CefBrowserHostBase::DestroyBrowser() {
5488@@ -197,6 +217,16 @@ void CefBrowserHostBase::DestroyBrowser() {
5489   browser_info_->SetBrowser(nullptr);
5490 }
5491
5492+void CefBrowserHostBase::PostTaskToUIThread(CefRefPtr<CefTask> task) {
5493+  if (!CEF_CURRENTLY_ON_UIT()) {
5494+    CEF_POST_TASK(
5495+        CEF_UIT,
5496+        base::BindOnce(&CefBrowserHostBase::PostTaskToUIThread, this, task));
5497+    return;
5498+  }
5499+  std::move(task)->Execute();
5500+}
5501+
5502 CefRefPtr<CefBrowser> CefBrowserHostBase::GetBrowser() {
5503   return this;
5504 }
5505@@ -397,6 +427,110 @@ CefRefPtr<CefNavigationEntry> CefBrowserHostBase::GetVisibleNavigationEntry() {
5506   return new CefNavigationEntryImpl(entry);
5507 }
5508
5509+#if defined(OS_OHOS)
5510+// copy settings string params
5511+#define SETTINGS_STRING_SET(src, target) \
5512+    cef_string_set(src.str, src.length, &target, true)
5513+
5514+void CefBrowserHostBase::UpdateBrowserSettings(
5515+    const CefBrowserSettings& browser_settings) {
5516+  /* font family */
5517+  SETTINGS_STRING_SET(browser_settings.standard_font_family, settings_.standard_font_family);
5518+  SETTINGS_STRING_SET(browser_settings.fixed_font_family, settings_.fixed_font_family);
5519+  SETTINGS_STRING_SET(browser_settings.serif_font_family, settings_.serif_font_family);
5520+  SETTINGS_STRING_SET(browser_settings.sans_serif_font_family, settings_.sans_serif_font_family);
5521+  SETTINGS_STRING_SET(browser_settings.cursive_font_family, settings_.cursive_font_family);
5522+  SETTINGS_STRING_SET(browser_settings.fantasy_font_family, settings_.fantasy_font_family);
5523+
5524+  /* font size*/
5525+  settings_.default_font_size = browser_settings.default_font_size;
5526+  settings_.default_fixed_font_size = browser_settings.default_fixed_font_size;
5527+  settings_.minimum_font_size = browser_settings.minimum_font_size;
5528+  settings_.minimum_logical_font_size =
5529+      browser_settings.minimum_logical_font_size;
5530+  SETTINGS_STRING_SET(browser_settings.default_encoding, settings_.default_encoding);
5531+  settings_.javascript = browser_settings.javascript;
5532+  settings_.image_loading = browser_settings.image_loading;
5533+  settings_.local_storage = browser_settings.local_storage;
5534+  settings_.databases = browser_settings.databases;
5535+  settings_.universal_access_from_file_urls =
5536+      browser_settings.universal_access_from_file_urls;
5537+  settings_.file_access_from_file_urls =
5538+      browser_settings.file_access_from_file_urls;
5539+  /* ohos webview add*/
5540+  settings_.force_dark_mode_enabled = browser_settings.force_dark_mode_enabled;
5541+  settings_.javascript_can_open_windows_automatically =
5542+      browser_settings.javascript_can_open_windows_automatically;
5543+  settings_.loads_images_automatically =
5544+      browser_settings.loads_images_automatically;
5545+  settings_.text_size_percent = browser_settings.text_size_percent;
5546+  settings_.mixed_content_mode = browser_settings.mixed_content_mode;
5547+  settings_.allow_running_insecure_content =
5548+      browser_settings.allow_running_insecure_content;
5549+  settings_.strict_mixed_content_checking =
5550+      browser_settings.strict_mixed_content_checking;
5551+  settings_.allow_mixed_content_upgrades =
5552+      browser_settings.allow_mixed_content_upgrades;
5553+  settings_.geolocation_enabled = browser_settings.geolocation_enabled;
5554+  settings_.supports_double_tap_zoom =
5555+      browser_settings.supports_double_tap_zoom;
5556+  settings_.supports_multi_touch_zoom =
5557+      browser_settings.supports_multi_touch_zoom;
5558+}
5559+
5560+void CefBrowserHostBase::SetWebPreferences(
5561+    const CefBrowserSettings& browser_settings) {
5562+  UpdateBrowserSettings(browser_settings);
5563+  GetWebContents()->OnWebPreferencesChanged();
5564+}
5565+
5566+void CefBrowserHostBase::OnWebPreferencesChanged() {
5567+  GetWebContents()->OnWebPreferencesChanged();
5568+}
5569+
5570+void CefBrowserHostBase::PutUserAgent(const CefString& ua) {
5571+  if (!GetWebContents()) {
5572+    return;
5573+  }
5574+
5575+  GetWebContents()->SetUserAgentOverride(
5576+      blink::UserAgentOverride::UserAgentOnly(ua), true);
5577+
5578+  content::NavigationController& controller = GetWebContents()->GetController();
5579+  for (int i = 0; i < controller.GetEntryCount(); ++i) {
5580+    controller.GetEntryAtIndex(i)->SetIsOverridingUserAgent(true);
5581+  }
5582+}
5583+
5584+CefString CefBrowserHostBase::DefaultUserAgent() {
5585+  return embedder_support::GetUserAgent();
5586+}
5587+
5588+void CefBrowserHostBase::RegisterArkJSfunction(
5589+    const CefString& object_name,
5590+    const std::vector<CefString>& method_list) {
5591+  OhJavascriptInjector* javascriptInjector =
5592+      OhJavascriptInjector::FromWebContents(GetWebContents());
5593+  std::vector<std::string> method_vector;
5594+  for (CefString method : method_list) {
5595+    method_vector.push_back(method.ToString());
5596+  }
5597+  javascriptInjector->AddInterface(object_name.ToString(), method_vector);
5598+}
5599+
5600+void CefBrowserHostBase::UnregisterArkJSfunction(
5601+    const CefString& object_name,
5602+    const std::vector<CefString>& method_list) {
5603+  OhJavascriptInjector* javascriptInjector =
5604+      OhJavascriptInjector::FromWebContents(GetWebContents());
5605+  std::vector<std::string> method_vector;
5606+  for (CefString method : method_list) {
5607+    method_vector.push_back(method.ToString());
5608+  }
5609+  javascriptInjector->RemoveInterface(object_name.ToString(), method_vector);
5610+}
5611+#endif
5612+
5613 void CefBrowserHostBase::ReplaceMisspelling(const CefString& word) {
5614   if (!CEF_CURRENTLY_ON_UIT()) {
5615     CEF_POST_TASK(
5616@@ -545,6 +679,17 @@ void CefBrowserHostBase::GoForward() {
5617   }
5618 }
5619
5620+bool CefBrowserHostBase::CanGoBackOrForward(int num_steps) {
5621+  auto wc = GetWebContents();
5622+  LOG(INFO) << "CanGoBackOrForward";
5623+  if (wc != nullptr) {
5624+    LOG(INFO) << "CanGoBackOrForward:"
5625+              << wc->GetController().CanGoToOffset(num_steps);
5626+    return wc->GetController().CanGoToOffset(num_steps);
5627+  }
5628+  return false;
5629+}
5630+
5631 bool CefBrowserHostBase::IsLoading() {
5632   base::AutoLock lock_scope(state_lock_);
5633   return is_loading_;
5634@@ -711,6 +856,131 @@ void CefBrowserHostBase::OnStateChanged(CefBrowserContentsState state_changed) {
5635 void CefBrowserHostBase::OnWebContentsDestroyed(
5636     content::WebContents* web_contents) {}
5637
5638+CefRefPtr<CefBrowserPermissionRequestDelegate>
5639+CefBrowserHostBase::GetPermissionRequestDelegate() {
5640+  return this;
5641+}
5642+
5643+CefRefPtr<CefGeolocationAcess> CefBrowserHostBase::GetGeolocationPermissions() {
5644+  if (geolocation_permissions_ == nullptr) {
5645+    geolocation_permissions_ = new AlloyGeolocationAccess();
5646+  }
5647+  return geolocation_permissions_;
5648+}
5649+
5650+bool CefBrowserHostBase::UseLegacyGeolocationPermissionAPI() {
5651+  return true;
5652+}
5653+
5654+void CefBrowserHostBase::AskGeolocationPermission(
5655+    const CefString& origin,
5656+    cef_permission_callback_t callback) {
5657+  if (UseLegacyGeolocationPermissionAPI()) {
5658+    PopupGeolocationPrompt(origin, std::move(callback));
5659+    return;
5660+  }
5661+  permission_request_handler_->SendRequest(new AlloyAccessRequest(
5662+      origin, AlloyAccessRequest::Resources::GEOLOCATION, std::move(callback)));
5663+}
5664+
5665+void CefBrowserHostBase::AbortAskGeolocationPermission(
5666+    const CefString& origin) {
5667+  RemoveGeolocationPrompt(origin);
5668+  return;
5669+}
5670+
5671+void CefBrowserHostBase::PopupGeolocationPrompt(
5672+    std::string origin,
5673+    cef_permission_callback_t callback) {
5674+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
5675+  bool show_prompt = unhandled_geolocation_prompts_.empty();
5676+  unhandled_geolocation_prompts_.emplace_back(origin, std::move(callback));
5677+  if (show_prompt) {
5678+    OnGeolocationShow(origin);
5679+  }
5680+}
5681+
5682+void CefBrowserHostBase::OnGeolocationShow(std::string origin) {
5683+  // Reject if geoloaction is disabled, or the origin has a retained deny
5684+  if (!settings_.geolocation_enabled) {
5685+    NotifyGeolocationPermission(false, origin);
5686+    return;
5687+  }
5688+
5689+  auto permissions = GetGeolocationPermissions();
5690+  if (permissions->ContainOrigin(origin)) {
5691+    NotifyGeolocationPermission(permissions->IsOriginAccessEnabled(origin),
5692+                                origin);
5693+    return;
5694+  }
5695+
5696+  GetClient()->GetPermissionRequest()->OnGeolocationShow(origin);
5697+}
5698+
5699+void CefBrowserHostBase::NotifyGeolocationPermission(bool value,
5700+                                                     const CefString& origin) {
5701+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
5702+  if (unhandled_geolocation_prompts_.empty())
5703+    return;
5704+  if (origin == unhandled_geolocation_prompts_.front().first) {
5705+    std::move(unhandled_geolocation_prompts_.front().second).Run(value);
5706+    unhandled_geolocation_prompts_.pop_front();
5707+    if (!unhandled_geolocation_prompts_.empty()) {
5708+      OnGeolocationShow(unhandled_geolocation_prompts_.front().first);
5709+    }
5710+  }
5711+}
5712+
5713+void CefBrowserHostBase::RemoveGeolocationPrompt(std::string origin) {
5714+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
5715+  bool removed_current_outstanding_callback = false;
5716+  std::list<OriginCallback>::iterator it =
5717+      unhandled_geolocation_prompts_.begin();
5718+  while (it != unhandled_geolocation_prompts_.end()) {
5719+    if ((*it).first == origin) {
5720+      if (it == unhandled_geolocation_prompts_.begin()) {
5721+        removed_current_outstanding_callback = true;
5722+      }
5723+      it = unhandled_geolocation_prompts_.erase(it);
5724+    } else {
5725+      ++it;
5726+    }
5727+  }
5728+
5729+  if (removed_current_outstanding_callback) {
5730+    GetClient()->GetPermissionRequest()->OnGeolocationHide();
5731+    if (!unhandled_geolocation_prompts_.empty()) {
5732+      OnGeolocationShow(unhandled_geolocation_prompts_.front().first);
5733+    }
5734+  }
5735+}
5736+
5737+void CefBrowserHostBase::AskProtectedMediaIdentifierPermission(
5738+    const CefString& origin,
5739+    cef_permission_callback_t callback) {
5740+  permission_request_handler_->SendRequest(new AlloyAccessRequest(
5741+      origin, AlloyAccessRequest::Resources::PROTECTED_MEDIA_ID,
5742+      std::move(callback)));
5743+}
5744+
5745+void CefBrowserHostBase::AbortAskProtectedMediaIdentifierPermission(
5746+    const CefString& origin) {
5747+  permission_request_handler_->CancelRequest(
5748+      origin, AlloyAccessRequest::Resources::PROTECTED_MEDIA_ID);
5749+}
5750+
5751+void CefBrowserHostBase::AskMIDISysexPermission(
5752+    const CefString& origin,
5753+    cef_permission_callback_t callback) {
5754+  permission_request_handler_->SendRequest(new AlloyAccessRequest(
5755+      origin, AlloyAccessRequest::Resources::MIDI_SYSEX, std::move(callback)));
5756+}
5757+
5758+void CefBrowserHostBase::AbortAskMIDISysexPermission(const CefString& origin) {
5759+  permission_request_handler_->CancelRequest(
5760+      origin, AlloyAccessRequest::Resources::MIDI_SYSEX);
5761+}
5762+
5763 CefRefPtr<CefFrame> CefBrowserHostBase::GetFrameForHost(
5764     const content::RenderFrameHost* host) {
5765   CEF_REQUIRE_UIT();
5766@@ -781,6 +1051,11 @@ void CefBrowserHostBase::OnDidFinishLoad(CefRefPtr<CefFrameHostImpl> frame,
5767   contents_delegate_->OnLoadEnd(frame, validated_url, http_status_code);
5768 }
5769
5770+void CefBrowserHostBase::OnUpdateHitData(const int type, const CefString extra_data) {
5771+  cef_hit_data_.type = type;
5772+  cef_hit_data_.extra_data = extra_data;
5773+}
5774+
5775 void CefBrowserHostBase::ViewText(const std::string& text) {
5776   if (!CEF_CURRENTLY_ON_UIT()) {
5777     CEF_POST_TASK(CEF_UIT,
5778@@ -850,7 +1125,7 @@ content::BrowserContext* CefBrowserHostBase::GetBrowserContext() const {
5779   return nullptr;
5780 }
5781
5782-#if defined(TOOLKIT_VIEWS)
5783+#if defined(TOOLKIT_VIEWS) || defined(OS_OHOS)
5784 views::Widget* CefBrowserHostBase::GetWindowWidget() const {
5785   CEF_REQUIRE_UIT();
5786   if (!platform_delegate_)
5787@@ -892,3 +1167,126 @@ void CefBrowserHostBase::InitializeDevToolsRegistrationOnUIThread(
5788     return;
5789   devtools_manager_->InitializeRegistrationOnUIThread(registration);
5790 }
5791+
5792+CefString CefBrowserHostBase::Title() {
5793+  auto web_contents = GetWebContents();
5794+  if (web_contents) {
5795+    return web_contents->GetTitle();
5796+  }
5797+  return "";
5798+}
5799+
5800+void CefBrowserHostBase::GetHitData(int& type, CefString& extra_data) {
5801+  type = cef_hit_data_.type;
5802+  extra_data = cef_hit_data_.extra_data;
5803+}
5804+
5805+float CefBrowserHostBase::Scale() {
5806+  auto web_contents = GetWebContents();
5807+  if (web_contents) {
5808+    return static_cast<content::WebContentsImpl*>(web_contents)
5809+        ->page_scale_factor();
5810+  }
5811+  return 1.0;
5812+}
5813+
5814+bool CefBrowserHostBase::IsBase64Encoded(std::string encoding) {
5815+  return "base64" == encoding;
5816+}
5817+
5818+std::string CefBrowserHostBase::GetDataURI(const std::string& data) {
5819+  return CefURIEncode(CefBase64Encode(data.data(), data.size()), false)
5820+      .ToString();
5821+}
5822+
5823+int CefBrowserHostBase::PageLoadProgress() {
5824+  auto web_contents = GetWebContents();
5825+  if (web_contents) {
5826+    if (!web_contents->IsLoading()) {
5827+      return 100;
5828+    }
5829+    return round(100 * web_contents->GetLoadProgress());
5830+  }
5831+  return 0;
5832+}
5833+
5834+void CefBrowserHostBase::LoadWithDataAndBaseUrl(const CefString& baseUrl,
5835+                                                const CefString& data,
5836+                                                const CefString& mimeType,
5837+                                                const CefString& encoding,
5838+                                                const CefString& historyUrl) {
5839+  std::string dataBase = data.empty() ? "" : data;
5840+  std::string mimeTypeBase = mimeType.empty() ? "text/html" : mimeType;
5841+  std::string url = baseUrl.empty() ? "about:blank" : baseUrl;
5842+  std::string historyUrlBase = historyUrl.empty() ? "about:blank" : historyUrl;
5843+
5844+  std::string buildData = "data:";
5845+  buildData.append(mimeTypeBase);
5846+  if (!encoding.empty()) {
5847+    buildData.append(";charset=");
5848+    buildData.append(encoding);
5849+  }
5850+  buildData.append(";base64");
5851+  buildData.append(",");
5852+  dataBase = GetDataURI(dataBase);
5853+  buildData.append(dataBase);
5854+  GURL data_url = GURL(buildData);
5855+  content::NavigationController::LoadURLParams loadUrlParams(data_url);
5856+
5857+  if (!(url.find("data:") == 0)) {
5858+    loadUrlParams.virtual_url_for_data_url = GURL(historyUrlBase);
5859+    loadUrlParams.base_url_for_data_url = GURL(url);
5860+  }
5861+
5862+  auto web_contents = GetWebContents();
5863+  if (web_contents) {
5864+    web_contents->GetController().LoadURLWithParams(loadUrlParams);
5865+  }
5866+}
5867+
5868+void CefBrowserHostBase::LoadWithData(const CefString& data,
5869+                                      const CefString& mimeType,
5870+                                      const CefString& encoding) {
5871+  std::string dataBase = data.empty() ? "" : data;
5872+  std::string mimeTypeBase = mimeType.empty() ? "text/html" : mimeType;
5873+
5874+  std::string buildData = "data:";
5875+  buildData.append(mimeTypeBase);
5876+  if (encoding.ToString() == "base64") {
5877+    buildData.append(";base64");
5878+  }
5879+  buildData.append(",");
5880+  buildData.append(dataBase);
5881+  GURL data_url = GURL(buildData);
5882+  content::NavigationController::LoadURLParams loadUrlParams(data_url);
5883+
5884+  auto web_contents = GetWebContents();
5885+  if (web_contents) {
5886+    LOG(INFO) << "load data";
5887+    web_contents->GetController().LoadURLWithParams(loadUrlParams);
5888+  }
5889+}
5890+
5891+void CefBrowserHostBase::ExecuteJavaScript(
5892+    const CefString& code,
5893+    CefRefPtr<CefJavaScriptResultCallback> callback) {
5894+  auto web_contents = GetWebContents();
5895+  // enable inject javaScript
5896+  web_contents->GetMainFrame()->AllowInjectingJavaScript();
5897+  if (web_contents) {
5898+    LOG(INFO) << "ExecuteJavaScript with callback";
5899+    web_contents->GetMainFrame()->ExecuteJavaScript(
5900+        code.ToString16(),
5901+        base::BindOnce(
5902+            [](CefRefPtr<CefJavaScriptResultCallback> callback,
5903+               base::Value result) {
5904+              LOG(INFO) << "javascript result callback enter";
5905+              std::string json;
5906+              base::JSONWriter::Write(result, &json);
5907+              if (callback != nullptr) {
5908+                callback->OnJavaScriptExeResult(json);
5909+              }
5910+            },
5911+            callback));
5912+  }
5913+}
5914\ No newline at end of file
5915diff --git a/cef/libcef/browser/browser_host_base.h b/cef/libcef/browser/browser_host_base.h
5916index d30f0b43d0..dc9f9be31f 100644
5917--- a/cef/libcef/browser/browser_host_base.h
5918+++ b/cef/libcef/browser/browser_host_base.h
5919@@ -1,6 +1,7 @@
5920-// Copyright 2020 The Chromium Embedded Framework Authors. All rights reserved.
5921-// Use of this source code is governed by a BSD-style license that can be
5922-// found in the LICENSE file.
5923+// Copyright (c) 2022 Huawei Device Co., Ltd.
5924+// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
5925+// reserved. Use of this source code is governed by a BSD-style license that can
5926+// be found in the LICENSE file.
5927
5928 #ifndef CEF_LIBCEF_BROWSER_BROWSER_HOST_BASE_H_
5929 #define CEF_LIBCEF_BROWSER_BROWSER_HOST_BASE_H_
5930@@ -8,12 +9,15 @@
5931
5932 #include "include/cef_browser.h"
5933 #include "include/cef_client.h"
5934+#include "include/cef_permission_request.h"
5935+#include "include/cef_task.h"
5936 #include "include/views/cef_browser_view.h"
5937 #include "libcef/browser/browser_contents_delegate.h"
5938 #include "libcef/browser/browser_info.h"
5939 #include "libcef/browser/browser_platform_delegate.h"
5940 #include "libcef/browser/devtools/devtools_manager.h"
5941 #include "libcef/browser/frame_host_impl.h"
5942+#include "libcef/browser/permission/alloy_permission_request_handler.h"
5943 #include "libcef/browser/request_context_impl.h"
5944
5945 #include "base/observer_list.h"
5946@@ -24,6 +28,8 @@ namespace extensions {
5947 class Extension;
5948 }
5949
5950+class AlloyPermissionRequestHandler;
5951+
5952 // Parameters that are passed to the runtime-specific Create methods.
5953 struct CefBrowserCreateParams {
5954   CefBrowserCreateParams() {}
5955@@ -90,12 +96,18 @@ struct CefBrowserCreateParams {
5956       extensions::mojom::ViewType::kInvalid;
5957 };
5958
5959+struct CefHitData {
5960+  int type;
5961+  CefString extra_data;
5962+};
5963+
5964 // Base class for CefBrowserHost implementations. Includes functionality that is
5965 // shared by the alloy and chrome runtimes. All methods are thread-safe unless
5966 // otherwise indicated.
5967 class CefBrowserHostBase : public CefBrowserHost,
5968                            public CefBrowser,
5969-                           public CefBrowserContentsDelegate::Observer {
5970+                           public CefBrowserContentsDelegate::Observer,
5971+                           public CefBrowserPermissionRequestDelegate {
5972  public:
5973   // Interface to implement for observers that wish to be informed of changes
5974   // to the CefBrowserHostBase. All methods will be called on the UI thread.
5975@@ -150,6 +162,8 @@ class CefBrowserHostBase : public CefBrowserHost,
5976   // was not properly shut down.
5977   virtual void DestroyBrowser();
5978
5979+  void PostTaskToUIThread(CefRefPtr<CefTask> task) override;
5980+
5981   // CefBrowserHost methods:
5982   CefRefPtr<CefBrowser> GetBrowser() override;
5983   CefRefPtr<CefClient> GetClient() override;
5984@@ -182,12 +196,29 @@ class CefBrowserHostBase : public CefBrowserHost,
5985                             bool current_only) override;
5986   CefRefPtr<CefNavigationEntry> GetVisibleNavigationEntry() override;
5987
5988+#if defined(OS_OHOS)
5989+  /* ohos webview begin */
5990+  void SetWebPreferences(const CefBrowserSettings& browser_settings) override;
5991+  void PutUserAgent(const CefString& ua) override;
5992+  CefString DefaultUserAgent() override;
5993+  void UpdateBrowserSettings(const CefBrowserSettings& browser_settings);
5994+  void RegisterArkJSfunction(
5995+      const CefString& object_name,
5996+      const std::vector<CefString>& method_list) override;
5997+  void UnregisterArkJSfunction(
5998+      const CefString& object_name,
5999+      const std::vector<CefString>& method_list) override;
6000+  void OnWebPreferencesChanged();
6001+  /* ohos webview end */
6002+#endif
6003+
6004   // CefBrowser methods:
6005   CefRefPtr<CefBrowserHost> GetHost() override;
6006   bool CanGoBack() override;
6007   void GoBack() override;
6008   bool CanGoForward() override;
6009   void GoForward() override;
6010+  bool CanGoBackOrForward(int num_steps) override;
6011   bool IsLoading() override;
6012   void Reload() override;
6013   void ReloadIgnoreCache() override;
6014@@ -203,11 +234,54 @@ class CefBrowserHostBase : public CefBrowserHost,
6015   size_t GetFrameCount() override;
6016   void GetFrameIdentifiers(std::vector<int64>& identifiers) override;
6017   void GetFrameNames(std::vector<CefString>& names) override;
6018-
6019+  CefRefPtr<CefBrowserPermissionRequestDelegate> GetPermissionRequestDelegate()
6020+      override;
6021+  CefRefPtr<CefGeolocationAcess> GetGeolocationPermissions() override;
6022+  CefString Title() override;
6023+  void GetHitData(int& type, CefString& extra_data) override;
6024+  int PageLoadProgress() override;
6025+  float Scale() override;
6026+  void LoadWithDataAndBaseUrl(const CefString& baseUrl,
6027+                              const CefString& data,
6028+                              const CefString& mimeType,
6029+                              const CefString& encoding,
6030+                              const CefString& historyUrl) override;
6031+
6032+  void LoadWithData(const CefString& data,
6033+                    const CefString& mimeType,
6034+                    const CefString& encoding) override;
6035+
6036+  void ExecuteJavaScript(
6037+      const CefString& code,
6038+      CefRefPtr<CefJavaScriptResultCallback> callback) override;
6039   // CefBrowserContentsDelegate::Observer methods:
6040   void OnStateChanged(CefBrowserContentsState state_changed) override;
6041   void OnWebContentsDestroyed(content::WebContents* web_contents) override;
6042
6043+  AlloyPermissionRequestHandler* GetPermissionRequestHandler() {
6044+    return permission_request_handler_.get();
6045+  }
6046+
6047+  // CefBrowserPermissionRequestDelegate methods:
6048+  void AskGeolocationPermission(const CefString& origin,
6049+                                cef_permission_callback_t callback) override;
6050+  void AbortAskGeolocationPermission(const CefString& origin) override;
6051+  void NotifyGeolocationPermission(bool value,
6052+                                   const CefString& origin) override;
6053+  void AskProtectedMediaIdentifierPermission(
6054+      const CefString& origin,
6055+      cef_permission_callback_t callback) override;
6056+  void AbortAskProtectedMediaIdentifierPermission(const CefString& origin) override;
6057+  void AskMIDISysexPermission(const CefString& origin,
6058+                              cef_permission_callback_t callback) override;
6059+  void AbortAskMIDISysexPermission(const CefString& origin) override;
6060+
6061+  // Geolocation API support
6062+  void PopupGeolocationPrompt(std::string origin,
6063+                              cef_permission_callback_t callback);
6064+  void RemoveGeolocationPrompt(std::string origin);
6065+  void OnGeolocationShow(std::string origin);
6066+
6067   // Returns the frame associated with the specified RenderFrameHost.
6068   CefRefPtr<CefFrame> GetFrameForHost(const content::RenderFrameHost* host);
6069
6070@@ -225,6 +299,7 @@ class CefBrowserHostBase : public CefBrowserHost,
6071   void OnDidFinishLoad(CefRefPtr<CefFrameHostImpl> frame,
6072                        const GURL& validated_url,
6073                        int http_status_code);
6074+  void OnUpdateHitData(const int type, const CefString extra_data);
6075   virtual void OnSetFocus(cef_focus_source_t source) = 0;
6076   void ViewText(const std::string& text);
6077
6078@@ -238,6 +313,9 @@ class CefBrowserHostBase : public CefBrowserHost,
6079   void OnBeforeClose();
6080   void OnBrowserDestroyed();
6081
6082+  bool IsBase64Encoded(std::string encoding);
6083+  std::string GetDataURI(const std::string& data);
6084+
6085   // Thread-safe accessors.
6086   const CefBrowserSettings& settings() const { return settings_; }
6087   CefRefPtr<CefClient> client() const { return client_; }
6088@@ -309,6 +387,18 @@ class CefBrowserHostBase : public CefBrowserHost,
6089   std::unique_ptr<CefDevToolsManager> devtools_manager_;
6090
6091  private:
6092+  bool UseLegacyGeolocationPermissionAPI();
6093+  // GURL is supplied by the content layer as requesting frame.
6094+  // Callback is supplied by the content layer, and is invoked with the result
6095+  // from the permission prompt.
6096+  typedef std::pair<std::string, cef_permission_callback_t> OriginCallback;
6097+  // The first element in the list is always the currently pending request.
6098+  std::list<OriginCallback> unhandled_geolocation_prompts_;
6099+
6100+  CefHitData cef_hit_data_;
6101+  CefRefPtr<CefGeolocationAcess> geolocation_permissions_;
6102+  std::unique_ptr<AlloyPermissionRequestHandler> permission_request_handler_;
6103+
6104   IMPLEMENT_REFCOUNTING(CefBrowserHostBase);
6105   DISALLOW_COPY_AND_ASSIGN(CefBrowserHostBase);
6106 };
6107diff --git a/cef/libcef/browser/browser_host_create.cc b/cef/libcef/browser/browser_host_create.cc
6108index 10a3a4e256..21742d9599 100644
6109--- a/cef/libcef/browser/browser_host_create.cc
6110+++ b/cef/libcef/browser/browser_host_create.cc
6111@@ -82,20 +82,7 @@ bool CefBrowserHost::CreateBrowser(
6112
6113   auto helper = std::make_unique<CreateBrowserHelper>(
6114       windowInfo, client, url, settings, extra_info, request_context);
6115-
6116-  auto request_context_impl =
6117-      static_cast<CefRequestContextImpl*>(request_context.get());
6118-
6119-  // Wait for the browser context to be initialized before creating the browser.
6120-  request_context_impl->ExecuteWhenBrowserContextInitialized(base::BindOnce(
6121-      [](std::unique_ptr<CreateBrowserHelper> helper) {
6122-        // Always execute asynchronously to avoid potential issues if we're
6123-        // being called synchronously during app initialization.
6124-        CEF_POST_TASK(CEF_UIT, base::BindOnce(&CreateBrowserHelper::Run,
6125-                                              std::move(helper)));
6126-      },
6127-      std::move(helper)));
6128-
6129+  helper->Run();
6130   return true;
6131 }
6132
6133diff --git a/cef/libcef/browser/chrome/chrome_browser_host_impl.cc b/cef/libcef/browser/chrome/chrome_browser_host_impl.cc
6134index 76b5da71d9..5c8bd8fc17 100644
6135--- a/cef/libcef/browser/chrome/chrome_browser_host_impl.cc
6136+++ b/cef/libcef/browser/chrome/chrome_browser_host_impl.cc
6137@@ -593,3 +593,5 @@ int ChromeBrowserHostImpl::GetCurrentTabIndex() const {
6138   }
6139   return TabStripModel::kNoTab;
6140 }
6141+
6142+void ChromeBrowserHostImpl::SetBackgroundColor(int color) {}
6143\ No newline at end of file
6144diff --git a/cef/libcef/browser/chrome/chrome_browser_host_impl.h b/cef/libcef/browser/chrome/chrome_browser_host_impl.h
6145index c15352b307..c73499622c 100644
6146--- a/cef/libcef/browser/chrome/chrome_browser_host_impl.h
6147+++ b/cef/libcef/browser/chrome/chrome_browser_host_impl.h
6148@@ -129,6 +129,9 @@ class ChromeBrowserHostImpl : public CefBrowserHostBase {
6149   CefRefPtr<CefExtension> GetExtension() override;
6150   bool IsBackgroundHost() override;
6151
6152+  /* ohos webview begin */
6153+  void SetBackgroundColor(int color) override;
6154+  /* ohos webview end */
6155  protected:
6156   bool Navigate(const content::OpenURLParams& params) override;
6157
6158diff --git a/cef/libcef/browser/context.cc b/cef/libcef/browser/context.cc
6159index 687e4b8df2..39b20a59ae 100644
6160--- a/cef/libcef/browser/context.cc
6161+++ b/cef/libcef/browser/context.cc
6162@@ -406,6 +406,7 @@ SkColor CefContext::GetBackgroundColor(
6163       !GetColor(browser_settings->background_color, is_windowless, &sk_color)) {
6164     GetColor(settings_.background_color, is_windowless, &sk_color);
6165   }
6166+
6167   return sk_color;
6168 }
6169
6170diff --git a/cef/libcef/browser/frame_host_impl.cc b/cef/libcef/browser/frame_host_impl.cc
6171index 1daae18d75..4234984399 100644
6172--- a/cef/libcef/browser/frame_host_impl.cc
6173+++ b/cef/libcef/browser/frame_host_impl.cc
6174@@ -1,3 +1,4 @@
6175+// Copyright (c) 2022 Huawei Device Co., Ltd.
6176 // Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
6177 // reserved. Use of this source code is governed by a BSD-style license that can
6178 // be found in the LICENSE file.
6179@@ -169,6 +170,10 @@ void CefFrameHostImpl::LoadURL(const CefString& url) {
6180                     std::string());
6181 }
6182
6183+void CefFrameHostImpl::LoadHeaderUrl(const CefString& url, const CefString& additionalHttpHeaders) {
6184+  LoadURLWithExtras(url, content::Referrer(), kPageTransitionExplicit, additionalHttpHeaders);
6185+}
6186+
6187 void CefFrameHostImpl::ExecuteJavaScript(const CefString& jsCode,
6188                                          const CefString& scriptUrl,
6189                                          int startLine) {
6190@@ -303,6 +308,15 @@ void CefFrameHostImpl::RefreshAttributes() {
6191     parent_frame_id_ = MakeFrameId(render_frame_host_->GetParent());
6192 }
6193
6194+void CefFrameHostImpl::SendTouchEvent(const CefTouchEvent& event) {
6195+  Cef_TouchEvent_Params touchEvent;
6196+  touchEvent.x = event.x;
6197+  touchEvent.y = event.y;
6198+  touchEvent.width = event.radius_x;
6199+  touchEvent.height = event.radius_y;
6200+  Send(new CefMsg_TouchEvent(MSG_ROUTING_NONE, touchEvent));
6201+}
6202+
6203 void CefFrameHostImpl::NotifyMoveOrResizeStarted() {
6204   Send(new CefMsg_MoveOrResizeStarted(MSG_ROUTING_NONE));
6205 }
6206@@ -486,6 +500,7 @@ bool CefFrameHostImpl::OnMessageReceived(const IPC::Message& message) {
6207   IPC_BEGIN_MESSAGE_MAP(CefFrameHostImpl, message)
6208     IPC_MESSAGE_HANDLER(CefHostMsg_FrameAttached, OnAttached)
6209     IPC_MESSAGE_HANDLER(CefHostMsg_DidFinishLoad, OnDidFinishLoad)
6210+    IPC_MESSAGE_HANDLER(CefHostMsg_HitData, OnUpdateHitData)
6211     IPC_MESSAGE_HANDLER(CefHostMsg_UpdateDraggableRegions,
6212                         OnUpdateDraggableRegions)
6213     IPC_MESSAGE_HANDLER(CefHostMsg_Request, OnRequest)
6214@@ -588,6 +603,12 @@ void CefFrameHostImpl::OnDidFinishLoad(const GURL& validated_url,
6215     browser->OnDidFinishLoad(this, validated_url, http_status_code);
6216 }
6217
6218+void CefFrameHostImpl::OnUpdateHitData(const Cef_HitData_Params param) {
6219+  auto browser = GetBrowserHostBase();
6220+  if (browser)
6221+    browser->OnUpdateHitData(param.type, param.extra_data_for_type);
6222+}
6223+
6224 void CefFrameHostImpl::OnUpdateDraggableRegions(
6225     const std::vector<Cef_DraggableRegion_Params>& regions) {
6226   auto browser = GetBrowserHostBase();
6227@@ -657,6 +678,11 @@ void CefFrameHostImpl::OnResponse(const Cef_Response_Params& params) {
6228     Send(new CefMsg_ResponseAck(MSG_ROUTING_NONE, params.request_id));
6229 }
6230
6231+void CefFrameHostImpl::PutZoomingForTextFactor(float factor) {
6232+  CEF_REQUIRE_UIT();
6233+  Send(new CefMsg_PutZoomingForTextFactor(MSG_ROUTING_NONE, factor));
6234+}
6235+
6236 void CefFrameHostImpl::OnResponseAck(int request_id) {
6237   response_manager_->RunAckHandler(request_id);
6238 }
6239@@ -692,4 +718,4 @@ void CefExecuteJavaScriptWithUserGestureForTests(CefRefPtr<CefFrame> frame,
6240   CefFrameHostImpl* impl = static_cast<CefFrameHostImpl*>(frame.get());
6241   if (impl)
6242     impl->ExecuteJavaScriptWithUserGestureForTests(javascript);
6243-}
6244+}
6245\ No newline at end of file
6246diff --git a/cef/libcef/browser/frame_host_impl.h b/cef/libcef/browser/frame_host_impl.h
6247index 4d5167b403..df9fdbe0c4 100644
6248--- a/cef/libcef/browser/frame_host_impl.h
6249+++ b/cef/libcef/browser/frame_host_impl.h
6250@@ -1,3 +1,4 @@
6251+// Copyright (c) 2022 Huawei Device Co., Ltd.
6252 // Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
6253 // reserved. Use of this source code is governed by a BSD-style license that can
6254 // be found in the LICENSE file.
6255@@ -28,6 +29,8 @@ class Message;
6256 class GURL;
6257
6258 struct Cef_DraggableRegion_Params;
6259+struct Cef_TouchEvent_Params;
6260+struct Cef_HitData_Params;
6261 struct Cef_Request_Params;
6262 struct Cef_Response_Params;
6263 class CefBrowserInfo;
6264@@ -83,10 +86,14 @@ class CefFrameHostImpl : public CefFrame {
6265       CefRefPtr<CefURLRequestClient> client) override;
6266   void SendProcessMessage(CefProcessId target_process,
6267                           CefRefPtr<CefProcessMessage> message) override;
6268+  void LoadHeaderUrl(const CefString& url, const CefString& additionalHttpHeaders) override;
6269
6270   void SetFocused(bool focused);
6271   void RefreshAttributes();
6272
6273+  // Send the touch point to the rederer to get hitdata.
6274+  void SendTouchEvent(const CefTouchEvent& event);
6275+
6276   // Notification that a move or resize of the renderer's containing window has
6277   // started. Used on Windows and Linux with the Alloy runtime.
6278   void NotifyMoveOrResizeStarted();
6279@@ -115,6 +122,10 @@ class CefFrameHostImpl : public CefFrame {
6280   void SendJavaScript(const std::string& jsCode,
6281                       const std::string& scriptUrl,
6282                       int startLine);
6283+
6284+  // Sets the zoom factor for text only. Used in layout modes other than
6285+  // Text Autosizing.
6286+  void PutZoomingForTextFactor(float factor);
6287
6288   // Called from CefBrowserHostBase::DidStopLoading.
6289   void MaybeSendDidStopLoading();
6290@@ -154,6 +165,7 @@ class CefFrameHostImpl : public CefFrame {
6291   // OnMessageReceived message handlers.
6292   void OnAttached();
6293   void OnDidFinishLoad(const GURL& validated_url, int http_status_code);
6294+  void OnUpdateHitData(const Cef_HitData_Params param);
6295   void OnUpdateDraggableRegions(
6296       const std::vector<Cef_DraggableRegion_Params>& regions);
6297   void OnRequest(const Cef_Request_Params& params);
6298diff --git a/cef/libcef/browser/icon_helper.cc b/cef/libcef/browser/icon_helper.cc
6299new file mode 100644
6300index 0000000000..beb0a12469
6301--- /dev/null
6302+++ b/cef/libcef/browser/icon_helper.cc
6303@@ -0,0 +1,150 @@
6304+// Copyright (c) 2022 Huawei Device Co., Ltd.
6305+// Copyright 2018 The Chromium Authors. All rights reserved.
6306+// Use of this source code is governed by a BSD-style license that can be
6307+// found in the LICENSE file.
6308+
6309+#include "libcef/browser/icon_helper.h"
6310+
6311+#include "include/cef_display_handler.h"
6312+
6313+#include "base/logging.h"
6314+#include "components/favicon_base/select_favicon_frames.h"
6315+#include "content/public/browser/web_contents.h"
6316+
6317+namespace {
6318+
6319+constexpr int LARGEST_ICON_SIZE = 192;
6320+
6321+cef_color_type_t TransformSkColorType(SkColorType color_type) {
6322+  switch (color_type) {
6323+    case kRGBA_8888_SkColorType:
6324+      return CEF_COLOR_TYPE_RGBA_8888;
6325+    case kBGRA_8888_SkColorType:
6326+      return CEF_COLOR_TYPE_BGRA_8888;
6327+    default:
6328+      return CEF_COLOR_TYPE_UNKNOWN;
6329+  }
6330+}
6331+
6332+cef_alpha_type_t TransformSkAlphaType(SkAlphaType alpha_type) {
6333+  switch (alpha_type) {
6334+    case kOpaque_SkAlphaType:
6335+      return CEF_ALPHA_TYPE_OPAQUE;
6336+    case kPremul_SkAlphaType:
6337+      return CEF_ALPHA_TYPE_PREMULTIPLIED;
6338+    case kUnpremul_SkAlphaType:
6339+      return CEF_ALPHA_TYPE_POSTMULTIPLIED;
6340+    default:
6341+      return CEF_ALPHA_TYPE_UNKNOWN;
6342+  }
6343+}
6344+
6345+}  // namespace
6346+
6347+void IconHelper::SetDisplayHandler(const CefRefPtr<CefDisplayHandler>& handler) {
6348+  handler_ = handler;
6349+}
6350+
6351+void IconHelper::SetBrowser(const CefRefPtr<CefBrowser>& browser) {
6352+  browser_ = browser;
6353+}
6354+
6355+void IconHelper::SetWebContents(content::WebContents* new_contents) {
6356+  web_contents_ = new_contents;
6357+}
6358+
6359+void IconHelper::OnUpdateFaviconURL(
6360+    content::RenderFrameHost* render_frame_host,
6361+    const std::vector<blink::mojom::FaviconURLPtr>& candidates) {
6362+  if (!handler_ || !browser_) {
6363+    LOG(ERROR) << "Initialized value is invalid";
6364+    return;
6365+  }
6366+  for (const auto& candidate : candidates) {
6367+    if (!candidate->icon_url.is_valid())
6368+      continue;
6369+    switch (candidate->icon_type) {
6370+      case blink::mojom::FaviconIconType::kFavicon:
6371+        DownloadFavicon(candidate);
6372+        break;
6373+      case blink::mojom::FaviconIconType::kTouchIcon:
6374+        handler_->OnReceivedTouchIconUrl(browser_, CefString(candidate->icon_url.spec()), false);
6375+        break;
6376+      case blink::mojom::FaviconIconType::kTouchPrecomposedIcon:
6377+        handler_->OnReceivedTouchIconUrl(browser_, CefString(candidate->icon_url.spec()), true);
6378+        break;
6379+      case blink::mojom::FaviconIconType::kInvalid:
6380+        LOG(INFO) << "An invalid icon type.";
6381+        break;
6382+      default:
6383+        NOTREACHED();
6384+        break;
6385+    }
6386+  }
6387+}
6388+
6389+void IconHelper::DownloadFavicon(const blink::mojom::FaviconURLPtr& candidate) {
6390+  if (!web_contents_) {
6391+    LOG(ERROR) << "WebContents is invalid";
6392+    return;
6393+  }
6394+  web_contents_->DownloadImage(
6395+      candidate->icon_url,
6396+      true,              // Is a favicon
6397+      0,                 // No preferred size
6398+      LARGEST_ICON_SIZE, // Max bitmap size 192
6399+      false,             // Normal cache policy
6400+      base::BindOnce(&IconHelper::DownloadFaviconCallback, this));
6401+}
6402+
6403+void IconHelper::DownloadFaviconCallback(
6404+    int id,
6405+    int http_status_code,
6406+    const GURL& image_url,
6407+    const std::vector<SkBitmap>& bitmaps,
6408+    const std::vector<gfx::Size>& original_bitmap_sizes) {
6409+  if (http_status_code == 404) {
6410+    return;
6411+  }
6412+
6413+  if (bitmaps.size() == 0) {
6414+    return;
6415+  }
6416+  std::vector<size_t> best_indices;
6417+  SelectFaviconFrameIndices(original_bitmap_sizes,
6418+                            std::vector<int>(1U, LARGEST_ICON_SIZE),
6419+                            &best_indices, nullptr);
6420+  const auto& bitmap =  bitmaps[best_indices.size() == 0 ? 0 : best_indices.front()];
6421+  if (bitmap.drawsNothing()) {
6422+    return;
6423+  }
6424+  bitmap_ = bitmap;
6425+  auto ret = bitmap_.writePixels(bitmap.pixmap());
6426+  if (!ret) {
6427+    LOG(ERROR) << "Copy pixels failed.";
6428+    return;
6429+  }
6430+  void* pixels = bitmap_.getPixels();
6431+  size_t byte_size = bitmap_.computeByteSize();
6432+  if (!pixels || byte_size == 0) {
6433+    LOG(ERROR) << "Pixels value is invalid.";
6434+    return;
6435+  }
6436+  auto color_type = TransformSkColorType(bitmap_.colorType());
6437+  auto alpha_type = TransformSkAlphaType(bitmap_.alphaType());
6438+  size_t pixel_width = bitmap_.width();
6439+  size_t pixel_height = bitmap_.height();
6440+  OnReceivedIcon(pixels, pixel_width, pixel_height, color_type, alpha_type);
6441+}
6442+
6443+void IconHelper::OnReceivedIcon(const void* data,
6444+                                size_t width,
6445+                                size_t height,
6446+                                cef_color_type_t color_type,
6447+                                cef_alpha_type_t alpha_type) {
6448+  if (!handler_ || !browser_) {
6449+    LOG(ERROR) << "Initialized value is invalid";
6450+    return;
6451+  }
6452+  handler_->OnReceivedIcon(data, width, height, color_type, alpha_type);
6453+}
6454\ No newline at end of file
6455diff --git a/cef/libcef/browser/icon_helper.h b/cef/libcef/browser/icon_helper.h
6456new file mode 100644
6457index 0000000000..7a397e057d
6458--- /dev/null
6459+++ b/cef/libcef/browser/icon_helper.h
6460@@ -0,0 +1,66 @@
6461+// Copyright (c) 2022 Huawei Device Co., Ltd.
6462+// Copyright 2018 The Chromium Authors. All rights reserved.
6463+// Use of this source code is governed by a BSD-style license that can be
6464+// found in the LICENSE file.
6465+
6466+#ifndef CEF_LIBCEF_BROWSER_ICON_HELPER_H_
6467+#define CEF_LIBCEF_BROWSER_ICON_HELPER_H_
6468+#pragma once
6469+
6470+#include <vector>
6471+
6472+#include "include/cef_base.h"
6473+#include "libcef/browser/thread_util.h"
6474+
6475+#include "third_party/blink/public/mojom/favicon/favicon_url.mojom-forward.h"
6476+#include "third_party/skia/include/core/SkBitmap.h"
6477+
6478+namespace gfx {
6479+class Size;
6480+}  // namespace gfx
6481+
6482+namespace content {
6483+class RenderFrameHost;
6484+class WebContents;
6485+}  // namespace content
6486+
6487+class CefBrowser;
6488+class CefDisplayHandler;
6489+class GURL;
6490+
6491+class IconHelper : public virtual CefBaseRefCounted {
6492+ public:
6493+  IconHelper() = default;
6494+  ~IconHelper() {
6495+    web_contents_ = nullptr;
6496+  }
6497+
6498+  void SetDisplayHandler(const CefRefPtr<CefDisplayHandler>& handler);
6499+  void SetBrowser(const CefRefPtr<CefBrowser>& browser);
6500+  void SetWebContents(content::WebContents* new_contents);
6501+  void OnUpdateFaviconURL(content::RenderFrameHost* render_frame_host,
6502+                          const std::vector<blink::mojom::FaviconURLPtr>& candidates);
6503+  void DownloadFavicon(const blink::mojom::FaviconURLPtr& candidate);
6504+  void DownloadFaviconCallback(int id,
6505+                               int http_status_code,
6506+                               const GURL& image_url,
6507+                               const std::vector<SkBitmap>& bitmaps,
6508+                               const std::vector<gfx::Size>& original_bitmap_sizes);
6509+  void OnReceivedIcon(const void* data,
6510+                      size_t width,
6511+                      size_t height,
6512+                      cef_color_type_t color_type,
6513+                      cef_alpha_type_t alpha_type);
6514+
6515+ private:
6516+  content::WebContents* web_contents_ = nullptr;
6517+  CefRefPtr<CefDisplayHandler> handler_ = nullptr;
6518+  CefRefPtr<CefBrowser> browser_ = nullptr;
6519+  SkBitmap bitmap_;
6520+
6521+  IMPLEMENT_REFCOUNTING_DELETE_ON_UIT(IconHelper);
6522+  DISALLOW_COPY_AND_ASSIGN(IconHelper);
6523+
6524+};
6525+
6526+#endif // CEF_LIBCEF_BROWSER_ICON_HELPER_H_
6527\ No newline at end of file
6528diff --git a/cef/libcef/browser/javascript/oh_gin_javascript_bridge_dispatcher_host.cc b/cef/libcef/browser/javascript/oh_gin_javascript_bridge_dispatcher_host.cc
6529new file mode 100644
6530index 0000000000..821c07a73b
6531--- /dev/null
6532+++ b/cef/libcef/browser/javascript/oh_gin_javascript_bridge_dispatcher_host.cc
6533@@ -0,0 +1,292 @@
6534+// Copyright (c) 2022 Huawei Device Co., Ltd.
6535+// Copyright 2018 The Chromium Authors. All rights reserved.
6536+// Use of this source code is governed by a BSD-style license that can be
6537+// found in the LICENSE file.
6538+
6539+#include "oh_gin_javascript_bridge_dispatcher_host.h"
6540+
6541+#include "content/browser/renderer_host/agent_scheduling_group_host.h"
6542+#include "content/browser/web_contents/web_contents_impl.h"
6543+#include "content/public/browser/browser_thread.h"
6544+#include "content/public/browser/web_contents.h"
6545+#include "libcef/browser/javascript/oh_gin_javascript_bridge_message_filter.h"
6546+#include "libcef/common/javascript/oh_gin_javascript_bridge_messages.h"
6547+#include "libcef/common/values_impl.h"
6548+#include "oh_gin_javascript_bridge_object_deletion_message_filter.h"
6549+
6550+namespace NWEB {
6551+OhGinJavascriptBridgeDispatcherHost::OhGinJavascriptBridgeDispatcherHost(
6552+    content::WebContents* web_contents,
6553+    CefRefPtr<CefClient> client)
6554+    : content::WebContentsObserver(web_contents), client_(client) {}
6555+
6556+OhGinJavascriptBridgeDispatcherHost::~OhGinJavascriptBridgeDispatcherHost() {
6557+  client_.reset();
6558+  method_map_.clear();
6559+}
6560+
6561+// Run on the UI thread.
6562+void OhGinJavascriptBridgeDispatcherHost::
6563+    InstallFilterAndRegisterAllRoutingIds() {
6564+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
6565+  if (method_map_.empty() ||
6566+      !web_contents()->GetMainFrame()->GetProcess()->GetChannel()) {
6567+    return;
6568+  }
6569+
6570+  // Unretained() is safe because ForEachFrame() is synchronous.
6571+  web_contents()->ForEachFrame(base::BindRepeating(
6572+      [](OhGinJavascriptBridgeDispatcherHost* host,
6573+         content::RenderFrameHost* frame) {
6574+        content::AgentSchedulingGroupHost& agent_scheduling_group =
6575+            static_cast<content::RenderFrameHostImpl*>(frame)
6576+                ->GetAgentSchedulingGroup();
6577+
6578+        scoped_refptr<OhGinJavascriptBridgeMessageFilter> per_asg_filter =
6579+            OhGinJavascriptBridgeMessageFilter::FromHost(
6580+                agent_scheduling_group,
6581+                /*create_if_not_exists=*/true);
6582+        if (base::FeatureList::IsEnabled(features::kMBIMode)) {
6583+          scoped_refptr<OhGinJavascriptBridgeObjectDeletionMessageFilter>
6584+              process_global_filter =
6585+                  OhGinJavascriptBridgeObjectDeletionMessageFilter::FromHost(
6586+                      agent_scheduling_group.GetProcess(),
6587+                      /*create_if_not_exists=*/true);
6588+          process_global_filter->AddRoutingIdForHost(host, frame);
6589+        }
6590+
6591+        per_asg_filter->AddRoutingIdForHost(host, frame);
6592+      },
6593+      base::Unretained(this)));
6594+}
6595+
6596+void OhGinJavascriptBridgeDispatcherHost::RenderFrameCreated(
6597+    content::RenderFrameHost* render_frame_host) {
6598+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
6599+  content::AgentSchedulingGroupHost& agent_scheduling_group =
6600+      static_cast<content::RenderFrameHostImpl*>(render_frame_host)
6601+          ->GetAgentSchedulingGroup();
6602+  if (scoped_refptr<OhGinJavascriptBridgeMessageFilter> filter =
6603+          OhGinJavascriptBridgeMessageFilter::FromHost(
6604+              agent_scheduling_group, /*create_if_not_exists=*/false)) {
6605+    filter->AddRoutingIdForHost(this, render_frame_host);
6606+  } else {
6607+    InstallFilterAndRegisterAllRoutingIds();
6608+  }
6609+  for (ObjectMethodMap::const_iterator iter = method_map_.begin();
6610+       iter != method_map_.end(); ++iter) {
6611+    render_frame_host->Send(new OhGinJavascriptBridgeMsg_AddNamedObject(
6612+        render_frame_host->GetRoutingID(), iter->second.first, iter->first));
6613+  }
6614+}
6615+
6616+void OhGinJavascriptBridgeDispatcherHost::WebContentsDestroyed() {
6617+  // Unretained() is safe because ForEachFrame() is synchronous.
6618+  web_contents()->ForEachFrame(base::BindRepeating(
6619+      [](OhGinJavascriptBridgeDispatcherHost* host,
6620+         content::RenderFrameHost* frame) {
6621+        content::AgentSchedulingGroupHost& agent_scheduling_group =
6622+            static_cast<content::RenderFrameHostImpl*>(frame)
6623+                ->GetAgentSchedulingGroup();
6624+        scoped_refptr<OhGinJavascriptBridgeMessageFilter> filter =
6625+            OhGinJavascriptBridgeMessageFilter::FromHost(
6626+                agent_scheduling_group, /*create_if_not_exists=*/false);
6627+
6628+        if (filter)
6629+          filter->RemoveHost(host);
6630+      },
6631+      base::Unretained(this)));
6632+}
6633+
6634+void OhGinJavascriptBridgeDispatcherHost::RenderViewHostChanged(
6635+    content::RenderViewHost* old_host,
6636+    content::RenderViewHost* new_host) {
6637+  content::AgentSchedulingGroupHost& agent_scheduling_group =
6638+      static_cast<content::RenderViewHostImpl*>(new_host)
6639+          ->GetAgentSchedulingGroup();
6640+  scoped_refptr<OhGinJavascriptBridgeMessageFilter> filter =
6641+      OhGinJavascriptBridgeMessageFilter::FromHost(
6642+          agent_scheduling_group,
6643+          /*create_if_not_exists=*/false);
6644+  if (!filter)
6645+    InstallFilterAndRegisterAllRoutingIds();
6646+}
6647+
6648+void OhGinJavascriptBridgeDispatcherHost::AddNamedObject(
6649+    const std::string& object_name,
6650+    const std::vector<std::string>& method_list) {
6651+  LOG(INFO) << "AddNamedObject::" << object_name;
6652+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
6653+  {
6654+    std::unique_lock<std::mutex> lk(object_mtx_);
6655+    ObjectMethodMap::iterator it;
6656+    for (it = method_map_.begin(); it != method_map_.end(); ++it) {
6657+      if (it->second.first == object_name) {
6658+        std::unordered_set<std::string> method_set = it->second.second;
6659+        for (std::string method : method_list) {
6660+          method_set.emplace(method);
6661+        }
6662+        it->second.second = method_set;
6663+        return;
6664+      }
6665+    }
6666+    ++object_id_;
6667+
6668+    MethodPair object_pair;
6669+    std::unordered_set<std::string> method_set;
6670+    for (std::string s : method_list) {
6671+      method_set.emplace(s);
6672+    }
6673+    object_pair.first = object_name;
6674+    object_pair.second = method_set;
6675+    method_map_[object_id_] = object_pair;
6676+  }
6677+
6678+  InstallFilterAndRegisterAllRoutingIds();
6679+
6680+  content::WebContentsImpl* web_contents_impl =
6681+      static_cast<content::WebContentsImpl*>(web_contents());
6682+
6683+  web_contents_impl->SendToAllFramesIncludingPending(
6684+      new OhGinJavascriptBridgeMsg_AddNamedObject(MSG_ROUTING_NONE, object_name,
6685+                                                  object_id_));
6686+}
6687+
6688+void OhGinJavascriptBridgeDispatcherHost::RemoveNamedObject(
6689+    const std::string& object_name,
6690+    const std::vector<std::string>& method_list) {
6691+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
6692+  {
6693+    std::unique_lock<std::mutex> lk(object_mtx_);
6694+    ObjectMethodMap::iterator it;
6695+    for (it = method_map_.begin(); it != method_map_.end(); ++it) {
6696+      if (!(object_name == it->second.first)) {
6697+        continue;
6698+      }
6699+      method_map_.erase(it);
6700+      break;
6701+    }
6702+  }
6703+
6704+  // |name| may come from |named_objects_|. Make a copy of name so that if
6705+  // |name| is from |named_objects_| it'll be valid after the remove below.
6706+  const std::string copied_name(object_name);
6707+
6708+  content::WebContentsImpl* web_contents_impl =
6709+      static_cast<content::WebContentsImpl*>(web_contents());
6710+  web_contents_impl->SendToAllFramesIncludingPending(
6711+      new OhGinJavascriptBridgeMsg_RemoveNamedObject(MSG_ROUTING_NONE,
6712+                                                     copied_name));
6713+}
6714+
6715+void OhGinJavascriptBridgeDispatcherHost::DocumentAvailableInMainFrame(
6716+    content::RenderFrameHost* render_frame_host) {
6717+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
6718+  (void)render_frame_host;
6719+}
6720+
6721+// OhGinJavascriptBridgeDispatcherHost::FindObject(
6722+
6723+void OhGinJavascriptBridgeDispatcherHost::OnGetMethods(
6724+    int32_t object_id,
6725+    std::set<std::string>* returned_method_names) {
6726+  LOG(INFO) << "OhGinJavascriptBridgeDispatcherHost::OnGetMethods::"
6727+            << object_id;
6728+  if (method_map_.find(object_id) == method_map_.end()) {
6729+    return;
6730+  }
6731+  MethodPair p = method_map_[object_id];
6732+  for (auto iter = p.second.begin(); iter != p.second.end(); ++iter) {
6733+    returned_method_names->emplace(*iter);
6734+  }
6735+}
6736+
6737+void OhGinJavascriptBridgeDispatcherHost::OnHasMethod(
6738+    int32_t object_id,
6739+    const std::string& method_name,
6740+    bool* result) {
6741+  LOG(INFO) << "OhGinJavascriptBridgeDispatcherHost::OnHasMethod::"
6742+            << method_name.c_str();
6743+  if (method_map_.find(object_id) == method_map_.end()) {
6744+    *result = false;
6745+    return;
6746+  }
6747+
6748+  MethodPair p = method_map_[object_id];
6749+  if (p.second.find(method_name) == p.second.end()) {
6750+    *result = false;
6751+    return;
6752+  }
6753+
6754+  *result = true;
6755+}
6756+
6757+std::unique_ptr<base::Value> ParseValueTONWebValue(
6758+    CefRefPtr<CefListValue> result) {
6759+  std::unique_ptr<base::Value> value = std::make_unique<base::Value>();
6760+  if (!result.get() || result->GetSize() == 0) {
6761+    return value;
6762+  }
6763+
6764+  CefRefPtr<CefValue> argument = result->GetValue(0);
6765+
6766+  switch (argument->GetType()) {
6767+    case CefValueType::VTYPE_INT:
6768+      value = std::make_unique<base::Value>(result->GetInt(0));
6769+      break;
6770+    case CefValueType::VTYPE_DOUBLE: {
6771+      value = std::make_unique<base::Value>(result->GetDouble(0));
6772+      break;
6773+    }
6774+    case CefValueType::VTYPE_BOOL:
6775+      value = std::make_unique<base::Value>(result->GetBool(0));
6776+      break;
6777+    case CefValueType::VTYPE_STRING:
6778+      value = std::make_unique<base::Value>(result->GetString(0).ToString());
6779+      break;
6780+    case CefValueType::VTYPE_INVALID:
6781+      value = std::make_unique<base::Value>();
6782+      break;
6783+    default:
6784+      value = std::make_unique<base::Value>();
6785+      break;
6786+  }
6787+
6788+  return value;
6789+}
6790+
6791+void OhGinJavascriptBridgeDispatcherHost::OnInvokeMethod(
6792+    int routing_id,
6793+    int32_t object_id,
6794+    const std::string& method_name,
6795+    const base::ListValue& arguments,
6796+    base::ListValue* wrapped_result,
6797+    OhGinJavascriptBridgeError* error_code) {
6798+  (void)routing_id;
6799+  LOG(INFO) << "OnInvokeMethod method_name : " << method_name.c_str();
6800+  if (method_map_.find(object_id) == method_map_.end()) {
6801+    *error_code = kOhGinJavascriptBridgeUnknownObjectId;
6802+    return;
6803+  }
6804+  base::ListValue* argument = const_cast<base::ListValue*>(&arguments);
6805+
6806+  CefRefPtr<CefListValueImpl> ceflistvalue =
6807+      new CefListValueImpl(argument, false, false);
6808+
6809+  MethodPair object_pair = method_map_[object_id];
6810+
6811+  std::string method = method_name;
6812+  std::string classname = object_pair.first;
6813+
6814+  CefRefPtr<CefListValue> result = CefListValue::Create();
6815+
6816+  int error =
6817+      client_->NotifyJavaScriptResult(ceflistvalue, method, classname, result);
6818+  *error_code = OhGinJavascriptBridgeError(error);
6819+  if (error != 0) {
6820+    return;
6821+  }
6822+
6823+  wrapped_result->Append(ParseValueTONWebValue(result));
6824+}
6825+}  // namespace NWEB
6826\ No newline at end of file
6827diff --git a/cef/libcef/browser/javascript/oh_gin_javascript_bridge_dispatcher_host.h b/cef/libcef/browser/javascript/oh_gin_javascript_bridge_dispatcher_host.h
6828new file mode 100644
6829index 0000000000..79ce84aa74
6830--- /dev/null
6831+++ b/cef/libcef/browser/javascript/oh_gin_javascript_bridge_dispatcher_host.h
6832@@ -0,0 +1,77 @@
6833+// Copyright (c) 2022 Huawei Device Co., Ltd.
6834+// Copyright 2018 The Chromium Authors. All rights reserved.
6835+// Use of this source code is governed by a BSD-style license that can be
6836+// found in the LICENSE file.
6837+
6838+#ifndef OH_GIN_JAVASCRIPT_BRIDGE_DISPATCHEER_HOST_H
6839+#define OH_GIN_JAVASCRIPT_BRIDGE_DISPATCHEER_HOST_H
6840+
6841+#include <mutex>
6842+#include <unordered_set>
6843+#include "base/memory/ref_counted.h"
6844+#include "content/public/browser/web_contents_observer.h"
6845+#include "include/cef_client.h"
6846+#include "libcef/browser/browser_info.h"
6847+#include "libcef/common/javascript/oh_gin_javascript_bridge_errors.h"
6848+
6849+namespace NWEB {
6850+class OhGinJavascriptBridgeDispatcherHost
6851+    : public base::RefCountedThreadSafe<OhGinJavascriptBridgeDispatcherHost>,
6852+      public content::WebContentsObserver {
6853+ public:
6854+  OhGinJavascriptBridgeDispatcherHost(content::WebContents* web_contents,
6855+                                      CefRefPtr<CefClient> client);
6856+  OhGinJavascriptBridgeDispatcherHost(
6857+      const OhGinJavascriptBridgeDispatcherHost&) = delete;
6858+  OhGinJavascriptBridgeDispatcherHost& operator=(
6859+      const OhGinJavascriptBridgeDispatcherHost&) = delete;
6860+
6861+  void AddNamedObject(const std::string& classname,
6862+                      const std::vector<std::string>& method_list);
6863+  void RemoveNamedObject(const std::string& classname,
6864+                         const std::vector<std::string>& method_list);
6865+
6866+  // WebContentsObserver
6867+  void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override;
6868+  void DocumentAvailableInMainFrame(
6869+      content::RenderFrameHost* render_frame_host) override;
6870+  void WebContentsDestroyed() override;
6871+  void RenderViewHostChanged(content::RenderViewHost* old_host,
6872+                             content::RenderViewHost* new_host) override;
6873+
6874+  // Run on the background thread.
6875+  void OnGetMethods(int32_t object_id,
6876+                    std::set<std::string>* returned_method_names);
6877+  void OnHasMethod(int32_t object_id,
6878+                   const std::string& method_name,
6879+                   bool* result);
6880+  void OnInvokeMethod(int routing_id,
6881+                      int32_t object_id,
6882+                      const std::string& method_name,
6883+                      const base::ListValue& arguments,
6884+                      base::ListValue* result,
6885+                      OhGinJavascriptBridgeError* error_code);
6886+
6887+ private:
6888+  typedef int32_t ObjectID;
6889+  friend class base::RefCountedThreadSafe<OhGinJavascriptBridgeDispatcherHost>;
6890+
6891+  // object id and ace js function name
6892+  typedef std::map<ObjectID, std::string> ObjectMap;
6893+
6894+  ~OhGinJavascriptBridgeDispatcherHost();
6895+
6896+  // Run on the UI thread.
6897+  void InstallFilterAndRegisterAllRoutingIds();
6898+
6899+  // js property name and object id
6900+  using MethodPair = std::pair<std::string, std::unordered_set<std::string>>;
6901+  using ObjectMethodMap = std::map<ObjectID, MethodPair>;
6902+  ObjectMethodMap method_map_;
6903+  int32_t object_id_ = 0;
6904+
6905+  std::mutex object_mtx_;
6906+  CefRefPtr<CefClient> client_;
6907+};
6908+}  // namespace NWEB
6909+#endif
6910\ No newline at end of file
6911diff --git a/cef/libcef/browser/javascript/oh_gin_javascript_bridge_message_filter.cc b/cef/libcef/browser/javascript/oh_gin_javascript_bridge_message_filter.cc
6912new file mode 100644
6913index 0000000000..b2d7083ba3
6914--- /dev/null
6915+++ b/cef/libcef/browser/javascript/oh_gin_javascript_bridge_message_filter.cc
6916@@ -0,0 +1,184 @@
6917+// Copyright (c) 2022 Huawei Device Co., Ltd.
6918+// Copyright 2018 The Chromium Authors. All rights reserved.
6919+// Use of this source code is governed by a BSD-style license that can be
6920+// found in the LICENSE file.
6921+
6922+#include "oh_gin_javascript_bridge_message_filter.h"
6923+
6924+#include <thread>
6925+#include "base/types/pass_key.h"
6926+#include "cef/libcef/common/javascript/oh_gin_javascript_bridge_messages.h"
6927+#include "content/browser/renderer_host/agent_scheduling_group_host.h"
6928+#include "content/public/browser/browser_task_traits.h"
6929+#include "content/public/browser/browser_thread.h"
6930+#include "content/public/browser/render_frame_host.h"
6931+#include "content/public/browser/render_process_host.h"
6932+#include "content/public/browser/web_contents.h"
6933+#include "oh_gin_javascript_bridge_dispatcher_host.h"
6934+
6935+namespace {
6936+
6937+const char kOhGinJavascriptBridgeMessageFilterKey[] =
6938+    "OhGinJavascriptBridgeMessageFilter";
6939+
6940+}  // namespace
6941+
6942+namespace NWEB {
6943+OhGinJavascriptBridgeMessageFilter::OhGinJavascriptBridgeMessageFilter(
6944+    base::PassKey<OhGinJavascriptBridgeMessageFilter> pass_key,
6945+    content::AgentSchedulingGroupHost& agent_scheduling_group)
6946+    : BrowserMessageFilter(OhGinJavascriptBridgeMsgStart),
6947+      agent_scheduling_group_(agent_scheduling_group),
6948+      current_routing_id_(MSG_ROUTING_NONE) {}
6949+
6950+OhGinJavascriptBridgeMessageFilter::~OhGinJavascriptBridgeMessageFilter() {}
6951+
6952+void OhGinJavascriptBridgeMessageFilter::OnDestruct() const {
6953+  if (content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)) {
6954+    delete this;
6955+  } else {
6956+    content::GetUIThreadTaskRunner({})->DeleteSoon(FROM_HERE, this);
6957+  }
6958+}
6959+
6960+bool OhGinJavascriptBridgeMessageFilter::OnMessageReceived(
6961+    const IPC::Message& message) {
6962+  std::thread dump_thread(
6963+      [message, this] { this->OnMessageReceivedThread(message); });
6964+  dump_thread.detach();
6965+  return true;
6966+}
6967+
6968+bool OhGinJavascriptBridgeMessageFilter::OnMessageReceivedThread(
6969+    const IPC::Message& message) {
6970+  base::AutoReset<int32_t> routing_id(&current_routing_id_,
6971+                                      message.routing_id());
6972+  bool handled = true;
6973+  IPC_BEGIN_MESSAGE_MAP(OhGinJavascriptBridgeMessageFilter, message)
6974+    IPC_MESSAGE_HANDLER(OhGinJavascriptBridgeHostMsg_GetMethods, OnGetMethods)
6975+    IPC_MESSAGE_HANDLER(OhGinJavascriptBridgeHostMsg_HasMethod, OnHasMethod)
6976+    IPC_MESSAGE_HANDLER(OhGinJavascriptBridgeHostMsg_InvokeMethod,
6977+                        OnInvokeMethod)
6978+    IPC_MESSAGE_HANDLER(OhGinJavascriptBridgeHostMsg_ObjectWrapperDeleted,
6979+                        OnObjectWrapperDeleted)
6980+    IPC_MESSAGE_UNHANDLED(handled = false)
6981+  IPC_END_MESSAGE_MAP()
6982+  return handled;
6983+}
6984+
6985+void OhGinJavascriptBridgeMessageFilter::AddRoutingIdForHost(
6986+    OhGinJavascriptBridgeDispatcherHost* host,
6987+    content::RenderFrameHost* render_frame_host) {
6988+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
6989+  base::AutoLock locker(hosts_lock_);
6990+  hosts_[render_frame_host->GetRoutingID()] = host;
6991+}
6992+
6993+void OhGinJavascriptBridgeMessageFilter::RemoveHost(
6994+    const OhGinJavascriptBridgeDispatcherHost* host) {
6995+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
6996+  base::AutoLock locker(hosts_lock_);
6997+  auto iter = hosts_.begin();
6998+  while (iter != hosts_.end()) {
6999+    if (iter->second == host)
7000+      hosts_.erase(iter++);
7001+    else
7002+      ++iter;
7003+  }
7004+}
7005+
7006+void OhGinJavascriptBridgeMessageFilter::RenderProcessExited(
7007+    content::RenderProcessHost* rph,
7008+    const content::ChildProcessTerminationInfo& info) {
7009+#if DCHECK_IS_ON()
7010+  {
7011+    scoped_refptr<OhGinJavascriptBridgeMessageFilter> filter =
7012+        base::UserDataAdapter<OhGinJavascriptBridgeMessageFilter>::Get(
7013+            &agent_scheduling_group_, kOhGinJavascriptBridgeMessageFilterKey);
7014+    DCHECK_EQ(this, filter.get());
7015+  }
7016+#endif
7017+
7018+  rph->RemoveObserver(this);
7019+
7020+  agent_scheduling_group_.RemoveUserData(
7021+      kOhGinJavascriptBridgeMessageFilterKey);
7022+}
7023+
7024+scoped_refptr<OhGinJavascriptBridgeMessageFilter>
7025+OhGinJavascriptBridgeMessageFilter::FromHost(
7026+    content::AgentSchedulingGroupHost& agent_scheduling_group,
7027+    bool create_if_not_exists) {
7028+  scoped_refptr<OhGinJavascriptBridgeMessageFilter> filter =
7029+      base::UserDataAdapter<OhGinJavascriptBridgeMessageFilter>::Get(
7030+          &agent_scheduling_group, kOhGinJavascriptBridgeMessageFilterKey);
7031+
7032+  if (!filter && create_if_not_exists) {
7033+    filter = base::MakeRefCounted<OhGinJavascriptBridgeMessageFilter>(
7034+        base::PassKey<OhGinJavascriptBridgeMessageFilter>(),
7035+        agent_scheduling_group);
7036+    agent_scheduling_group.AddFilter(filter.get());
7037+    agent_scheduling_group.GetProcess()->AddObserver(filter.get());
7038+
7039+    agent_scheduling_group.SetUserData(
7040+        kOhGinJavascriptBridgeMessageFilterKey,
7041+        std::make_unique<
7042+            base::UserDataAdapter<OhGinJavascriptBridgeMessageFilter>>(
7043+            filter.get()));
7044+  }
7045+  return filter;
7046+}
7047+
7048+scoped_refptr<OhGinJavascriptBridgeDispatcherHost>
7049+OhGinJavascriptBridgeMessageFilter::FindHost() {
7050+  base::AutoLock locker(hosts_lock_);
7051+  auto iter = hosts_.find(current_routing_id_);
7052+  if (iter != hosts_.end())
7053+    return iter->second;
7054+
7055+  return nullptr;
7056+}
7057+
7058+void OhGinJavascriptBridgeMessageFilter::OnGetMethods(
7059+    int32_t object_id,
7060+    std::set<std::string>* returned_method_names) {
7061+  scoped_refptr<OhGinJavascriptBridgeDispatcherHost> host = FindHost();
7062+  if (host) {
7063+    host->OnGetMethods(object_id, returned_method_names);
7064+  } else {
7065+    *returned_method_names = std::set<std::string>();
7066+  }
7067+}
7068+
7069+void OhGinJavascriptBridgeMessageFilter::OnHasMethod(
7070+    int32_t object_id,
7071+    const std::string& method_name,
7072+    bool* result) {
7073+  scoped_refptr<OhGinJavascriptBridgeDispatcherHost> host = FindHost();
7074+  if (host) {
7075+    host->OnHasMethod(object_id, method_name, result);
7076+  } else {
7077+    *result = false;
7078+  }
7079+}
7080+
7081+void OhGinJavascriptBridgeMessageFilter::OnInvokeMethod(
7082+    int32_t object_id,
7083+    const std::string& method_name,
7084+    const base::ListValue& arguments,
7085+    base::ListValue* wrapped_result,
7086+    OhGinJavascriptBridgeError* error_code) {
7087+  scoped_refptr<OhGinJavascriptBridgeDispatcherHost> host = FindHost();
7088+  if (host) {
7089+    host->OnInvokeMethod(current_routing_id_, object_id, method_name, arguments,
7090+                         wrapped_result, error_code);
7091+  } else {
7092+    wrapped_result->Append(std::make_unique<base::Value>());
7093+    *error_code = kOhGinJavascriptBridgeRenderFrameDeleted;
7094+  }
7095+}
7096+
7097+void OhGinJavascriptBridgeMessageFilter::OnObjectWrapperDeleted(int object_id) {
7098+  (void)object_id;
7099+}
7100+}  // namespace NWEB
7101\ No newline at end of file
7102diff --git a/cef/libcef/browser/javascript/oh_gin_javascript_bridge_message_filter.h b/cef/libcef/browser/javascript/oh_gin_javascript_bridge_message_filter.h
7103new file mode 100644
7104index 0000000000..de1af8204b
7105--- /dev/null
7106+++ b/cef/libcef/browser/javascript/oh_gin_javascript_bridge_message_filter.h
7107@@ -0,0 +1,92 @@
7108+// Copyright (c) 2022 Huawei Device Co., Ltd.
7109+// Copyright 2018 The Chromium Authors. All rights reserved.
7110+// Use of this source code is governed by a BSD-style license that can be
7111+// found in the LICENSE file.
7112+
7113+#ifndef OH_GIN_JAVASCRIPT_BRIDGE_MESSAGE_FILTER_H
7114+#define OH_GIN_JAVASCRIPT_BRIDGE_MESSAGE_FILTER_H
7115+
7116+#include "base/types/pass_key.h"
7117+#include "content/public/browser/browser_message_filter.h"
7118+#include "content/public/browser/render_process_host_observer.h"
7119+#include "libcef/common/javascript/oh_gin_javascript_bridge_errors.h"
7120+
7121+namespace IPC {
7122+class Message;
7123+}
7124+
7125+namespace content {
7126+class AgentSchedulingGroupHost;
7127+class RenderFrameHost;
7128+class BrowserThread;
7129+}  // namespace content
7130+
7131+namespace NWEB {
7132+class OhGinJavascriptBridgeDispatcherHost;
7133+class OhGinJavascriptBridgeMessageFilter
7134+    : public content::BrowserMessageFilter,
7135+      public content::RenderProcessHostObserver {
7136+ public:
7137+  OhGinJavascriptBridgeMessageFilter(
7138+      base::PassKey<OhGinJavascriptBridgeMessageFilter> pass_key,
7139+      content::AgentSchedulingGroupHost& agent_scheduling_group);
7140+
7141+  // BrowserMessageFilter
7142+  void OnDestruct() const override;
7143+  bool OnMessageReceived(const IPC::Message& message) override;
7144+  // scoped_refptr<base::SequencedTaskRunner> OverrideTaskRunnerForMessage(
7145+  //     const IPC::Message& message) override;
7146+
7147+  // RenderProcessHostObserver
7148+  void RenderProcessExited(
7149+      content::RenderProcessHost* rph,
7150+      const content::ChildProcessTerminationInfo& info) override;
7151+
7152+  // Called on the UI thread.
7153+  void AddRoutingIdForHost(OhGinJavascriptBridgeDispatcherHost* host,
7154+                           content::RenderFrameHost* render_frame_host);
7155+  void RemoveHost(const OhGinJavascriptBridgeDispatcherHost* host);
7156+
7157+  static scoped_refptr<OhGinJavascriptBridgeMessageFilter> FromHost(
7158+      content::AgentSchedulingGroupHost& agent_scheduling_group,
7159+      bool create_if_not_exists);
7160+
7161+ private:
7162+  friend class BrowserThread;
7163+  friend class base::DeleteHelper<OhGinJavascriptBridgeMessageFilter>;
7164+
7165+  typedef std::map<int32_t, scoped_refptr<OhGinJavascriptBridgeDispatcherHost>>
7166+      HostMap;
7167+  ~OhGinJavascriptBridgeMessageFilter() override;
7168+
7169+  bool OnMessageReceivedThread(const IPC::Message& message);
7170+
7171+  // Called on the background thread.
7172+  scoped_refptr<OhGinJavascriptBridgeDispatcherHost> FindHost();
7173+
7174+  void OnGetMethods(int32_t object_id,
7175+                    std::set<std::string>* returned_method_names);
7176+  void OnHasMethod(int32_t object_id,
7177+                   const std::string& method_name,
7178+                   bool* result);
7179+  void OnInvokeMethod(int32_t object_id,
7180+                      const std::string& method_name,
7181+                      const base::ListValue& arguments,
7182+                      base::ListValue* result,
7183+                      OhGinJavascriptBridgeError* error_code);
7184+  void OnObjectWrapperDeleted(int object_id);
7185+
7186+  // Accessed both from UI and background threads.
7187+  HostMap hosts_ GUARDED_BY(hosts_lock_);
7188+  base::Lock hosts_lock_;
7189+
7190+  // The `AgentSchedulingGroupHost` that this object is associated with. This
7191+  // filter is installed on the host's channel.
7192+  content::AgentSchedulingGroupHost& agent_scheduling_group_;
7193+
7194+  // The routing id of the RenderFrameHost whose request we are processing.
7195+  // Used on the background thread.
7196+  int32_t current_routing_id_;
7197+};
7198+}  // namespace NWEB
7199+#endif
7200\ No newline at end of file
7201diff --git a/cef/libcef/browser/javascript/oh_gin_javascript_bridge_object_deletion_message_filter.cc b/cef/libcef/browser/javascript/oh_gin_javascript_bridge_object_deletion_message_filter.cc
7202new file mode 100644
7203index 0000000000..6aa2ba2ec7
7204--- /dev/null
7205+++ b/cef/libcef/browser/javascript/oh_gin_javascript_bridge_object_deletion_message_filter.cc
7206@@ -0,0 +1,136 @@
7207+// Copyright (c) 2022 Huawei Device Co., Ltd.
7208+// Copyright 2018 The Chromium Authors. All rights reserved.
7209+// Use of this source code is governed by a BSD-style license that can be
7210+// found in the LICENSE file.
7211+
7212+#include "oh_gin_javascript_bridge_object_deletion_message_filter.h"
7213+
7214+#include "base/auto_reset.h"
7215+#include "base/feature_list.h"
7216+#include "base/types/pass_key.h"
7217+#include "build/build_config.h"
7218+#include "content/public/browser/browser_task_traits.h"
7219+#include "content/public/browser/browser_thread.h"
7220+#include "content/public/browser/render_frame_host.h"
7221+#include "content/public/browser/render_process_host.h"
7222+#include "content/public/browser/web_contents.h"
7223+#include "content/public/common/content_features.h"
7224+#include "libcef/common/javascript/oh_gin_javascript_bridge_messages.h"
7225+#include "oh_gin_javascript_bridge_dispatcher_host.h"
7226+
7227+namespace {
7228+
7229+const char kOhGinJavascriptBridgeObjectDeletionMessageFilterKey[] =
7230+    "OhGinJavascriptBridgeObjectDeletionMessageFilter";
7231+
7232+}  // namespace
7233+namespace NWEB {
7234+OhGinJavascriptBridgeObjectDeletionMessageFilter::
7235+    OhGinJavascriptBridgeObjectDeletionMessageFilter(
7236+        base::PassKey<OhGinJavascriptBridgeObjectDeletionMessageFilter>
7237+            pass_key)
7238+    : BrowserMessageFilter(OhGinJavascriptBridgeMsgStart),
7239+      current_routing_id_(MSG_ROUTING_NONE) {
7240+  DCHECK(base::FeatureList::IsEnabled(features::kMBIMode));
7241+}
7242+
7243+OhGinJavascriptBridgeObjectDeletionMessageFilter::
7244+    ~OhGinJavascriptBridgeObjectDeletionMessageFilter() {}
7245+
7246+void OhGinJavascriptBridgeObjectDeletionMessageFilter::OnDestruct() const {
7247+  if (content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)) {
7248+    delete this;
7249+  } else {
7250+    content::GetUIThreadTaskRunner({})->DeleteSoon(FROM_HERE, this);
7251+  }
7252+}
7253+
7254+bool OhGinJavascriptBridgeObjectDeletionMessageFilter::OnMessageReceived(
7255+    const IPC::Message& message) {
7256+  (void)message;
7257+  return false;
7258+}
7259+
7260+scoped_refptr<base::SequencedTaskRunner>
7261+OhGinJavascriptBridgeObjectDeletionMessageFilter::OverrideTaskRunnerForMessage(
7262+    const IPC::Message& message) {
7263+  (void)message;
7264+  return nullptr;
7265+}
7266+
7267+void OhGinJavascriptBridgeObjectDeletionMessageFilter::AddRoutingIdForHost(
7268+    OhGinJavascriptBridgeDispatcherHost* host,
7269+    content::RenderFrameHost* render_frame_host) {
7270+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
7271+  base::AutoLock locker(hosts_lock_);
7272+  hosts_[render_frame_host->GetRoutingID()] = host;
7273+}
7274+
7275+void OhGinJavascriptBridgeObjectDeletionMessageFilter::RemoveHost(
7276+    const OhGinJavascriptBridgeDispatcherHost* host) {
7277+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
7278+  base::AutoLock locker(hosts_lock_);
7279+  auto iter = hosts_.begin();
7280+  while (iter != hosts_.end()) {
7281+    if (iter->second == host)
7282+      hosts_.erase(iter++);
7283+    else
7284+      ++iter;
7285+  }
7286+}
7287+
7288+void OhGinJavascriptBridgeObjectDeletionMessageFilter::RenderProcessExited(
7289+    content::RenderProcessHost* rph,
7290+    const content::ChildProcessTerminationInfo& info) {
7291+#if DCHECK_IS_ON()
7292+  {
7293+    scoped_refptr<OhGinJavascriptBridgeObjectDeletionMessageFilter> filter =
7294+        base::UserDataAdapter<
7295+            OhGinJavascriptBridgeObjectDeletionMessageFilter>::
7296+            Get(rph, kOhGinJavascriptBridgeObjectDeletionMessageFilterKey);
7297+    DCHECK_EQ(this, filter.get());
7298+  }
7299+#endif
7300+  rph->RemoveObserver(this);
7301+  rph->RemoveUserData(kOhGinJavascriptBridgeObjectDeletionMessageFilterKey);
7302+}
7303+
7304+// static
7305+scoped_refptr<OhGinJavascriptBridgeObjectDeletionMessageFilter>
7306+OhGinJavascriptBridgeObjectDeletionMessageFilter::FromHost(
7307+    content::RenderProcessHost* rph,
7308+    bool create_if_not_exists) {
7309+  DCHECK(base::FeatureList::IsEnabled(features::kMBIMode));
7310+  scoped_refptr<OhGinJavascriptBridgeObjectDeletionMessageFilter> filter =
7311+      base::UserDataAdapter<OhGinJavascriptBridgeObjectDeletionMessageFilter>::
7312+          Get(rph, kOhGinJavascriptBridgeObjectDeletionMessageFilterKey);
7313+  if (!filter && create_if_not_exists) {
7314+    filter =
7315+        base::MakeRefCounted<OhGinJavascriptBridgeObjectDeletionMessageFilter>(
7316+            base::PassKey<OhGinJavascriptBridgeObjectDeletionMessageFilter>());
7317+    rph->AddFilter(filter.get());
7318+    rph->AddObserver(filter.get());
7319+
7320+    rph->SetUserData(
7321+        kOhGinJavascriptBridgeObjectDeletionMessageFilterKey,
7322+        std::make_unique<base::UserDataAdapter<
7323+            OhGinJavascriptBridgeObjectDeletionMessageFilter>>(filter.get()));
7324+  }
7325+  return filter;
7326+}
7327+
7328+scoped_refptr<OhGinJavascriptBridgeDispatcherHost>
7329+OhGinJavascriptBridgeObjectDeletionMessageFilter::FindHost() {
7330+  base::AutoLock locker(hosts_lock_);
7331+  auto iter = hosts_.find(current_routing_id_);
7332+  if (iter != hosts_.end())
7333+    return iter->second;
7334+
7335+  return nullptr;
7336+}
7337+
7338+void OhGinJavascriptBridgeObjectDeletionMessageFilter::OnObjectWrapperDeleted(
7339+    ObjectID object_id) {
7340+  (void)object_id;
7341+}
7342+}  // namespace NWEB
7343\ No newline at end of file
7344diff --git a/cef/libcef/browser/javascript/oh_gin_javascript_bridge_object_deletion_message_filter.h b/cef/libcef/browser/javascript/oh_gin_javascript_bridge_object_deletion_message_filter.h
7345new file mode 100644
7346index 0000000000..68e9350f26
7347--- /dev/null
7348+++ b/cef/libcef/browser/javascript/oh_gin_javascript_bridge_object_deletion_message_filter.h
7349@@ -0,0 +1,85 @@
7350+// Copyright (c) 2022 Huawei Device Co., Ltd.
7351+// Copyright 2018 The Chromium Authors. All rights reserved.
7352+// Use of this source code is governed by a BSD-style license that can be
7353+// found in the LICENSE file.
7354+
7355+#ifndef OH_GIN_JAVASCRIPT_BRIDGE_OBJECT_DELETION_MESSAGE_FILTER_H
7356+#define OH_GIN_JAVASCRIPT_BRIDGE_OBJECT_DELETION_MESSAGE_FILTER_H
7357+
7358+#include <stdint.h>
7359+
7360+#include <map>
7361+#include <set>
7362+
7363+#include "base/memory/ref_counted.h"
7364+#include "base/synchronization/lock.h"
7365+#include "base/thread_annotations.h"
7366+#include "base/types/pass_key.h"
7367+#include "content/public/browser/browser_message_filter.h"
7368+#include "content/public/browser/render_process_host_observer.h"
7369+
7370+#include "content/public/browser/child_process_termination_info.h"
7371+
7372+namespace IPC {
7373+class Message;
7374+}
7375+
7376+namespace content {
7377+class RenderFrameHost;
7378+class BrowserThread;
7379+}  // namespace content
7380+
7381+namespace NWEB {
7382+class OhGinJavascriptBridgeDispatcherHost;
7383+class OhGinJavascriptBridgeObjectDeletionMessageFilter
7384+    : public content::BrowserMessageFilter,
7385+      public content::RenderProcessHostObserver {
7386+ public:
7387+  // BrowserMessageFilter
7388+  void OnDestruct() const override;
7389+  bool OnMessageReceived(const IPC::Message& message) override;
7390+  scoped_refptr<base::SequencedTaskRunner> OverrideTaskRunnerForMessage(
7391+      const IPC::Message& message) override;
7392+
7393+  // RenderProcessHostObserver
7394+  void RenderProcessExited(
7395+      content::RenderProcessHost* rph,
7396+      const content ::ChildProcessTerminationInfo& info) override;
7397+
7398+  // Called on the UI thread.
7399+  void AddRoutingIdForHost(OhGinJavascriptBridgeDispatcherHost* host,
7400+                           content::RenderFrameHost* render_frame_host);
7401+  void RemoveHost(const OhGinJavascriptBridgeDispatcherHost* host);
7402+
7403+  static scoped_refptr<OhGinJavascriptBridgeObjectDeletionMessageFilter>
7404+  FromHost(content::RenderProcessHost* rph, bool create_if_not_exists);
7405+
7406+  OhGinJavascriptBridgeObjectDeletionMessageFilter(
7407+      base::PassKey<OhGinJavascriptBridgeObjectDeletionMessageFilter> pass_key);
7408+
7409+ private:
7410+  typedef int32_t ObjectID;
7411+
7412+  friend class BrowserThread;
7413+  friend class base::DeleteHelper<
7414+      OhGinJavascriptBridgeObjectDeletionMessageFilter>;
7415+
7416+  typedef std::map<int32_t, scoped_refptr<OhGinJavascriptBridgeDispatcherHost>>
7417+      HostMap;
7418+
7419+  ~OhGinJavascriptBridgeObjectDeletionMessageFilter() override;
7420+
7421+  // Called on the background thread.
7422+  scoped_refptr<OhGinJavascriptBridgeDispatcherHost> FindHost();
7423+  void OnObjectWrapperDeleted(ObjectID object_id);
7424+
7425+  // Accessed both from UI and background threads.
7426+  HostMap hosts_ GUARDED_BY(hosts_lock_);
7427+  base::Lock hosts_lock_;
7428+
7429+  // The routing id of the RenderFrameHost whose request we are processing.
7430+  // Used on the background thread.
7431+  int32_t current_routing_id_;
7432+};
7433+}  // namespace NWEB
7434+#endif
7435diff --git a/cef/libcef/browser/javascript/oh_javascript_injector.cc b/cef/libcef/browser/javascript/oh_javascript_injector.cc
7436new file mode 100644
7437index 0000000000..0a37d983e0
7438--- /dev/null
7439+++ b/cef/libcef/browser/javascript/oh_javascript_injector.cc
7440@@ -0,0 +1,33 @@
7441+// Copyright (c) 2022 Huawei Device Co., Ltd.
7442+// Copyright 2018 The Chromium Authors. All rights reserved.
7443+// Use of this source code is governed by a BSD-style license that can be
7444+// found in the LICENSE file.
7445+
7446+#include "oh_javascript_injector.h"
7447+#include "oh_gin_javascript_bridge_dispatcher_host.h"
7448+namespace NWEB {
7449+OhJavascriptInjector::OhJavascriptInjector(content::WebContents* web_contents,
7450+                                           CefRefPtr<CefClient> client) {
7451+  javascript_bridge_dispatcher_host_ =
7452+      new OhGinJavascriptBridgeDispatcherHost(web_contents, client);
7453+  web_contents->SetUserData(UserDataKey(), base::WrapUnique(this));
7454+}
7455+
7456+OhJavascriptInjector::~OhJavascriptInjector() {}
7457+
7458+void OhJavascriptInjector::AddInterface(
7459+    const std::string& object_name,
7460+    const std::vector<std::string> method_list) {
7461+  LOG(INFO) << "AddInterface name : " << object_name.c_str();
7462+  javascript_bridge_dispatcher_host_->AddNamedObject(object_name, method_list);
7463+}
7464+
7465+void OhJavascriptInjector::RemoveInterface(
7466+    const std::string& object_name,
7467+    const std::vector<std::string> method_list) {
7468+  LOG(INFO) << "RemoveInterface name : " << object_name.c_str();
7469+  javascript_bridge_dispatcher_host_->RemoveNamedObject(object_name,
7470+                                                        method_list);
7471+}
7472+WEB_CONTENTS_USER_DATA_KEY_IMPL(OhJavascriptInjector);
7473+}  // namespace NWEB
7474diff --git a/cef/libcef/browser/javascript/oh_javascript_injector.h b/cef/libcef/browser/javascript/oh_javascript_injector.h
7475new file mode 100644
7476index 0000000000..bc60a903da
7477--- /dev/null
7478+++ b/cef/libcef/browser/javascript/oh_javascript_injector.h
7479@@ -0,0 +1,39 @@
7480+// Copyright (c) 2022 Huawei Device Co., Ltd.
7481+// Copyright 2018 The Chromium Authors. All rights reserved.
7482+// Use of this source code is governed by a BSD-style license that can be
7483+// found in the LICENSE file.
7484+
7485+#ifndef OH_JAVASCRIPT_INJECTOR_H
7486+#define OH_JAVASCRIPT_INJECTOR_H
7487+
7488+#include "content/public/browser/web_contents_user_data.h"
7489+#include "include/cef_client.h"
7490+#include "libcef/browser/browser_info.h"
7491+
7492+namespace NWEB {
7493+class OhGinJavascriptBridgeDispatcherHost;
7494+
7495+class OhJavascriptInjector
7496+    : public content::WebContentsUserData<OhJavascriptInjector> {
7497+ public:
7498+  OhJavascriptInjector(content::WebContents* web_contents,
7499+                       CefRefPtr<CefClient> client);
7500+
7501+  OhJavascriptInjector(const OhJavascriptInjector&) = delete;
7502+  OhJavascriptInjector& operator=(const OhJavascriptInjector&) = delete;
7503+  ~OhJavascriptInjector();
7504+
7505+  void AddInterface(const std::string& object_name,
7506+                    const std::vector<std::string> method_list);
7507+  void RemoveInterface(const std::string& object_name,
7508+                       const std::vector<std::string> method_list);
7509+
7510+ private:
7511+  friend class content::WebContentsUserData<OhJavascriptInjector>;
7512+
7513+  scoped_refptr<OhGinJavascriptBridgeDispatcherHost>
7514+      javascript_bridge_dispatcher_host_;
7515+  WEB_CONTENTS_USER_DATA_KEY_DECL();
7516+};
7517+}  // namespace NWEB
7518+#endif
7519\ No newline at end of file
7520diff --git a/cef/libcef/browser/net_service/cookie_manager_impl.cc b/cef/libcef/browser/net_service/cookie_manager_impl.cc
7521index 935cad6c33..67c7419dd7 100644
7522--- a/cef/libcef/browser/net_service/cookie_manager_impl.cc
7523+++ b/cef/libcef/browser/net_service/cookie_manager_impl.cc
7524@@ -46,8 +46,9 @@ void RunAsyncCompletionOnUIThread(CefRefPtr<CefCompletionCallback> callback) {
7525 // Always execute the callback asynchronously.
7526 void SetCookieCallbackImpl(CefRefPtr<CefSetCookieCallback> callback,
7527                            net::CookieAccessResult access_result) {
7528-  if (!callback.get())
7529+  if (!callback.get()) {
7530     return;
7531+  }
7532   const bool is_include = access_result.status.IsInclude();
7533   if (!is_include) {
7534     LOG(WARNING) << "SetCookie failed with reason: "
7535@@ -78,6 +79,13 @@ void ExecuteVisitor(CefRefPtr<CefCookieVisitor> visitor,
7536   auto cookie_manager = GetCookieManager(browser_context);
7537
7538   int total = cookies.size(), count = 0;
7539+  if (total == 0) {
7540+    CefCookie cookie;
7541+    bool deleteCookie = false;
7542+    visitor->Visit(cookie, 0, 0, deleteCookie);
7543+    return;
7544+  }
7545+
7546   for (const auto& cc : cookies) {
7547     CefCookie cookie;
7548     net_service::MakeCefCookie(cc, cookie);
7549@@ -92,6 +100,8 @@ void ExecuteVisitor(CefRefPtr<CefCookieVisitor> visitor,
7550       break;
7551     count++;
7552   }
7553+  std::string cookie_line = net::CanonicalCookie::BuildCookieLine(cookies);
7554+  visitor->SetCookieLine(CefString(cookie_line));
7555 }
7556
7557 // Always execute the callback asynchronously.
7558@@ -114,7 +124,6 @@ void GetCookiesCallbackImpl(
7559   }
7560   GetAllCookiesCallbackImpl(visitor, browser_context_getter, cookies);
7561 }
7562-
7563 }  // namespace
7564
7565 CefCookieManagerImpl::CefCookieManagerImpl() {}
7566@@ -139,6 +148,30 @@ void CefCookieManagerImpl::Initialize(
7567   RunAsyncCompletionOnUIThread(callback);
7568 }
7569
7570+bool CefCookieManagerImpl::IsAcceptCookieAllowed() {
7571+  return accept_cookies_;
7572+}
7573+
7574+void CefCookieManagerImpl::PutAcceptCookieEnabled(bool accept) {
7575+  accept_cookies_ = accept;
7576+}
7577+
7578+bool CefCookieManagerImpl::IsFileURLSchemeCookiesAllowed() {
7579+  return allow_file_scheme_cookies_;
7580+}
7581+
7582+void CefCookieManagerImpl::PutAcceptFileURLSchemeCookiesEnabled(bool allow) {
7583+  if (!ValidContext()) {
7584+    StoreOrTriggerInitCallback(base::BindOnce(
7585+        base::IgnoreResult(&CefCookieManagerImpl::
7586+                               PutAcceptFileURLSchemeCookiesEnabledInternal),
7587+        this, allow));
7588+    return;
7589+  }
7590+
7591+  PutAcceptFileURLSchemeCookiesEnabledInternal(allow);
7592+}
7593+
7594 bool CefCookieManagerImpl::VisitAllCookies(
7595     CefRefPtr<CefCookieVisitor> visitor) {
7596   if (!visitor.get())
7597@@ -179,8 +212,9 @@ bool CefCookieManagerImpl::SetCookie(const CefString& url,
7598                                      const CefCookie& cookie,
7599                                      CefRefPtr<CefSetCookieCallback> callback) {
7600   GURL gurl = GURL(url.ToString());
7601-  if (!gurl.is_valid())
7602+  if (!gurl.is_valid()) {
7603     return false;
7604+  }
7605
7606   if (!ValidContext()) {
7607     StoreOrTriggerInitCallback(base::BindOnce(
7608@@ -195,6 +229,7 @@ bool CefCookieManagerImpl::SetCookie(const CefString& url,
7609 bool CefCookieManagerImpl::DeleteCookies(
7610     const CefString& url,
7611     const CefString& cookie_name,
7612+    bool is_session,
7613     CefRefPtr<CefDeleteCookiesCallback> callback) {
7614   // Empty URLs are allowed but not invalid URLs.
7615   GURL gurl = GURL(url.ToString());
7616@@ -204,11 +239,11 @@ bool CefCookieManagerImpl::DeleteCookies(
7617   if (!ValidContext()) {
7618     StoreOrTriggerInitCallback(base::BindOnce(
7619         base::IgnoreResult(&CefCookieManagerImpl::DeleteCookiesInternal), this,
7620-        gurl, cookie_name, callback));
7621+        gurl, cookie_name, is_session, callback));
7622     return true;
7623   }
7624
7625-  return DeleteCookiesInternal(gurl, cookie_name, callback);
7626+  return DeleteCookiesInternal(gurl, cookie_name, is_session, callback);
7627 }
7628
7629 bool CefCookieManagerImpl::FlushStore(
7630@@ -223,6 +258,30 @@ bool CefCookieManagerImpl::FlushStore(
7631   return FlushStoreInternal(callback);
7632 }
7633
7634+void CefCookieManagerImpl::PutAcceptFileURLSchemeCookiesEnabledCompleted(
7635+    bool allow,
7636+    bool can_change_schemes) {
7637+  if (can_change_schemes) {
7638+    allow_file_scheme_cookies_ = allow;
7639+  }
7640+}
7641+
7642+bool CefCookieManagerImpl::PutAcceptFileURLSchemeCookiesEnabledInternal(
7643+    bool allow) {
7644+  DCHECK(ValidContext());
7645+  auto browser_context = GetBrowserContext(browser_context_getter_);
7646+  if (!browser_context)
7647+    return false;
7648+
7649+  GetCookieManager(browser_context)
7650+      ->AllowFileSchemeCookies(
7651+          allow,
7652+          base::BindOnce(&CefCookieManagerImpl::
7653+                             PutAcceptFileURLSchemeCookiesEnabledCompleted,
7654+                         base::Unretained(this), allow));
7655+  return true;
7656+}
7657+
7658 bool CefCookieManagerImpl::VisitAllCookiesInternal(
7659     CefRefPtr<CefCookieVisitor> visitor) {
7660   DCHECK(ValidContext());
7661@@ -308,7 +367,6 @@ bool CefCookieManagerImpl::SetCookieInternal(
7662   auto browser_context = GetBrowserContext(browser_context_getter_);
7663   if (!browser_context)
7664     return false;
7665-
7666   GetCookieManager(browser_context)
7667       ->SetCanonicalCookie(*canonical_cookie, url, options,
7668                            base::Bind(SetCookieCallbackImpl, callback));
7669@@ -318,6 +376,7 @@ bool CefCookieManagerImpl::SetCookieInternal(
7670 bool CefCookieManagerImpl::DeleteCookiesInternal(
7671     const GURL& url,
7672     const CefString& cookie_name,
7673+    bool is_session,
7674     CefRefPtr<CefDeleteCookiesCallback> callback) {
7675   DCHECK(ValidContext());
7676   DCHECK(url.is_empty() || url.is_valid());
7677@@ -336,6 +395,11 @@ bool CefCookieManagerImpl::DeleteCookiesInternal(
7678     deletion_filter->cookie_name = cookie_name;
7679   }
7680
7681+  if (is_session) {
7682+    deletion_filter->session_control =
7683+        network::mojom::CookieDeletionSessionControl::SESSION_COOKIES;
7684+  }
7685+
7686   auto browser_context = GetBrowserContext(browser_context_getter_);
7687   if (!browser_context)
7688     return false;
7689@@ -388,3 +452,10 @@ CefRefPtr<CefCookieManager> CefCookieManager::GetGlobalManager(
7690   CefRefPtr<CefRequestContext> context = CefRequestContext::GetGlobalContext();
7691   return context ? context->GetCookieManager(callback) : nullptr;
7692 }
7693+
7694+bool CefCookieManager::CreateCefCookie(const CefString& url,
7695+                                       const CefString& value,
7696+                                       CefCookie& cef_cookie) {
7697+  return net_service::MakeCefCookie(GURL(url.ToString()), value.ToString(),
7698+                                    cef_cookie);
7699+}
7700diff --git a/cef/libcef/browser/net_service/cookie_manager_impl.h b/cef/libcef/browser/net_service/cookie_manager_impl.h
7701index 036cc3edfb..860ec7b90c 100644
7702--- a/cef/libcef/browser/net_service/cookie_manager_impl.h
7703+++ b/cef/libcef/browser/net_service/cookie_manager_impl.h
7704@@ -5,6 +5,8 @@
7705 #ifndef CEF_LIBCEF_BROWSER_NET_SERVICE_COOKIE_MANAGER_IMPL_H_
7706 #define CEF_LIBCEF_BROWSER_NET_SERVICE_COOKIE_MANAGER_IMPL_H_
7707
7708+#include <atomic>
7709+
7710 #include "include/cef_cookie.h"
7711 #include "libcef/browser/browser_context.h"
7712 #include "libcef/browser/thread_util.h"
7713@@ -23,6 +25,10 @@ class CefCookieManagerImpl : public CefCookieManager {
7714                   CefRefPtr<CefCompletionCallback> callback);
7715
7716   // CefCookieManager methods.
7717+  bool IsAcceptCookieAllowed() override;
7718+  void PutAcceptCookieEnabled(bool accept) override;
7719+  bool IsFileURLSchemeCookiesAllowed() override;
7720+  void PutAcceptFileURLSchemeCookiesEnabled(bool allow) override;
7721   bool VisitAllCookies(CefRefPtr<CefCookieVisitor> visitor) override;
7722   bool VisitUrlCookies(const CefString& url,
7723                        bool includeHttpOnly,
7724@@ -32,10 +38,13 @@ class CefCookieManagerImpl : public CefCookieManager {
7725                  CefRefPtr<CefSetCookieCallback> callback) override;
7726   bool DeleteCookies(const CefString& url,
7727                      const CefString& cookie_name,
7728+                     bool is_session,
7729                      CefRefPtr<CefDeleteCookiesCallback> callback) override;
7730   bool FlushStore(CefRefPtr<CefCompletionCallback> callback) override;
7731
7732  private:
7733+  void PutAcceptFileURLSchemeCookiesEnabledCompleted(bool allow, bool can_change_schemes);
7734+  bool PutAcceptFileURLSchemeCookiesEnabledInternal(bool allow);
7735   bool VisitAllCookiesInternal(CefRefPtr<CefCookieVisitor> visitor);
7736   bool VisitUrlCookiesInternal(const GURL& url,
7737                                bool includeHttpOnly,
7738@@ -45,6 +54,7 @@ class CefCookieManagerImpl : public CefCookieManager {
7739                          CefRefPtr<CefSetCookieCallback> callback);
7740   bool DeleteCookiesInternal(const GURL& url,
7741                              const CefString& cookie_name,
7742+                             bool is_session,
7743                              CefRefPtr<CefDeleteCookiesCallback> callback);
7744   bool FlushStoreInternal(CefRefPtr<CefCompletionCallback> callback);
7745
7746@@ -58,6 +68,8 @@ class CefCookieManagerImpl : public CefCookieManager {
7747   CefBrowserContext::Getter browser_context_getter_;
7748
7749   bool initialized_ = false;
7750+  std::atomic<bool> accept_cookies_ = true;
7751+  std::atomic<bool> allow_file_scheme_cookies_ = false;
7752   std::vector<base::OnceClosure> init_callbacks_;
7753
7754   IMPLEMENT_REFCOUNTING(CefCookieManagerImpl);
7755diff --git a/cef/libcef/browser/net_service/net_helpers.cc b/cef/libcef/browser/net_service/net_helpers.cc
7756new file mode 100644
7757index 0000000000..e1a9b4cf59
7758--- /dev/null
7759+++ b/cef/libcef/browser/net_service/net_helpers.cc
7760@@ -0,0 +1,53 @@
7761+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
7762+// Use of this source code is governed by a BSD-style license that can be
7763+// found in the LICENSE file.
7764+
7765+#include "libcef/browser/net_service/net_helpers.h"
7766+
7767+#include "url/gurl.h"
7768+#include "include/base/cef_logging.h"
7769+#include "base/strings/string_util.h"
7770+#include "base/path_service.h"
7771+#include "base/base_paths_ohos.h"
7772+#include "base/files/file_path.h"
7773+
7774+namespace net_service {
7775+
7776+bool NetHelpers::allow_content_access = false;
7777+bool NetHelpers::allow_file_access = false;
7778+
7779+bool NetHelpers::ShouldBlockContentUrls() {
7780+  return !allow_content_access;
7781+}
7782+
7783+bool NetHelpers::ShouldBlockFileUrls() {
7784+  return !allow_file_access;
7785+}
7786+
7787+bool IsSpecialFileUrl(const GURL& url) {
7788+  if (!url.is_valid() || !url.SchemeIsFile() || !url.has_path())
7789+    return false;
7790+  base::FilePath OhosAppDataPath;
7791+  if (!base::PathService::Get(base::DIR_OHOS_APP_DATA, &OhosAppDataPath)) {
7792+    return false;
7793+  }
7794+  LOG(INFO) << "AppDataPath:" << OhosAppDataPath.value();
7795+
7796+  return base::StartsWith(url.path(), OhosAppDataPath.value(),
7797+                          base::CompareCase::SENSITIVE);
7798+}
7799+
7800+bool IsURLBlocked(const GURL& url) {
7801+  // Part of implementation of NWebPreference.allowContentAccess.
7802+ if (url.SchemeIs(url::kContentScheme) && NetHelpers::ShouldBlockContentUrls())
7803+   return true;
7804+
7805+  // Part of implementation of NWebPreference.allowFileAccess.
7806+  if (url.SchemeIsFile() && NetHelpers::ShouldBlockFileUrls()) {
7807+    // Appdatas are always available.
7808+    return !IsSpecialFileUrl(url);
7809+  }
7810+  return false;
7811+}
7812+
7813+}  // namespace net_service
7814diff --git a/cef/libcef/browser/net_service/net_helpers.h b/cef/libcef/browser/net_service/net_helpers.h
7815new file mode 100644
7816index 0000000000..2bd485ad36
7817--- /dev/null
7818+++ b/cef/libcef/browser/net_service/net_helpers.h
7819@@ -0,0 +1,31 @@
7820+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
7821+// Use of this source code is governed by a BSD-style license that can be
7822+// found in the LICENSE file.
7823+
7824+#ifndef CEF_LIBCEF_BROWSER_NET_SERVICE_NET_HELPERS_H_
7825+#define CEF_LIBCEF_BROWSER_NET_SERVICE_NET_HELPERS_H_
7826+
7827+class GURL;
7828+
7829+namespace net_service {
7830+
7831+#define NETHELPERS_EXPORT __attribute__((visibility("default")))
7832+
7833+class NETHELPERS_EXPORT NetHelpers {
7834+public:
7835+  static bool ShouldBlockContentUrls();
7836+  static bool ShouldBlockFileUrls();
7837+
7838+  static bool allow_content_access;
7839+  static bool allow_file_access;
7840+};
7841+
7842+bool IsSpecialFileUrl(const GURL& url);
7843+
7844+// Returns true if the given URL should be aborted with
7845+// net::ERR_ACCESS_DENIED.
7846+bool IsURLBlocked(const GURL& url);
7847+
7848+}  // namespace net_service
7849+
7850+#endif  // CEF_LIBCEF_BROWSER_NET_SERVICE_NET_HELPERS_H_
7851diff --git a/cef/libcef/browser/net_service/proxy_url_loader_factory.cc b/cef/libcef/browser/net_service/proxy_url_loader_factory.cc
7852index c5546c29f0..6949ca15fb 100644
7853--- a/cef/libcef/browser/net_service/proxy_url_loader_factory.cc
7854+++ b/cef/libcef/browser/net_service/proxy_url_loader_factory.cc
7855@@ -1,16 +1,18 @@
7856-// Copyright (c) 2019 The Chromium Embedded Framework Authors. Portions
7857-// Copyright (c) 2018 The Chromium Authors. All rights reserved. Use of this
7858-// source code is governed by a BSD-style license that can be found in the
7859-// LICENSE file.
7860+// Copyright (c) 2022 Huawei Device Co., Ltd.
7861+// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
7862+// reserved. Use of this source code is governed by a BSD-style license that can
7863+// be found in the LICENSE file.
7864
7865 #include "libcef/browser/net_service/proxy_url_loader_factory.h"
7866
7867 #include "libcef/browser/context.h"
7868 #include "libcef/browser/origin_whitelist_impl.h"
7869 #include "libcef/browser/thread_util.h"
7870+#include "libcef/browser/net_service/net_helpers.h"
7871 #include "libcef/common/cef_switches.h"
7872 #include "libcef/common/net/scheme_registration.h"
7873 #include "libcef/common/net_service/net_service_util.h"
7874+#include "libcef/common/request_impl.h"
7875
7876 #include "base/barrier_closure.h"
7877 #include "base/command_line.h"
7878@@ -62,6 +64,28 @@ bool DisableRequestHandlingForTesting() {
7879   return disabled;
7880 }
7881
7882+CefRefPtr<CefResponse> ExtractHttpErrorResponse(const net::HttpResponseHeaders* headers) {
7883+  CefRefPtr<CefResponse> response = CefResponse::Create();
7884+  response->SetStatus(headers->response_code());
7885+  response->SetStatusText(headers->GetStatusText());
7886+
7887+  size_t headers_line = 0;
7888+  std::string header_name, header_value;
7889+  CefResponse::HeaderMap map;
7890+  while (headers->EnumerateHeaderLines(
7891+      &headers_line, &header_name, &header_value)) {
7892+    map.insert({CefString(header_name), CefString(header_value)});
7893+  }
7894+  response->SetHeaderMap(map);
7895+  std::string mime_type;
7896+  std::string encoding;
7897+  headers->GetMimeType(&mime_type);
7898+  headers->GetCharset(&encoding);
7899+  response->SetMimeType(CefString(mime_type));
7900+  response->SetCharset(CefString(encoding));
7901+  return response;
7902+}
7903+
7904 }  // namespace
7905
7906 // Owns all of the ProxyURLLoaderFactorys for a given BrowserContext. Since
7907@@ -209,6 +233,12 @@ class InterceptedRequest : public network::mojom::URLLoader,
7908   // Called from InterceptDelegate::OnInputStreamOpenFailed.
7909   void InputStreamFailed(bool restart_needed);
7910
7911+  void OnHttpErrorForUIThread(int32_t,
7912+                                      CefRefPtr<CefRequest> request,
7913+                                      bool is_main_frame,
7914+                                      bool has_user_gesture,
7915+                                      CefRefPtr<CefResponse> error_response);
7916+
7917   // mojom::TrustedHeaderClient methods:
7918   void OnBeforeSendHeaders(const net::HttpRequestHeaders& headers,
7919                            OnBeforeSendHeadersCallback callback) override;
7920@@ -460,6 +490,12 @@ void InterceptedRequest::Restart() {
7921     }
7922   }
7923
7924+  if (IsURLBlocked(request_.url)) {
7925+    SendErrorAndCompleteImmediately(net::ERR_ACCESS_DENIED);
7926+    LOG(INFO) << "File url access denied! url=" << request_.url.spec();
7927+    return;
7928+  }
7929+
7930   const GURL original_url = request_.url;
7931
7932   factory_->request_handler_->OnBeforeRequest(
7933@@ -551,7 +587,23 @@ void InterceptedRequest::OnReceiveEarlyHints(
7934 void InterceptedRequest::OnReceiveResponse(
7935     network::mojom::URLResponseHeadPtr head) {
7936   current_response_ = std::move(head);
7937-
7938+  if (current_response_->headers && current_response_->headers->response_code() >= 400) {
7939+    // The WebViewClient onReceivedHttpError callback will be invoked for any resource
7940+    // (such as main page, iframe, image, etc.) with status code >= 400
7941+    auto error_reponse = ExtractHttpErrorResponse(current_response_->headers.get());
7942+    CefRefPtr<CefRequestImpl> request = new CefRequestImpl();
7943+    request->SetURL(CefString(request_.url.spec()));
7944+    request->SetMethod(CefString(request_.method));
7945+    request->Set(request_.headers);
7946+    content::GetUIThreadTaskRunner({})->PostTask(
7947+        FROM_HERE, base::BindOnce(&InterceptedRequest::OnHttpErrorForUIThread,
7948+                                  base::Unretained(this),
7949+                                  id_,
7950+                                  request,
7951+                                  request_.is_main_frame,
7952+                                  request_.has_user_gesture,
7953+                                  error_reponse));
7954+  }
7955   if (current_request_uses_header_client_) {
7956     // Use the headers we got from OnHeadersReceived as that'll contain
7957     // Set-Cookie if it existed.
7958@@ -1147,6 +1199,22 @@ void InterceptedRequest::OnUploadProgressACK() {
7959   waiting_for_upload_progress_ack_ = false;
7960 }
7961
7962+void InterceptedRequest::OnHttpErrorForUIThread(int32_t id,
7963+                                                        CefRefPtr<CefRequest> request,
7964+                                                        bool is_main_frame,
7965+                                                        bool has_user_gesture,
7966+                                                        CefRefPtr<CefResponse> error_response) {
7967+  if (!factory_) {
7968+    LOG(INFO) << "factory is invalid";
7969+    return;
7970+  }
7971+  if (!factory_->request_handler_) {
7972+    LOG(INFO) << "request handler is invalid";
7973+    return;
7974+  }
7975+  factory_->request_handler_->OnHttpError(id, request, is_main_frame, has_user_gesture, error_response);
7976+}
7977+
7978 //==============================
7979 // InterceptedRequestHandler
7980 //==============================
7981diff --git a/cef/libcef/browser/net_service/proxy_url_loader_factory.h b/cef/libcef/browser/net_service/proxy_url_loader_factory.h
7982index 16bde50185..5f26acd9ff 100644
7983--- a/cef/libcef/browser/net_service/proxy_url_loader_factory.h
7984+++ b/cef/libcef/browser/net_service/proxy_url_loader_factory.h
7985@@ -1,11 +1,12 @@
7986-// Copyright (c) 2019 The Chromium Embedded Framework Authors. Portions
7987-// Copyright (c) 2018 The Chromium Authors. All rights reserved. Use of this
7988-// source code is governed by a BSD-style license that can be found in the
7989-// LICENSE file.
7990+// Copyright (c) 2022 Huawei Device Co., Ltd.
7991+// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
7992+// reserved. Use of this source code is governed by a BSD-style license that can
7993+// be found in the LICENSE file.
7994
7995 #ifndef CEF_LIBCEF_BROWSER_NET_SERVICE_PROXY_URL_LOADER_FACTORY_H_
7996 #define CEF_LIBCEF_BROWSER_NET_SERVICE_PROXY_URL_LOADER_FACTORY_H_
7997
7998+#include "include/internal/cef_ptr.h"
7999 #include "libcef/browser/net_service/stream_reader_url_loader.h"
8000
8001 #include "base/callback.h"
8002@@ -21,6 +22,9 @@
8003 #include "services/network/public/mojom/network_context.mojom.h"
8004 #include "services/network/public/mojom/url_loader_factory.mojom.h"
8005
8006+class CefRequest;
8007+class CefResponse;
8008+
8009 namespace content {
8010 class ResourceContext;
8011 }
8012@@ -125,6 +129,13 @@ class InterceptedRequestHandler {
8013                               int error_code,
8014                               bool safebrowsing_hit) {}
8015
8016+  // Called on received http request error.
8017+  virtual void OnHttpError(int32_t request_id,
8018+                                   CefRefPtr<CefRequest> request,
8019+                                   bool is_main_frame,
8020+                                   bool has_user_gesture,
8021+                                   CefRefPtr<CefResponse> error_response) {}
8022+
8023  private:
8024   DISALLOW_COPY_AND_ASSIGN(InterceptedRequestHandler);
8025 };
8026diff --git a/cef/libcef/browser/net_service/resource_request_handler_wrapper.cc b/cef/libcef/browser/net_service/resource_request_handler_wrapper.cc
8027index 1e57bef431..43d6fd9933 100644
8028--- a/cef/libcef/browser/net_service/resource_request_handler_wrapper.cc
8029+++ b/cef/libcef/browser/net_service/resource_request_handler_wrapper.cc
8030@@ -1,6 +1,7 @@
8031-// Copyright (c) 2019 The Chromium Embedded Framework Authors. All rights
8032-// reserved. Use of this source code is governed by a BSD-style license that
8033-// can be found in the LICENSE file.
8034+// Copyright (c) 2022 Huawei Device Co., Ltd.
8035+// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
8036+// reserved. Use of this source code is governed by a BSD-style license that can
8037+// be found in the LICENSE file.
8038
8039 #include "libcef/browser/net_service/resource_request_handler_wrapper.h"
8040
8041@@ -669,7 +670,6 @@ class InterceptedRequestHandlerWrapper : public InterceptedRequestHandler {
8042       // The request will be handled by the NetworkService. Remove the
8043       // "Accept-Language" header here so that it can be re-added in
8044       // URLRequestHttpJob::AddExtraHeaders with correct ordering applied.
8045-      request->headers.RemoveHeader(net::HttpRequestHeaders::kAcceptLanguage);
8046     }
8047
8048     // Continue the request.
8049@@ -993,6 +993,27 @@ class InterceptedRequestHandlerWrapper : public InterceptedRequestHandler {
8050     RemoveState(request_id);
8051   }
8052
8053+  void OnHttpError(int32_t request_id,
8054+                   CefRefPtr<CefRequest> request,
8055+                   bool is_main_frame,
8056+                   bool has_user_gesture,
8057+                   CefRefPtr<CefResponse> error_response) override {
8058+    CEF_REQUIRE_UIT();
8059+    if (!init_state_->browser_) {
8060+      return;
8061+    }
8062+    CefRefPtr<CefClient> client = init_state_->browser_->GetHost()->GetClient();
8063+    if (!client) {
8064+      return;
8065+    }
8066+    CefRefPtr<CefLoadHandler> load_handler = client->GetLoadHandler();
8067+    if (!load_handler) {
8068+      return;
8069+    }
8070+    load_handler->OnHttpError(request, is_main_frame, has_user_gesture,
8071+                              error_response);
8072+  }
8073+
8074  private:
8075   void CallHandlerOnComplete(RequestState* state,
8076                              const network::URLLoaderCompletionStatus& status) {
8077diff --git a/cef/libcef/browser/net_service/resource_request_handler_wrapper.h b/cef/libcef/browser/net_service/resource_request_handler_wrapper.h
8078index 52d2b27921..60ffeb66bf 100644
8079--- a/cef/libcef/browser/net_service/resource_request_handler_wrapper.h
8080+++ b/cef/libcef/browser/net_service/resource_request_handler_wrapper.h
8081@@ -1,6 +1,7 @@
8082-// Copyright (c) 2019 The Chromium Embedded Framework Authors. All rights
8083-// reserved. Use of this source code is governed by a BSD-style license that
8084-// can be found in the LICENSE file.
8085+// Copyright (c) 2022 Huawei Device Co., Ltd.
8086+// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
8087+// reserved. Use of this source code is governed by a BSD-style license that can
8088+// be found in the LICENSE file.
8089
8090 #ifndef CEF_LIBCEF_BROWSER_NET_SERVICE_RESOURCE_REQUEST_HANDLER_WRAPPER_H_
8091 #define CEF_LIBCEF_BROWSER_NET_SERVICE_RESOURCE_REQUEST_HANDLER_WRAPPER_H_
8092diff --git a/cef/libcef/browser/osr/browser_platform_delegate_osr.cc b/cef/libcef/browser/osr/browser_platform_delegate_osr.cc
8093index a086176e84..c298893749 100644
8094--- a/cef/libcef/browser/osr/browser_platform_delegate_osr.cc
8095+++ b/cef/libcef/browser/osr/browser_platform_delegate_osr.cc
8096@@ -157,8 +157,10 @@ void CefBrowserPlatformDelegateOsr::SendMouseWheelEvent(
8097
8098 void CefBrowserPlatformDelegateOsr::SendTouchEvent(const CefTouchEvent& event) {
8099   CefRenderWidgetHostViewOSR* view = GetOSRHostView();
8100-  if (view)
8101-    view->SendTouchEvent(event);
8102+  if (!view)
8103+    return;
8104+  view->SendTouchEvent(event);
8105+  SendTouchEventToRender(event);
8106 }
8107
8108 void CefBrowserPlatformDelegateOsr::SendFocusEvent(bool setFocus) {
8109diff --git a/cef/libcef/browser/osr/render_widget_host_view_osr.cc b/cef/libcef/browser/osr/render_widget_host_view_osr.cc
8110index 49c1568285..b8ccb16d4f 100644
8111--- a/cef/libcef/browser/osr/render_widget_host_view_osr.cc
8112+++ b/cef/libcef/browser/osr/render_widget_host_view_osr.cc
8113@@ -1,7 +1,7 @@
8114-// Copyright (c) 2014 The Chromium Embedded Framework Authors.
8115-// Portions copyright (c) 2012 The Chromium Authors. All rights reserved.
8116-// Use of this source code is governed by a BSD-style license that can be
8117-// found in the LICENSE file.
8118+// Copyright (c) 2022 Huawei Device Co., Ltd.
8119+// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
8120+// reserved. Use of this source code is governed by a BSD-style license that can
8121+// be found in the LICENSE file.
8122
8123 #include "libcef/browser/osr/render_widget_host_view_osr.h"
8124
8125@@ -931,6 +931,16 @@ void CefRenderWidgetHostViewOSR::OnRenderFrameMetadataChangedAfterActivation(
8126                      weak_ptr_factory_.GetWeakPtr()));
8127     }
8128   }
8129+#if defined(OS_OHOS)
8130+  gfx::SizeF root_layer_size = metadata.root_layer_size;
8131+  if (root_layer_size != root_layer_size_) {
8132+    root_layer_size_ = root_layer_size;
8133+
8134+    // Send the notification asynchronously.
8135+    CEF_POST_TASK(CEF_UIT, base::Bind(&CefRenderWidgetHostViewOSR::OnRootLayerChanged,
8136+                  weak_ptr_factory_.GetWeakPtr()));
8137+  }
8138+#endif
8139 }
8140
8141 std::unique_ptr<viz::HostDisplayClient>
8142@@ -1622,6 +1632,18 @@ void CefRenderWidgetHostViewOSR::OnScrollOffsetChanged() {
8143   is_scroll_offset_changed_pending_ = false;
8144 }
8145
8146+#if defined(OS_OHOS)
8147+void CefRenderWidgetHostViewOSR::OnRootLayerChanged() {
8148+  if (browser_impl_.get()) {
8149+    CefRefPtr<CefRenderHandler> handler =
8150+        browser_impl_->client()->GetRenderHandler();
8151+    CHECK(handler);
8152+    handler->OnRootLayerChanged(browser_impl_.get(), root_layer_size_.height(),
8153+                                root_layer_size_.width());
8154+  }
8155+}
8156+#endif
8157+
8158 void CefRenderWidgetHostViewOSR::AddGuestHostView(
8159     CefRenderWidgetHostViewOSR* guest_host) {
8160   guest_host_views_.insert(guest_host);
8161@@ -1684,3 +1706,11 @@ void CefRenderWidgetHostViewOSR::UpdateBackgroundColorFromRenderer(
8162   GetRootLayer()->SetFillsBoundsOpaquely(opaque);
8163   GetRootLayer()->SetColor(color);
8164 }
8165+
8166+void CefRenderWidgetHostViewOSR::SetDoubleTapSupportEnabled(bool enabled) {
8167+  gesture_provider_.SetDoubleTapSupportForPlatformEnabled(enabled);
8168+}
8169+
8170+void CefRenderWidgetHostViewOSR::SetMultiTouchZoomSupportEnabled(bool enabled) {
8171+  gesture_provider_.SetMultiTouchZoomSupportEnabled(enabled);
8172+}
8173diff --git a/cef/libcef/browser/osr/render_widget_host_view_osr.h b/cef/libcef/browser/osr/render_widget_host_view_osr.h
8174index 2f63d0d7de..ce0fae2b71 100644
8175--- a/cef/libcef/browser/osr/render_widget_host_view_osr.h
8176+++ b/cef/libcef/browser/osr/render_widget_host_view_osr.h
8177@@ -1,7 +1,7 @@
8178-// Copyright (c) 2014 The Chromium Embedded Framework Authors.
8179-// Portions copyright (c) 2012 The Chromium Authors. All rights reserved.
8180-// Use of this source code is governed by a BSD-style license that can be
8181-// found in the LICENSE file.
8182+// Copyright (c) 2022 Huawei Device Co., Ltd.
8183+// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
8184+// reserved. Use of this source code is governed by a BSD-style license that can
8185+// be found in the LICENSE file.
8186
8187 #ifndef CEF_LIBCEF_BROWSER_OSR_RENDER_WIDGET_HOST_VIEW_OSR_H_
8188 #define CEF_LIBCEF_BROWSER_OSR_RENDER_WIDGET_HOST_VIEW_OSR_H_
8189@@ -274,6 +274,9 @@ class CefRenderWidgetHostViewOSR
8190
8191   void ReleaseCompositor();
8192
8193+  void SetDoubleTapSupportEnabled(bool enabled);
8194+  void SetMultiTouchZoomSupportEnabled(bool enabled);
8195+
8196  private:
8197   void SetFrameRate();
8198   bool SetDeviceScaleFactor();
8199@@ -288,6 +291,10 @@ class CefRenderWidgetHostViewOSR
8200
8201   void OnScrollOffsetChanged();
8202
8203+#if defined(OS_OHOS)
8204+  void OnRootLayerChanged();
8205+#endif
8206+
8207   void AddGuestHostView(CefRenderWidgetHostViewOSR* guest_host);
8208   void RemoveGuestHostView(CefRenderWidgetHostViewOSR* guest_host);
8209
8210@@ -372,6 +379,9 @@ class CefRenderWidgetHostViewOSR
8211   CefRenderWidgetHostViewOSR* popup_host_view_ = nullptr;
8212   CefRenderWidgetHostViewOSR* child_host_view_ = nullptr;
8213   std::set<CefRenderWidgetHostViewOSR*> guest_host_views_;
8214+#if defined(OS_OHOS)
8215+  gfx::SizeF root_layer_size_;
8216+#endif
8217
8218   CefRefPtr<AlloyBrowserHostImpl> browser_impl_;
8219
8220diff --git a/cef/libcef/browser/permission/alloy_access_request.cc b/cef/libcef/browser/permission/alloy_access_request.cc
8221new file mode 100644
8222index 0000000000..c15d3bd73d
8223--- /dev/null
8224+++ b/cef/libcef/browser/permission/alloy_access_request.cc
8225@@ -0,0 +1,26 @@
8226+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
8227+// Use of this source code is governed by a BSD-style license that can be
8228+// found in the LICENSE file.
8229+
8230+#include "libcef/browser/permission/alloy_access_request.h"
8231+
8232+AlloyAccessRequest::AlloyAccessRequest(const CefString& origin,
8233+                                       int resources,
8234+                                       cef_permission_callback_t callback)
8235+    : origin_(origin), resources_(resources), callback_(std::move(callback)) {}
8236+
8237+AlloyAccessRequest::~AlloyAccessRequest() {
8238+  std::move(callback_).Run(false);
8239+}
8240+
8241+CefString AlloyAccessRequest::Origin() {
8242+  return origin_;
8243+}
8244+
8245+int AlloyAccessRequest::ResourceAcessId() {
8246+  return resources_;
8247+}
8248+
8249+void AlloyAccessRequest::ReportRequestResult(bool allowed) {
8250+  std::move(callback_).Run(allowed);
8251+}
8252\ No newline at end of file
8253diff --git a/cef/libcef/browser/permission/alloy_access_request.h b/cef/libcef/browser/permission/alloy_access_request.h
8254new file mode 100644
8255index 0000000000..5342f0a3a4
8256--- /dev/null
8257+++ b/cef/libcef/browser/permission/alloy_access_request.h
8258@@ -0,0 +1,48 @@
8259+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
8260+// Use of this source code is governed by a BSD-style license that can be
8261+// found in the LICENSE file.
8262+
8263+#ifndef CEF_LIBCEF_BROWSER_PERMISSION_ALLOY_ACCESS_REQUEST_H_
8264+#define CEF_LIBCEF_BROWSER_PERMISSION_ALLOY_ACCESS_REQUEST_H_
8265+
8266+#include <memory>
8267+
8268+#include "base/macros.h"
8269+
8270+#include "include/cef_permission_request.h"
8271+
8272+// This class is used to handle the permission request which just needs
8273+// a callback with bool parameter to indicate the permission granted or not. It
8274+// works with PermissionRequestHandler. The specific permission request should
8275+// implement the CefAccessRequest.
8276+class AlloyAccessRequest : public CefAccessRequest {
8277+ public:
8278+  enum Resources {
8279+    GEOLOCATION = 1 << 0,
8280+    VIDEO_CAPTURE = 1 << 1,
8281+    AUDIO_CAPTURE = 1 << 2,
8282+    PROTECTED_MEDIA_ID = 1 << 3,
8283+    MIDI_SYSEX = 1 << 4,
8284+  };
8285+
8286+  AlloyAccessRequest(const CefString& origin,
8287+                     int resources,
8288+                     cef_permission_callback_t callback);
8289+  ~AlloyAccessRequest() override;
8290+
8291+  CefString Origin() override;
8292+
8293+  int ResourceAcessId() override;
8294+
8295+  void ReportRequestResult(bool allowed) override;
8296+
8297+ private:
8298+  const CefString& origin_;
8299+  int resources_;
8300+  cef_permission_callback_t callback_;
8301+
8302+  IMPLEMENT_REFCOUNTING(AlloyAccessRequest);
8303+  DISALLOW_COPY_AND_ASSIGN(AlloyAccessRequest);
8304+};
8305+
8306+#endif  // CEF_LIBCEF_BROWSER_PERMISSION_ALLOY_ACCESS_REQUEST_H_
8307diff --git a/cef/libcef/browser/permission/alloy_geolocation_access.cc b/cef/libcef/browser/permission/alloy_geolocation_access.cc
8308new file mode 100644
8309index 0000000000..e45567a8c9
8310--- /dev/null
8311+++ b/cef/libcef/browser/permission/alloy_geolocation_access.cc
8312@@ -0,0 +1,23 @@
8313+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
8314+// Use of this source code is governed by a BSD-style license that can be
8315+// found in the LICENSE file.
8316+
8317+#include "libcef/browser/permission/alloy_geolocation_access.h"
8318+
8319+#include "base/logging.h"
8320+
8321+bool AlloyGeolocationAccess::ContainOrigin(const CefString& origin) {
8322+  return false;
8323+}
8324+
8325+bool AlloyGeolocationAccess::IsOriginAccessEnabled(const CefString& origin) {
8326+  return true;
8327+}
8328+
8329+void AlloyGeolocationAccess::Enabled(const CefString& origin) {}
8330+
8331+void AlloyGeolocationAccess::Disabled(const CefString& origin) {}
8332+
8333+std::string AlloyGeolocationAccess::GetOriginKey(std::string& origin) {
8334+  return pref_prefix_ + origin;
8335+}
8336diff --git a/cef/libcef/browser/permission/alloy_geolocation_access.h b/cef/libcef/browser/permission/alloy_geolocation_access.h
8337new file mode 100644
8338index 0000000000..e36e23e976
8339--- /dev/null
8340+++ b/cef/libcef/browser/permission/alloy_geolocation_access.h
8341@@ -0,0 +1,33 @@
8342+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
8343+// Use of this source code is governed by a BSD-style license that can be
8344+// found in the LICENSE file.
8345+
8346+#ifndef CEF_LIBCEF_BROWSER_ALLOY_GEOLOCATION_PERMISSIONS_H_
8347+#define CEF_LIBCEF_BROWSER_ALLOY_GEOLOCATION_PERMISSIONS_H_
8348+
8349+#include <string>
8350+
8351+#include "base/macros.h"
8352+#include "base/memory/weak_ptr.h"
8353+
8354+#include "include/cef_permission_request.h"
8355+
8356+class AlloyGeolocationAccess : public CefGeolocationAcess {
8357+ public:
8358+  AlloyGeolocationAccess() {};
8359+  ~AlloyGeolocationAccess() {};
8360+
8361+  bool ContainOrigin(const CefString& origin) override;
8362+  bool IsOriginAccessEnabled(const CefString& origin) override;
8363+  void Enabled(const CefString& origin) override;
8364+  void Disabled(const CefString& origin) override;
8365+
8366+ private:
8367+  std::string GetOriginKey(std::string& origin);
8368+  const std::string pref_prefix_ = "AlloyGeolocationAccess%";
8369+
8370+  IMPLEMENT_REFCOUNTING(AlloyGeolocationAccess);
8371+  DISALLOW_COPY_AND_ASSIGN(AlloyGeolocationAccess);
8372+};
8373+
8374+#endif  // CEF_LIBCEF_BROWSER_ALLOY_GEOLOCATION_PERMISSIONS_H_
8375diff --git a/cef/libcef/browser/permission/alloy_permission_manager.cc b/cef/libcef/browser/permission/alloy_permission_manager.cc
8376new file mode 100644
8377index 0000000000..4b24d0612b
8378--- /dev/null
8379+++ b/cef/libcef/browser/permission/alloy_permission_manager.cc
8380@@ -0,0 +1,422 @@
8381+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
8382+// Use of this source code is governed by a BSD-style license that can be
8383+// found in the LICENSE file.
8384+
8385+#include "libcef/browser/permission/alloy_permission_manager.h"
8386+
8387+#include <memory>
8388+#include <string>
8389+
8390+#include "base/callback.h"
8391+#include "base/logging.h"
8392+#include "content/public/browser/permission_controller.h"
8393+#include "content/public/browser/permission_type.h"
8394+#include "content/public/browser/render_frame_host.h"
8395+#include "content/public/browser/render_process_host.h"
8396+#include "content/public/browser/web_contents.h"
8397+
8398+using blink::mojom::PermissionStatus;
8399+using content::PermissionType;
8400+
8401+using RequestPermissionsCallback =
8402+    base::OnceCallback<void(const std::vector<PermissionStatus>&)>;
8403+
8404+namespace {
8405+
8406+void PermissionRequestResponseCallbackWrapper(
8407+    base::OnceCallback<void(PermissionStatus)> callback,
8408+    const std::vector<PermissionStatus>& vector) {
8409+  DCHECK_EQ(vector.size(), 1ul);
8410+  std::move(callback).Run(vector.at(0));
8411+}
8412+
8413+}  // namespace
8414+
8415+class AlloyPermissionManager::UnhandledRequest {
8416+ public:
8417+  UnhandledRequest(const std::vector<PermissionType> permissions,
8418+                   content::RenderFrameHost* render_frame_host,
8419+                   GURL requesting_origin,
8420+                   RequestPermissionsCallback callback)
8421+      : permissions_(permissions),
8422+        render_frame_host_(render_frame_host),
8423+        requesting_origin_(requesting_origin),
8424+        callback_(std::move(callback)),
8425+        results_(permissions.size(), PermissionStatus::DENIED),
8426+        cancelled_(false) {
8427+    for (size_t i = 0; i < permissions.size(); ++i)
8428+      permission_index_map_.insert(std::make_pair(permissions[i], i));
8429+  }
8430+
8431+  ~UnhandledRequest() = default;
8432+
8433+  bool HasPermissionType(PermissionType type) {
8434+    return permission_index_map_.find(type) != permission_index_map_.end();
8435+  }
8436+
8437+  bool IsCompleted(PermissionType type) const {
8438+    return resolved_permissions_.count(type) != 0;
8439+  }
8440+
8441+  bool IsCompleted() const {
8442+    return results_.size() == resolved_permissions_.size();
8443+  }
8444+
8445+  void SetPermissionStatus(PermissionType type, PermissionStatus status) {
8446+    auto result = permission_index_map_.find(type);
8447+    if (result == permission_index_map_.end()) {
8448+      NOTREACHED();
8449+      return;
8450+    }
8451+    DCHECK(!IsCompleted());
8452+    results_[result->second] = status;
8453+    resolved_permissions_.insert(type);
8454+  }
8455+
8456+  PermissionStatus GetPermissionStatus(PermissionType type) {
8457+    auto result = permission_index_map_.find(type);
8458+    if (result == permission_index_map_.end()) {
8459+      NOTREACHED();
8460+      return PermissionStatus::DENIED;
8461+    }
8462+    return results_[result->second];
8463+  }
8464+
8465+  void Cancel() { cancelled_ = true; }
8466+
8467+  bool IsCancelled() const { return cancelled_; }
8468+
8469+  std::vector<PermissionType> permissions_;
8470+  content::RenderFrameHost* render_frame_host_;
8471+  GURL requesting_origin_;
8472+  RequestPermissionsCallback callback_;
8473+  std::vector<PermissionStatus> results_;
8474+
8475+ private:
8476+  std::map<PermissionType, size_t> permission_index_map_;
8477+  std::set<PermissionType> resolved_permissions_;
8478+  bool cancelled_;
8479+};
8480+
8481+AlloyPermissionManager::AlloyPermissionManager() {}
8482+
8483+AlloyPermissionManager::~AlloyPermissionManager() {
8484+  AbortPermissionRequests();
8485+}
8486+
8487+int AlloyPermissionManager::RequestPermission(
8488+    content::PermissionType permission,
8489+    content::RenderFrameHost* render_frame_host,
8490+    const GURL& requesting_origin,
8491+    bool user_gesture,
8492+    base::OnceCallback<void(blink::mojom::PermissionStatus)> callback) {
8493+  return RequestPermissions(
8494+      std::vector<PermissionType>(1, permission), render_frame_host,
8495+      requesting_origin, user_gesture,
8496+      base::BindOnce(&PermissionRequestResponseCallbackWrapper,
8497+                     std::move(callback)));
8498+}
8499+
8500+int AlloyPermissionManager::RequestPermissions(
8501+    const std::vector<content::PermissionType>& permissions,
8502+    content::RenderFrameHost* render_frame_host,
8503+    const GURL& requesting_origin,
8504+    bool user_gesture,
8505+    base::OnceCallback<void(const std::vector<blink::mojom::PermissionStatus>&)>
8506+        callback) {
8507+  if (permissions.empty()) {
8508+    std::move(callback).Run(std::vector<PermissionStatus>());
8509+    return content::PermissionController::kNoPendingOperation;
8510+  }
8511+
8512+  auto pending_request = std::make_unique<UnhandledRequest>(
8513+      permissions, render_frame_host, requesting_origin, std::move(callback));
8514+  std::vector<bool> should_delegate_requests =
8515+      std::vector<bool>(permissions.size(), true);
8516+  for (size_t i = 0; i < permissions.size(); ++i) {
8517+    for (UnhandledRequestsMap::Iterator<UnhandledRequest> it(
8518+             &unhandled_requests_);
8519+         !it.IsAtEnd(); it.Advance()) {
8520+      if (!it.GetCurrentValue()->HasPermissionType(permissions[i]) ||
8521+          it.GetCurrentValue()->requesting_origin_ != requesting_origin) {
8522+        continue;
8523+      }
8524+      if (it.GetCurrentValue()->IsCompleted(permissions[i])) {
8525+        pending_request->SetPermissionStatus(
8526+            permissions[i],
8527+            it.GetCurrentValue()->GetPermissionStatus(permissions[i]));
8528+      }
8529+      should_delegate_requests[i] = false;
8530+      break;
8531+    }
8532+  }
8533+
8534+  // Keep copy of pointer for performing further operations after ownership is
8535+  // transferred to unhandled_requests_
8536+  UnhandledRequest* pending_request_raw = pending_request.get();
8537+  const int request_id = unhandled_requests_.Add(std::move(pending_request));
8538+
8539+  CefRefPtr<CefBrowserHostBase> browser =
8540+      CefBrowserHostBase::GetBrowserForHost(render_frame_host);
8541+
8542+  for (size_t i = 0; i < permissions.size(); ++i) {
8543+    if (should_delegate_requests[i])
8544+      RequestPermissionByType(permissions[i], browser, pending_request_raw,
8545+                              request_id);
8546+  }
8547+
8548+  // If delegate resolve the permission synchronously, all requests could be
8549+  // already resolved here.
8550+  if (!unhandled_requests_.Lookup(request_id))
8551+    return content::PermissionController::kNoPendingOperation;
8552+
8553+  // If requests are resolved without calling delegate functions, e.g.
8554+  // PermissionType::MIDI is permitted within the previous for-loop, all
8555+  // requests could be already resolved, but still in the |unhandled_requests_|
8556+  // without invoking the callback.
8557+  if (pending_request_raw->IsCompleted()) {
8558+    std::vector<PermissionStatus> results = pending_request_raw->results_;
8559+    RequestPermissionsCallback completed_callback =
8560+        std::move(pending_request_raw->callback_);
8561+    unhandled_requests_.Remove(request_id);
8562+    std::move(completed_callback).Run(results);
8563+    return content::PermissionController::kNoPendingOperation;
8564+  }
8565+
8566+  return request_id;
8567+}
8568+
8569+void AlloyPermissionManager::RequestPermissionByType(
8570+    const content::PermissionType permission_type,
8571+    CefRefPtr<CefBrowserHostBase> browser,
8572+    UnhandledRequest* pending_request_raw,
8573+    const int request_id) {
8574+  switch (permission_type) {
8575+    case PermissionType::GEOLOCATION:
8576+      if (browser)
8577+        browser->AskGeolocationPermission(
8578+            pending_request_raw->requesting_origin_.spec(),
8579+            base::Bind(&OnRequestResponseCallBack,
8580+                       weak_ptr_factory_.GetWeakPtr(), request_id,
8581+                       permission_type));
8582+      break;
8583+    case PermissionType::PROTECTED_MEDIA_IDENTIFIER:
8584+      browser->AskProtectedMediaIdentifierPermission(
8585+          pending_request_raw->requesting_origin_.spec(),
8586+          base::Bind(&OnRequestResponseCallBack,
8587+                      weak_ptr_factory_.GetWeakPtr(), request_id,
8588+                      permission_type));
8589+      break;
8590+    case PermissionType::MIDI_SYSEX:
8591+      browser->AskMIDISysexPermission(
8592+          pending_request_raw->requesting_origin_.spec(),
8593+          base::Bind(&OnRequestResponseCallBack,
8594+                      weak_ptr_factory_.GetWeakPtr(), request_id,
8595+                      permission_type));
8596+      break;
8597+    case PermissionType::AUDIO_CAPTURE:
8598+    case PermissionType::VIDEO_CAPTURE:
8599+    case PermissionType::NOTIFICATIONS:
8600+    case PermissionType::DURABLE_STORAGE:
8601+    case PermissionType::BACKGROUND_SYNC:
8602+    case PermissionType::ACCESSIBILITY_EVENTS:
8603+    case PermissionType::CLIPBOARD_READ_WRITE:
8604+    case PermissionType::CLIPBOARD_SANITIZED_WRITE:
8605+    case PermissionType::PAYMENT_HANDLER:
8606+    case PermissionType::BACKGROUND_FETCH:
8607+    case PermissionType::IDLE_DETECTION:
8608+    case PermissionType::PERIODIC_BACKGROUND_SYNC:
8609+    case PermissionType::NFC:
8610+    case PermissionType::VR:
8611+    case PermissionType::AR:
8612+    case PermissionType::STORAGE_ACCESS_GRANT:
8613+    case PermissionType::CAMERA_PAN_TILT_ZOOM:
8614+    case PermissionType::WINDOW_PLACEMENT:
8615+    case PermissionType::FONT_ACCESS:
8616+    case PermissionType::DISPLAY_CAPTURE:
8617+    case PermissionType::MIDI:
8618+    case PermissionType::SENSORS:
8619+    case PermissionType::WAKE_LOCK_SCREEN:
8620+    case PermissionType::WAKE_LOCK_SYSTEM:
8621+    default:
8622+      NOTREACHED() << "Invalid PermissionType.";
8623+      pending_request_raw->SetPermissionStatus(permission_type,
8624+                                               PermissionStatus::DENIED);
8625+      break;
8626+  }
8627+}
8628+
8629+void AlloyPermissionManager::OnRequestResponseCallBack(
8630+    const base::WeakPtr<AlloyPermissionManager>& manager,
8631+    int request_id,
8632+    PermissionType permission,
8633+    bool allowed) {
8634+  // All delegate functions should be cancelled when the manager runs
8635+  // destructor. Therefore |manager| should be always valid here.
8636+  DCHECK(manager);
8637+  PermissionStatus status =
8638+      allowed ? PermissionStatus::GRANTED : PermissionStatus::DENIED;
8639+  UnhandledRequest* pending_request =
8640+      manager->unhandled_requests_.Lookup(request_id);
8641+  std::vector<int> complete_request_ids;
8642+  std::vector<
8643+      std::pair<RequestPermissionsCallback, std::vector<PermissionStatus>>>
8644+      complete_request_pairs;
8645+  for (UnhandledRequestsMap::Iterator<UnhandledRequest> it(
8646+           &manager->unhandled_requests_);
8647+       !it.IsAtEnd(); it.Advance()) {
8648+    if (!it.GetCurrentValue()->HasPermissionType(permission) ||
8649+        it.GetCurrentValue()->requesting_origin_ !=
8650+            pending_request->requesting_origin_) {
8651+      continue;
8652+    }
8653+    it.GetCurrentValue()->SetPermissionStatus(permission, status);
8654+    if (it.GetCurrentValue()->IsCompleted()) {
8655+      complete_request_ids.push_back(it.GetCurrentKey());
8656+      if (!it.GetCurrentValue()->IsCancelled()) {
8657+        complete_request_pairs.emplace_back(
8658+            std::move(it.GetCurrentValue()->callback_),
8659+            std::move(it.GetCurrentValue()->results_));
8660+      }
8661+    }
8662+  }
8663+  for (auto id : complete_request_ids)
8664+    manager->unhandled_requests_.Remove(id);
8665+  for (auto& pair : complete_request_pairs)
8666+    std::move(pair.first).Run(pair.second);
8667+}
8668+
8669+PermissionStatus AlloyPermissionManager::GetPermissionStatus(
8670+    PermissionType permission,
8671+    const GURL& requesting_origin,
8672+    const GURL& embedding_origin) {
8673+  return PermissionStatus::DENIED;
8674+}
8675+
8676+PermissionStatus AlloyPermissionManager::GetPermissionStatusForFrame(
8677+    PermissionType permission,
8678+    content::RenderFrameHost* render_frame_host,
8679+    const GURL& requesting_origin) {
8680+  return GetPermissionStatus(
8681+      permission, requesting_origin,
8682+      content::WebContents::FromRenderFrameHost(render_frame_host)
8683+          ->GetLastCommittedURL()
8684+          .GetOrigin());
8685+}
8686+
8687+void AlloyPermissionManager::ResetPermission(PermissionType permission,
8688+                                             const GURL& requesting_origin,
8689+                                             const GURL& embedding_origin) {}
8690+
8691+int AlloyPermissionManager::SubscribePermissionStatusChange(
8692+    content::PermissionType permission,
8693+    content::RenderFrameHost* render_frame_host,
8694+    const GURL& requesting_origin,
8695+    base::RepeatingCallback<void(PermissionStatus)> callback) {
8696+  return content::PermissionController::kNoPendingOperation;
8697+}
8698+
8699+void AlloyPermissionManager::UnsubscribePermissionStatusChange(
8700+    int subscription_id) {}
8701+
8702+void AlloyPermissionManager::AbortPermissionRequests() {
8703+  std::vector<int> request_ids;
8704+  for (UnhandledRequestsMap::Iterator<UnhandledRequest> it(
8705+           &unhandled_requests_);
8706+       !it.IsAtEnd(); it.Advance()) {
8707+    request_ids.push_back(it.GetCurrentKey());
8708+  }
8709+  for (auto request_id : request_ids)
8710+    AbortPermissionRequest(request_id);
8711+  DCHECK(unhandled_requests_.IsEmpty());
8712+}
8713+
8714+void AlloyPermissionManager::AbortPermissionRequest(int request_id) {
8715+  UnhandledRequest* pending_request = unhandled_requests_.Lookup(request_id);
8716+  if (pending_request == nullptr || pending_request->IsCancelled())
8717+    return;
8718+  pending_request->Cancel();
8719+
8720+  const GURL& requesting_origin = pending_request->requesting_origin_;
8721+
8722+  CefRefPtr<CefBrowserHostBase> browser = CefBrowserHostBase::GetBrowserForHost(
8723+      pending_request->render_frame_host_);
8724+
8725+  for (auto permission : pending_request->permissions_) {
8726+    // If the permission was already resolved, we do not need to cancel it.
8727+    if (pending_request->IsCompleted(permission))
8728+      continue;
8729+
8730+    // If another pending_request waits for the same permission being resolved,
8731+    // we should not cancel the delegate's request.
8732+    bool should_not_cancel_ = false;
8733+    for (UnhandledRequestsMap::Iterator<UnhandledRequest> it(
8734+             &unhandled_requests_);
8735+         !it.IsAtEnd(); it.Advance()) {
8736+      if (it.GetCurrentValue() != pending_request &&
8737+          it.GetCurrentValue()->HasPermissionType(permission) &&
8738+          it.GetCurrentValue()->requesting_origin_ == requesting_origin &&
8739+          !it.GetCurrentValue()->IsCompleted(permission)) {
8740+        should_not_cancel_ = true;
8741+        break;
8742+      }
8743+    }
8744+    if (should_not_cancel_)
8745+      continue;
8746+    AbortPermissionRequestByType(permission, browser, requesting_origin);
8747+    pending_request->SetPermissionStatus(permission, PermissionStatus::DENIED);
8748+  }
8749+
8750+  // If there are still active requests, we should not remove request_id here,
8751+  // but just do not invoke a relevant callback when the request is resolved in
8752+  // OnRequestResponseCallBack().
8753+  if (pending_request->IsCompleted())
8754+    unhandled_requests_.Remove(request_id);
8755+}
8756+
8757+void AlloyPermissionManager::AbortPermissionRequestByType(
8758+    const content::PermissionType permission_type,
8759+    CefRefPtr<CefBrowserHostBase> browser,
8760+    const GURL& requesting_origin) {
8761+  switch (permission_type) {
8762+    case PermissionType::GEOLOCATION:
8763+      if (browser)
8764+        browser->AbortAskGeolocationPermission(requesting_origin.spec());
8765+      break;
8766+    case PermissionType::PROTECTED_MEDIA_IDENTIFIER:
8767+      if (browser)
8768+        browser->AbortAskProtectedMediaIdentifierPermission(requesting_origin.spec());
8769+      break;
8770+    case PermissionType::MIDI_SYSEX:
8771+      if (browser)
8772+        browser->AbortAskMIDISysexPermission(requesting_origin.spec());
8773+      break;
8774+    case PermissionType::NOTIFICATIONS:
8775+    case PermissionType::DURABLE_STORAGE:
8776+    case PermissionType::AUDIO_CAPTURE:
8777+    case PermissionType::VIDEO_CAPTURE:
8778+    case PermissionType::BACKGROUND_SYNC:
8779+    case PermissionType::ACCESSIBILITY_EVENTS:
8780+    case PermissionType::CLIPBOARD_READ_WRITE:
8781+    case PermissionType::CLIPBOARD_SANITIZED_WRITE:
8782+    case PermissionType::PAYMENT_HANDLER:
8783+    case PermissionType::BACKGROUND_FETCH:
8784+    case PermissionType::IDLE_DETECTION:
8785+    case PermissionType::PERIODIC_BACKGROUND_SYNC:
8786+    case PermissionType::NFC:
8787+    case PermissionType::VR:
8788+    case PermissionType::AR:
8789+    case PermissionType::STORAGE_ACCESS_GRANT:
8790+    case PermissionType::CAMERA_PAN_TILT_ZOOM:
8791+    case PermissionType::WINDOW_PLACEMENT:
8792+    case PermissionType::FONT_ACCESS:
8793+    case PermissionType::DISPLAY_CAPTURE:
8794+    case PermissionType::MIDI:
8795+    case PermissionType::SENSORS:
8796+    case PermissionType::WAKE_LOCK_SCREEN:
8797+    case PermissionType::WAKE_LOCK_SYSTEM:
8798+    default:
8799+      NOTREACHED() << "Invalid PermissionType.";
8800+      break;
8801+  }
8802+}
8803diff --git a/cef/libcef/browser/permission/alloy_permission_manager.h b/cef/libcef/browser/permission/alloy_permission_manager.h
8804new file mode 100644
8805index 0000000000..e883cb7b9d
8806--- /dev/null
8807+++ b/cef/libcef/browser/permission/alloy_permission_manager.h
8808@@ -0,0 +1,92 @@
8809+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
8810+// Use of this source code is governed by a BSD-style license that can be
8811+// found in the LICENSE file.
8812+
8813+#ifndef CEF_LIBCEF_BROWSER_ALLOY_PERMISSION_MANAGER_H_
8814+#define CEF_LIBCEF_BROWSER_ALLOY_PERMISSION_MANAGER_H_
8815+
8816+#include <memory>
8817+
8818+#include "base/containers/id_map.h"
8819+#include "base/macros.h"
8820+#include "base/memory/weak_ptr.h"
8821+#include "content/public/browser/permission_controller_delegate.h"
8822+#include "libcef/browser/browser_host_base.h"
8823+
8824+namespace content {
8825+class WebContents;
8826+}
8827+
8828+class AlloyPermissionManager : public content::PermissionControllerDelegate {
8829+ public:
8830+  AlloyPermissionManager();
8831+  ~AlloyPermissionManager() override;
8832+
8833+  // PermissionControllerDelegate implementation.
8834+  int RequestPermission(content::PermissionType permission,
8835+                        content::RenderFrameHost* render_frame_host,
8836+                        const GURL& requesting_origin,
8837+                        bool user_gesture,
8838+                        base::OnceCallback<void(blink::mojom::PermissionStatus)>
8839+                            callback) override;
8840+  int RequestPermissions(
8841+      const std::vector<content::PermissionType>& permissions,
8842+      content::RenderFrameHost* render_frame_host,
8843+      const GURL& requesting_origin,
8844+      bool user_gesture,
8845+      base::OnceCallback<
8846+          void(const std::vector<blink::mojom::PermissionStatus>&)> callback)
8847+      override;
8848+  blink::mojom::PermissionStatus GetPermissionStatus(
8849+      content::PermissionType permission,
8850+      const GURL& requesting_origin,
8851+      const GURL& embedding_origin) override;
8852+  blink::mojom::PermissionStatus GetPermissionStatusForFrame(
8853+      content::PermissionType permission,
8854+      content::RenderFrameHost* render_frame_host,
8855+      const GURL& requesting_origin) override;
8856+  void ResetPermission(content::PermissionType permission,
8857+                       const GURL& requesting_origin,
8858+                       const GURL& embedding_origin) override;
8859+  int SubscribePermissionStatusChange(
8860+      content::PermissionType permission,
8861+      content::RenderFrameHost* render_frame_host,
8862+      const GURL& requesting_origin,
8863+      base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback)
8864+      override;
8865+  void UnsubscribePermissionStatusChange(int subscription_id) override;
8866+
8867+ protected:
8868+  void AbortPermissionRequest(int request_id);
8869+  void AbortPermissionRequests();
8870+
8871+ private:
8872+  class UnhandledRequest;
8873+  using UnhandledRequestsMap = base::IDMap<std::unique_ptr<UnhandledRequest>>;
8874+
8875+  void RequestPermissionByType(const content::PermissionType permission_type,
8876+                               CefRefPtr<CefBrowserHostBase> browser,
8877+                               UnhandledRequest* pending_request_raw,
8878+                               const int request_id);
8879+
8880+  void AbortPermissionRequestByType(
8881+      const content::PermissionType permission_type,
8882+      CefRefPtr<CefBrowserHostBase> browser,
8883+      const GURL& requesting_origin);
8884+  // The weak pointer to this is used to clean up any information which is
8885+  // stored in the pending request or result cache maps. However, the callback
8886+  // should be run regardless of whether the class is still alive so the method
8887+  // is static.
8888+  static void OnRequestResponseCallBack(
8889+      const base::WeakPtr<AlloyPermissionManager>& manager,
8890+      int request_id,
8891+      content::PermissionType permission,
8892+      bool allowed);
8893+
8894+  base::WeakPtrFactory<AlloyPermissionManager> weak_ptr_factory_{this};
8895+  UnhandledRequestsMap unhandled_requests_;
8896+
8897+  DISALLOW_COPY_AND_ASSIGN(AlloyPermissionManager);
8898+};
8899+
8900+#endif  // CEF_LIBCEF_BROWSER_ALLOY_PERMISSION_MANAGER_H_
8901diff --git a/cef/libcef/browser/permission/alloy_permission_request_handler.cc b/cef/libcef/browser/permission/alloy_permission_request_handler.cc
8902new file mode 100644
8903index 0000000000..3208fb2bf9
8904--- /dev/null
8905+++ b/cef/libcef/browser/permission/alloy_permission_request_handler.cc
8906@@ -0,0 +1,122 @@
8907+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
8908+// Use of this source code is governed by a BSD-style license that can be
8909+// found in the LICENSE file.
8910+
8911+#include "libcef/browser/permission/alloy_permission_request_handler.h"
8912+
8913+#include "content/public/browser/navigation_details.h"
8914+#include "content/public/browser/navigation_entry.h"
8915+#include "content/public/browser/web_contents.h"
8916+#include "include/cef_permission_request.h"
8917+
8918+namespace {
8919+int GetLastCommittedEntryID(content::WebContents* web_contents) {
8920+  if (!web_contents)
8921+    return 0;
8922+
8923+  content::NavigationEntry* entry =
8924+      web_contents->GetController().GetLastCommittedEntry();
8925+  return entry ? entry->GetUniqueID() : 0;
8926+}
8927+}  // namespace
8928+
8929+AlloyPermissionRequestHandler::AlloyPermissionRequestHandler(
8930+    CefRefPtr<CefPermissionRequest> client,
8931+    content::WebContents* web_contents)
8932+    : content::WebContentsObserver(web_contents),
8933+      client_(client),
8934+      contents_unique_id_(GetLastCommittedEntryID(web_contents)) {}
8935+
8936+AlloyPermissionRequestHandler::~AlloyPermissionRequestHandler() {
8937+  CancelAllRequests();
8938+}
8939+
8940+void AlloyPermissionRequestHandler::SendRequest(
8941+    CefRefPtr<CefAccessRequest> request) {
8942+  if (Preauthorized(request->Origin(), request->ResourceAcessId())) {
8943+    request->ReportRequestResult(true);
8944+    return;
8945+  }
8946+
8947+  requests_.push_back(request);
8948+  client_->OnPermissionRequest(request);
8949+  PruneRequests();
8950+}
8951+
8952+void AlloyPermissionRequestHandler::CancelRequest(const CefString& origin,
8953+                                                  int resources) {
8954+  // The request list might have multiple requests with same origin and
8955+  // resources.
8956+  RequestIterator i = FindRequest(origin, resources);
8957+  while (i != requests_.end()) {
8958+    CancelRequestInternal(i);
8959+    requests_.erase(i);
8960+    i = FindRequest(origin, resources);
8961+  }
8962+}
8963+
8964+void AlloyPermissionRequestHandler::CancelRequestInternal(RequestIterator i) {
8965+  CefRefPtr<CefAccessRequest> request = i->get();
8966+  if (request) {
8967+    client_->OnPermissionRequestCanceled(request);
8968+  }
8969+}
8970+
8971+void AlloyPermissionRequestHandler::CancelAllRequests() {
8972+  for (RequestIterator i = requests_.begin(); i != requests_.end(); ++i)
8973+    CancelRequestInternal(i);
8974+}
8975+
8976+AlloyPermissionRequestHandler::RequestIterator
8977+AlloyPermissionRequestHandler::FindRequest(const CefString& origin,
8978+                                           int resources) {
8979+  RequestIterator i;
8980+  for (i = requests_.begin(); i != requests_.end(); ++i) {
8981+    if (i->get() && i->get()->Origin() == origin &&
8982+        i->get()->ResourceAcessId() == resources) {
8983+      break;
8984+    }
8985+  }
8986+  return i;
8987+}
8988+
8989+void AlloyPermissionRequestHandler::PreauthorizePermission(
8990+    const CefString& origin,
8991+    int resources) {
8992+  if (!resources)
8993+    return;
8994+
8995+  if (origin.empty()) {
8996+    LOG(ERROR) << "The origin of preauthorization is empty, ignore it.";
8997+    return;
8998+  }
8999+
9000+  preauthorized_permission_[origin] |= resources;
9001+}
9002+
9003+void AlloyPermissionRequestHandler::NavigationEntryCommitted(
9004+    const content::LoadCommittedDetails& details) {
9005+  const ui::PageTransition transition = details.entry->GetTransitionType();
9006+  if (details.is_navigation_to_different_page() ||
9007+      ui::PageTransitionCoreTypeIs(transition, ui::PAGE_TRANSITION_RELOAD) ||
9008+      contents_unique_id_ != details.entry->GetUniqueID()) {
9009+    CancelAllRequests();
9010+    contents_unique_id_ = details.entry->GetUniqueID();
9011+  }
9012+}
9013+
9014+void AlloyPermissionRequestHandler::PruneRequests() {
9015+  for (RequestIterator i = requests_.begin(); i != requests_.end();) {
9016+    if (!i->get())
9017+      i = requests_.erase(i);
9018+    else
9019+      ++i;
9020+  }
9021+}
9022+
9023+bool AlloyPermissionRequestHandler::Preauthorized(const CefString& origin,
9024+                                                  int resources) {
9025+  std::map<CefString, int>::iterator i = preauthorized_permission_.find(origin);
9026+
9027+  return i != preauthorized_permission_.end() && i->second == resources;
9028+}
9029\ No newline at end of file
9030diff --git a/cef/libcef/browser/permission/alloy_permission_request_handler.h b/cef/libcef/browser/permission/alloy_permission_request_handler.h
9031new file mode 100644
9032index 0000000000..1e093121eb
9033--- /dev/null
9034+++ b/cef/libcef/browser/permission/alloy_permission_request_handler.h
9035@@ -0,0 +1,72 @@
9036+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
9037+// Use of this source code is governed by a BSD-style license that can be
9038+// found in the LICENSE file.
9039+
9040+#ifndef CEF_LIBCEF_BROWSER_ALLOY_PERMISSION_REQUEST_HANDLER_H_
9041+#define CEF_LIBCEF_BROWSER_ALLOY_PERMISSION_REQUEST_HANDLER_H_
9042+
9043+#include <stdint.h>
9044+
9045+#include <map>
9046+#include <memory>
9047+#include <vector>
9048+
9049+#include "base/macros.h"
9050+#include "content/public/browser/web_contents_observer.h"
9051+#include "include/cef_permission_request.h"
9052+
9053+// This class is used to send the permission requests, or cancel ongoing
9054+// requests.
9055+// It is owned by WebContents and has 1x1 mapping to WebContents. All methods
9056+// are running on UI thread.
9057+class AlloyPermissionRequestHandler : public content::WebContentsObserver {
9058+ public:
9059+  AlloyPermissionRequestHandler(CefRefPtr<CefPermissionRequest> client,
9060+                                content::WebContents* web_contents);
9061+  ~AlloyPermissionRequestHandler() override;
9062+
9063+  // Send the given |request| to CefPermissionRequest.
9064+  void SendRequest(CefRefPtr<CefAccessRequest> request);
9065+
9066+  // Cancel the ongoing request initiated by |origin| for accessing |resources|.
9067+  void CancelRequest(const CefString& origin, int resources);
9068+
9069+  // Allow |origin| to access the |resources|.
9070+  void PreauthorizePermission(const CefString& origin, int resources);
9071+
9072+  // WebContentsObserver
9073+  void NavigationEntryCommitted(
9074+      const content::LoadCommittedDetails& load_details) override;
9075+
9076+ private:
9077+  typedef std::vector<CefRefPtr<CefAccessRequest>>::iterator RequestIterator;
9078+
9079+  // Return the request initiated by |origin| for accessing |resources|.
9080+  RequestIterator FindRequest(const CefString& origin, int resources);
9081+
9082+  // Cancel the given request.
9083+  void CancelRequestInternal(RequestIterator i);
9084+
9085+  void CancelAllRequests();
9086+
9087+  // Remove the invalid requests from requests_.
9088+  void PruneRequests();
9089+
9090+  // Return true if |origin| were preauthorized to access |resources|.
9091+  bool Preauthorized(const CefString& origin, int resources);
9092+
9093+  CefRefPtr<CefPermissionRequest> client_;
9094+
9095+  // A list of ongoing requests.
9096+  std::vector<CefRefPtr<CefAccessRequest>> requests_;
9097+
9098+  std::map<CefString, int> preauthorized_permission_;
9099+
9100+  // The unique id of the active NavigationEntry of the WebContents that we were
9101+  // opened for. Used to help expire on requests.
9102+  int contents_unique_id_;
9103+
9104+  DISALLOW_COPY_AND_ASSIGN(AlloyPermissionRequestHandler);
9105+};
9106+
9107+#endif  // CEF_LIBCEF_BROWSER_ALLOY_PERMISSION_REQUEST_HANDLER_H_
9108diff --git a/cef/libcef/browser/prefs/renderer_prefs.cc b/cef/libcef/browser/prefs/renderer_prefs.cc
9109index d6521e2c15..7ed5929a4e 100644
9110--- a/cef/libcef/browser/prefs/renderer_prefs.cc
9111+++ b/cef/libcef/browser/prefs/renderer_prefs.cc
9112@@ -1,4 +1,5 @@
9113-// Copyright (c) 2010 The Chromium Embedded Framework Authors. All rights
9114+// Copyright (c) 2022 Huawei Device Co., Ltd.
9115+// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
9116 // reserved. Use of this source code is governed by a BSD-style license that can
9117 // be found in the LICENSE file.
9118
9119@@ -9,6 +10,7 @@
9120 #include "libcef/browser/alloy/alloy_browser_host_impl.h"
9121 #include "libcef/browser/context.h"
9122 #include "libcef/browser/extensions/browser_extensions_util.h"
9123+#include "libcef/browser/osr/render_widget_host_view_osr.h"
9124 #include "libcef/common/cef_switches.h"
9125 #include "libcef/common/extensions/extensions_util.h"
9126 #include "libcef/features/runtime_checks.h"
9127@@ -32,6 +34,7 @@
9128 #include "components/prefs/pref_store.h"
9129 #include "content/public/browser/render_process_host.h"
9130 #include "content/public/browser/render_view_host.h"
9131+#include "content/public/browser/render_widget_host.h"
9132 #include "content/public/browser/site_instance.h"
9133 #include "content/public/browser/web_contents.h"
9134 #include "content/public/common/url_constants.h"
9135@@ -226,6 +229,27 @@ bool UpdatePreferredColorScheme(blink::web_pref::WebPreferences* web_prefs,
9136   return old_preferred_color_scheme != web_prefs->preferred_color_scheme;
9137 }
9138
9139+void SetCefSpecialPrefs(content::RenderViewHost* rvh,
9140+                        CefRefPtr<AlloyBrowserHostImpl> browser,
9141+                        blink::web_pref::WebPreferences& web) {
9142+  auto frame = browser->GetMainFrame();
9143+  if (frame && frame->IsValid() &&
9144+      (browser->settings().text_size_percent > 0)) {
9145+    web.force_enable_zoom = false;
9146+    static_cast<CefFrameHostImpl*>(frame.get())
9147+        ->PutZoomingForTextFactor(browser->settings().text_size_percent /
9148+                                  100.0f);
9149+  }
9150+  CefRenderWidgetHostViewOSR* view =
9151+      static_cast<CefRenderWidgetHostViewOSR*>(rvh->GetWidget()->GetView());
9152+  if (view) {
9153+    view->SetDoubleTapSupportEnabled(
9154+        browser->settings().supports_double_tap_zoom);
9155+    view->SetMultiTouchZoomSupportEnabled(
9156+        browser->settings().supports_multi_touch_zoom);
9157+  }
9158+}
9159+
9160 }  // namespace
9161
9162 void SetCommandLinePrefDefaults(CommandLinePrefStore* prefs) {
9163@@ -323,7 +347,7 @@ void SetCefPrefs(const CefBrowserSettings& cef,
9164             web.allow_universal_access_from_file_urls);
9165   SET_STATE(cef.file_access_from_file_urls,
9166             web.allow_file_access_from_file_urls);
9167-  SET_STATE(cef.image_loading, web.loads_images_automatically);
9168+  SET_STATE(cef.image_loading, web.images_enabled);
9169   SET_STATE(cef.image_shrink_standalone_to_fit,
9170             web.shrinks_standalone_images_to_fit);
9171   SET_STATE(cef.text_area_resize, web.text_areas_are_resizable);
9172@@ -338,6 +362,16 @@ void SetCefPrefs(const CefBrowserSettings& cef,
9173     web.webgl1_enabled = false;
9174     web.webgl2_enabled = false;
9175   }
9176+
9177+  /* ohos webview begin*/
9178+  SET_STATE(cef.force_dark_mode_enabled, web.force_dark_mode_enabled);
9179+  SET_STATE(cef.loads_images_automatically, web.loads_images_automatically);
9180+  SET_STATE(cef.allow_running_insecure_content,
9181+            web.allow_running_insecure_content);
9182+  SET_STATE(cef.strict_mixed_content_checking,
9183+            web.strict_mixed_content_checking);
9184+  SET_STATE(cef.allow_mixed_content_upgrades, web.allow_mixed_content_upgrades);
9185+  /* ohos webview end */
9186 }
9187
9188 void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
9189@@ -418,6 +452,8 @@ void PopulateWebPreferences(content::RenderViewHost* rvh,
9190     // Set preferences based on CefBrowserSettings.
9191     SetCefPrefs(browser->settings(), web);
9192
9193+    SetCefSpecialPrefs(rvh, browser, web);
9194+
9195     web.picture_in_picture_enabled = browser->IsPictureInPictureSupported();
9196
9197     // Set the background color for the WebView.
9198diff --git a/cef/libcef/browser/prefs/renderer_prefs.h b/cef/libcef/browser/prefs/renderer_prefs.h
9199index 00ab48d225..a374247416 100644
9200--- a/cef/libcef/browser/prefs/renderer_prefs.h
9201+++ b/cef/libcef/browser/prefs/renderer_prefs.h
9202@@ -1,4 +1,5 @@
9203-// Copyright (c) 2010 The Chromium Embedded Framework Authors. All rights
9204+// Copyright (c) 2022 Huawei Device Co., Ltd.
9205+// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
9206 // reserved. Use of this source code is governed by a BSD-style license that can
9207 // be found in the LICENSE file.
9208
9209diff --git a/cef/libcef/common/cef_messages.h b/cef/libcef/common/cef_messages.h
9210index 82f161dd6f..9065e80cfb 100644
9211--- a/cef/libcef/common/cef_messages.h
9212+++ b/cef/libcef/common/cef_messages.h
9213@@ -46,6 +46,23 @@ struct ParamTraits<scoped_refptr<net::UploadData>> {
9214
9215 // Common types.
9216
9217+// Parameters structure for a hittestdata.
9218+IPC_STRUCT_BEGIN(Cef_HitData_Params)
9219+  IPC_STRUCT_MEMBER(int, type)
9220+  IPC_STRUCT_MEMBER(std::string, extra_data_for_type)
9221+  IPC_STRUCT_MEMBER(std::u16string, href)
9222+  IPC_STRUCT_MEMBER(std::u16string, anchor_text)
9223+  IPC_STRUCT_MEMBER(GURL, img_src)
9224+IPC_STRUCT_END()
9225+
9226+// Parameters structure for a point event.
9227+IPC_STRUCT_BEGIN(Cef_TouchEvent_Params)
9228+  IPC_STRUCT_MEMBER(float, x)
9229+  IPC_STRUCT_MEMBER(float, y)
9230+  IPC_STRUCT_MEMBER(int, width)
9231+  IPC_STRUCT_MEMBER(int, height)
9232+IPC_STRUCT_END()
9233+
9234 // Parameters structure for a request.
9235 IPC_STRUCT_BEGIN(Cef_Request_Params)
9236   // Unique request id to match requests and responses.
9237@@ -140,9 +157,15 @@ IPC_MESSAGE_ROUTED1(CefMsg_Response, Cef_Response_Params)
9238 // has been processed.
9239 IPC_MESSAGE_ROUTED1(CefMsg_ResponseAck, int /* request_id */)
9240
9241+// Sets the zoom factor for text only. Used in layout modes other than
9242+// Text Autosizing.
9243+IPC_MESSAGE_ROUTED1(CefMsg_PutZoomingForTextFactor, float /* zoom_factor */)
9244+
9245 // Tells the renderer that loading has stopped.
9246 IPC_MESSAGE_ROUTED0(CefMsg_DidStopLoading)
9247
9248+// Tell the renderer that touch event has happened.
9249+IPC_MESSAGE_ROUTED1(CefMsg_TouchEvent, Cef_TouchEvent_Params)
9250 // Notification that a move or resize of the renderer's containing window has
9251 // started. Used on Windows and Linux with the Alloy runtime, and was
9252 // previously handled by RenderViewHost::NotifyMoveOrResizeStarted() prior to
9253@@ -207,3 +230,6 @@ IPC_MESSAGE_ROUTED1(CefHostMsg_ResponseAck, int /* request_id */)
9254 // Sent by the renderer when the draggable regions are updated.
9255 IPC_MESSAGE_ROUTED1(CefHostMsg_UpdateDraggableRegions,
9256                     std::vector<Cef_DraggableRegion_Params> /* regions */)
9257+
9258+// Sent by the renderer when the hit data updated.
9259+IPC_MESSAGE_ROUTED1(CefHostMsg_HitData, Cef_HitData_Params)
9260diff --git a/cef/libcef/common/javascript/oh_gin_javascript_bridge_errors.cc b/cef/libcef/common/javascript/oh_gin_javascript_bridge_errors.cc
9261new file mode 100644
9262index 0000000000..c583f8f893
9263--- /dev/null
9264+++ b/cef/libcef/common/javascript/oh_gin_javascript_bridge_errors.cc
9265@@ -0,0 +1,34 @@
9266+// Copyright (c) 2022 Huawei Device Co., Ltd.
9267+// Copyright 2018 The Chromium Authors. All rights reserved.
9268+// Use of this source code is governed by a BSD-style license that can be
9269+// found in the LICENSE file.
9270+
9271+#include "cef/libcef/common/javascript/oh_gin_javascript_bridge_errors.h"
9272+
9273+#include "base/notreached.h"
9274+namespace NWEB {
9275+const char* OhGinJavascriptBridgeErrorToString(
9276+    OhGinJavascriptBridgeError error) {
9277+  switch (error) {
9278+    case kOhGinJavascriptBridgeNoError:
9279+      return "No error";
9280+    case kOhGinJavascriptBridgeUnknownObjectId:
9281+      return "Unknown Ace object ID";
9282+    case kOhGinJavascriptBridgeObjectIsGone:
9283+      return "Ace object is gone";
9284+    case kOhGinJavascriptBridgeMethodNotFound:
9285+      return "Method not found";
9286+    case kOhGinJavascriptBridgeAccessToObjectGetClassIsBlocked:
9287+      return "Access to Ace is blocked";
9288+    case kOhGinJavascriptBridgeJavaExceptionRaised:
9289+      return "Ace exception was raised during method invocation";
9290+    case kOhGinJavascriptBridgeNonAssignableTypes:
9291+      return "The type of the object passed to the method is incompatible "
9292+             "with the type of method's argument";
9293+    case kOhGinJavascriptBridgeRenderFrameDeleted:
9294+      return "RenderFrame has been deleted";
9295+  }
9296+  NOTREACHED();
9297+  return "Unknown error";
9298+}
9299+}  // namespace NWEB
9300\ No newline at end of file
9301diff --git a/cef/libcef/common/javascript/oh_gin_javascript_bridge_errors.h b/cef/libcef/common/javascript/oh_gin_javascript_bridge_errors.h
9302new file mode 100644
9303index 0000000000..5ccc0196b9
9304--- /dev/null
9305+++ b/cef/libcef/common/javascript/oh_gin_javascript_bridge_errors.h
9306@@ -0,0 +1,25 @@
9307+// Copyright (c) 2022 Huawei Device Co., Ltd.
9308+// Copyright 2018 The Chromium Authors. All rights reserved.
9309+// Use of this source code is governed by a BSD-style license that can be
9310+// found in the LICENSE file.
9311+
9312+#ifndef OH_GIN_JAVASCRIPT_BRIDGE_ERRORS_H
9313+#define OH_GIN_JAVASCRIPT_BRIDGE_ERRORS_H
9314+
9315+namespace NWEB {
9316+enum OhGinJavascriptBridgeError {
9317+  kOhGinJavascriptBridgeNoError = 0,
9318+  kOhGinJavascriptBridgeUnknownObjectId,
9319+  kOhGinJavascriptBridgeObjectIsGone,
9320+  kOhGinJavascriptBridgeMethodNotFound,
9321+  kOhGinJavascriptBridgeAccessToObjectGetClassIsBlocked,
9322+  kOhGinJavascriptBridgeJavaExceptionRaised,
9323+  kOhGinJavascriptBridgeNonAssignableTypes,
9324+  kOhGinJavascriptBridgeRenderFrameDeleted,
9325+  kOhGinJavascriptBridgeErrorLast = kOhGinJavascriptBridgeRenderFrameDeleted
9326+};
9327+
9328+__attribute__((visibility("default"))) const char*
9329+OhGinJavascriptBridgeErrorToString(OhGinJavascriptBridgeError error);
9330+}  // namespace NWEB
9331+#endif
9332diff --git a/cef/libcef/common/javascript/oh_gin_javascript_bridge_message_generator.cc b/cef/libcef/common/javascript/oh_gin_javascript_bridge_message_generator.cc
9333new file mode 100644
9334index 0000000000..a87ad45510
9335--- /dev/null
9336+++ b/cef/libcef/common/javascript/oh_gin_javascript_bridge_message_generator.cc
9337@@ -0,0 +1,29 @@
9338+// Copyright (c) 2022 Huawei Device Co., Ltd.
9339+// Copyright 2018 The Chromium Authors. All rights reserved.
9340+// Use of this source code is governed by a BSD-style license that can be
9341+// found in the LICENSE file.
9342+
9343+#define IPC_MESSAGE_IMPL
9344+#include "libcef/common/javascript/oh_gin_javascript_bridge_message_generator.h"
9345+
9346+// Generate constructors.
9347+#include "ipc/struct_constructor_macros.h"
9348+#include "libcef/common/javascript/oh_gin_javascript_bridge_message_generator.h"
9349+
9350+// Generate param traits write methods.
9351+#include "ipc/param_traits_write_macros.h"
9352+namespace IPC {
9353+#include "libcef/common/javascript/oh_gin_javascript_bridge_message_generator.h"
9354+}  // namespace IPC
9355+
9356+// Generate param traits read methods.
9357+#include "ipc/param_traits_read_macros.h"
9358+namespace IPC {
9359+#include "libcef/common/javascript/oh_gin_javascript_bridge_message_generator.h"
9360+}  // namespace IPC
9361+
9362+// Generate param traits log methods.
9363+#include "ipc/param_traits_log_macros.h"
9364+namespace IPC {
9365+#include "libcef/common/javascript/oh_gin_javascript_bridge_message_generator.h"
9366+}  // namespace IPC
9367\ No newline at end of file
9368diff --git a/cef/libcef/common/javascript/oh_gin_javascript_bridge_message_generator.h b/cef/libcef/common/javascript/oh_gin_javascript_bridge_message_generator.h
9369new file mode 100644
9370index 0000000000..aa7b64bd1d
9371--- /dev/null
9372+++ b/cef/libcef/common/javascript/oh_gin_javascript_bridge_message_generator.h
9373@@ -0,0 +1,6 @@
9374+// Copyright (c) 2022 Huawei Device Co., Ltd.
9375+// Copyright 2018 The Chromium Authors. All rights reserved.
9376+// Use of this source code is governed by a BSD-style license that can be
9377+// found in the LICENSE file.
9378+
9379+#include "libcef/common/javascript/oh_gin_javascript_bridge_messages.h"
9380\ No newline at end of file
9381diff --git a/cef/libcef/common/javascript/oh_gin_javascript_bridge_messages.h b/cef/libcef/common/javascript/oh_gin_javascript_bridge_messages.h
9382new file mode 100644
9383index 0000000000..d663f8d0fe
9384--- /dev/null
9385+++ b/cef/libcef/common/javascript/oh_gin_javascript_bridge_messages.h
9386@@ -0,0 +1,49 @@
9387+// Copyright (c) 2022 Huawei Device Co., Ltd.
9388+// Copyright 2018 The Chromium Authors. All rights reserved.
9389+// Use of this source code is governed by a BSD-style license that can be
9390+// found in the LICENSE file.
9391+
9392+// IPC messages for injected Javascript objects (Gin-based implementation).
9393+#include <stdint.h>
9394+#include "cef/libcef/common/javascript/oh_gin_javascript_bridge_errors.h"
9395+#include "content/common/content_export.h"
9396+#include "ipc/ipc_message_macros.h"
9397+#include "ipc/ipc_message_start.h"
9398+
9399+#undef IPC_MESSAGE_EXPORT
9400+#define IPC_MESSAGE_EXPORT CONTENT_EXPORT
9401+#define IPC_MESSAGE_START OhGinJavascriptBridgeMsgStart
9402+
9403+IPC_ENUM_TRAITS_MAX_VALUE(NWEB::OhGinJavascriptBridgeError,
9404+                          NWEB::kOhGinJavascriptBridgeErrorLast)
9405+
9406+// Sent from browser to renderer to add a Javascript object with the given
9407+// name.
9408+
9409+IPC_MESSAGE_ROUTED2(OhGinJavascriptBridgeMsg_AddNamedObject,
9410+                    std::string /* name */,
9411+                    int32_t /* object_id */)
9412+
9413+IPC_MESSAGE_ROUTED1(OhGinJavascriptBridgeMsg_RemoveNamedObject,
9414+                    std::string /* name */)
9415+
9416+IPC_SYNC_MESSAGE_ROUTED1_1(OhGinJavascriptBridgeHostMsg_GetMethods,
9417+                           int32_t /* object_id */,
9418+                           std::set<std::string> /* returned_method_names */)
9419+
9420+// Sent from renderer to browser to find out, if an object has a method with
9421+// the given name.
9422+IPC_SYNC_MESSAGE_ROUTED2_1(OhGinJavascriptBridgeHostMsg_HasMethod,
9423+                           int32_t /* object_id */,
9424+                           std::string /* method_name */,
9425+                           bool /* result */)
9426+
9427+IPC_SYNC_MESSAGE_ROUTED3_2(OhGinJavascriptBridgeHostMsg_InvokeMethod,
9428+                           int32_t /* object_id */,
9429+                           std::string /* method_name */,
9430+                           base::ListValue /* arguments */,
9431+                           base::ListValue /* result */,
9432+                           NWEB::OhGinJavascriptBridgeError /* error_code */)
9433+
9434+IPC_MESSAGE_ROUTED1(OhGinJavascriptBridgeHostMsg_ObjectWrapperDeleted,
9435+                    int32_t /* object_id */)
9436\ No newline at end of file
9437diff --git a/cef/libcef/common/javascript/oh_gin_javascript_bridge_value.cc b/cef/libcef/common/javascript/oh_gin_javascript_bridge_value.cc
9438new file mode 100644
9439index 0000000000..13250be521
9440--- /dev/null
9441+++ b/cef/libcef/common/javascript/oh_gin_javascript_bridge_value.cc
9442@@ -0,0 +1,147 @@
9443+// Copyright (c) 2022 Huawei Device Co., Ltd.
9444+// Copyright 2018 The Chromium Authors. All rights reserved.
9445+// Use of this source code is governed by a BSD-style license that can be
9446+// found in the LICENSE file.
9447+
9448+#include "cef/libcef/common/javascript/oh_gin_javascript_bridge_value.h"
9449+
9450+#include "base/containers/span.h"
9451+
9452+namespace {
9453+
9454+// The magic value is only used to prevent accidental attempts of reading
9455+// OhGinJavascriptBridgeValue  from a random BinaryValue.
9456+// OhGinJavascriptBridgeValue  is not intended for scenarios where with
9457+// BinaryValues are being used for anything else than holding
9458+// OhGinJavascriptBridgeValue s.  If a need for such scenario ever emerges, the
9459+// best solution would be to extend OhGinJavascriptBridgeValue  to be able to
9460+// wrap raw BinaryValues.
9461+const uint32_t kHeaderMagic = 0xBEEFCAFE;
9462+
9463+#pragma pack(push, 4)
9464+struct Header : public base::Pickle::Header {
9465+  uint32_t magic;
9466+  int32_t type;
9467+};
9468+#pragma pack(pop)
9469+
9470+}  // namespace
9471+
9472+// static
9473+std::unique_ptr<base::Value>
9474+OhGinJavascriptBridgeValue ::CreateUndefinedValue() {
9475+  OhGinJavascriptBridgeValue gin_value(TYPE_UNDEFINED);
9476+  return gin_value.SerializeToBinaryValue();
9477+}
9478+
9479+// static
9480+std::unique_ptr<base::Value> OhGinJavascriptBridgeValue ::CreateNonFiniteValue(
9481+    float in_value) {
9482+  OhGinJavascriptBridgeValue gin_value(TYPE_NONFINITE);
9483+  gin_value.pickle_.WriteFloat(in_value);
9484+  return gin_value.SerializeToBinaryValue();
9485+}
9486+
9487+// static
9488+std::unique_ptr<base::Value> OhGinJavascriptBridgeValue ::CreateNonFiniteValue(
9489+    double in_value) {
9490+  return CreateNonFiniteValue(static_cast<float>(in_value));
9491+}
9492+
9493+// static
9494+std::unique_ptr<base::Value> OhGinJavascriptBridgeValue ::CreateObjectIDValue(
9495+    int32_t in_value) {
9496+  OhGinJavascriptBridgeValue gin_value(TYPE_OBJECT_ID);
9497+  gin_value.pickle_.WriteInt(in_value);
9498+  return gin_value.SerializeToBinaryValue();
9499+}
9500+
9501+// static
9502+std::unique_ptr<base::Value> OhGinJavascriptBridgeValue ::CreateUInt32Value(
9503+    uint32_t in_value) {
9504+  OhGinJavascriptBridgeValue gin_value(TYPE_UINT32);
9505+  gin_value.pickle_.WriteUInt32(in_value);
9506+  return gin_value.SerializeToBinaryValue();
9507+}
9508+
9509+// static
9510+bool OhGinJavascriptBridgeValue ::ContainsOhGinJavascriptBridgeValue(
9511+    const base::Value* value) {
9512+  if (!value->is_blob())
9513+    return false;
9514+  if (value->GetBlob().size() < sizeof(Header))
9515+    return false;
9516+  base::Pickle pickle(reinterpret_cast<const char*>(value->GetBlob().data()),
9517+                      value->GetBlob().size());
9518+  // Broken binary value: payload or header size is wrong
9519+  if (!pickle.data() || pickle.size() - pickle.payload_size() != sizeof(Header))
9520+    return false;
9521+  Header* header = pickle.headerT<Header>();
9522+  return (header->magic == kHeaderMagic && header->type >= TYPE_FIRST_VALUE &&
9523+          header->type < TYPE_LAST_VALUE);
9524+}
9525+
9526+// static
9527+std::unique_ptr<const OhGinJavascriptBridgeValue>
9528+OhGinJavascriptBridgeValue ::FromValue(const base::Value* value) {
9529+  return std::unique_ptr<const OhGinJavascriptBridgeValue>(
9530+      value->is_blob() ? new OhGinJavascriptBridgeValue(value) : NULL);
9531+}
9532+
9533+OhGinJavascriptBridgeValue ::Type OhGinJavascriptBridgeValue ::GetType() const {
9534+  const Header* header = pickle_.headerT<Header>();
9535+  DCHECK(header->type >= TYPE_FIRST_VALUE && header->type < TYPE_LAST_VALUE);
9536+  return static_cast<Type>(header->type);
9537+}
9538+
9539+bool OhGinJavascriptBridgeValue ::IsType(Type type) const {
9540+  return GetType() == type;
9541+}
9542+
9543+bool OhGinJavascriptBridgeValue ::GetAsNonFinite(float* out_value) const {
9544+  if (GetType() == TYPE_NONFINITE) {
9545+    base::PickleIterator iter(pickle_);
9546+    return iter.ReadFloat(out_value);
9547+  } else {
9548+    return false;
9549+  }
9550+}
9551+
9552+bool OhGinJavascriptBridgeValue ::GetAsObjectID(int32_t* out_object_id) const {
9553+  if (GetType() == TYPE_OBJECT_ID) {
9554+    base::PickleIterator iter(pickle_);
9555+    return iter.ReadInt(out_object_id);
9556+  } else {
9557+    return false;
9558+  }
9559+}
9560+
9561+bool OhGinJavascriptBridgeValue ::GetAsUInt32(uint32_t* out_value) const {
9562+  if (GetType() == TYPE_UINT32) {
9563+    base::PickleIterator iter(pickle_);
9564+    return iter.ReadUInt32(out_value);
9565+  } else {
9566+    return false;
9567+  }
9568+}
9569+
9570+OhGinJavascriptBridgeValue ::OhGinJavascriptBridgeValue(Type type)
9571+    : pickle_(sizeof(Header)) {
9572+  Header* header = pickle_.headerT<Header>();
9573+  header->magic = kHeaderMagic;
9574+  header->type = type;
9575+}
9576+
9577+OhGinJavascriptBridgeValue ::OhGinJavascriptBridgeValue(
9578+    const base::Value* value)
9579+    : pickle_(reinterpret_cast<const char*>(value->GetBlob().data()),
9580+              value->GetBlob().size()) {
9581+  DCHECK(ContainsOhGinJavascriptBridgeValue(value));
9582+}
9583+
9584+std::unique_ptr<base::Value>
9585+OhGinJavascriptBridgeValue ::SerializeToBinaryValue() {
9586+  const auto* data = static_cast<const uint8_t*>(pickle_.data());
9587+  return base::Value::ToUniquePtrValue(
9588+      base::Value(base::make_span(data, pickle_.size())));
9589+}
9590diff --git a/cef/libcef/common/javascript/oh_gin_javascript_bridge_value.h b/cef/libcef/common/javascript/oh_gin_javascript_bridge_value.h
9591new file mode 100644
9592index 0000000000..bf862f1c42
9593--- /dev/null
9594+++ b/cef/libcef/common/javascript/oh_gin_javascript_bridge_value.h
9595@@ -0,0 +1,66 @@
9596+// Copyright (c) 2022 Huawei Device Co., Ltd.
9597+// Copyright 2018 The Chromium Authors. All rights reserved.
9598+// Use of this source code is governed by a BSD-style license that can be
9599+// found in the LICENSE file.
9600+
9601+#ifndef OH_GIN_JAVASCRIPT_BRIDGE_VALUE_H
9602+#define OH_GIN_JAVASCRIPT_BRIDGE_VALUE_H
9603+
9604+#include <stdint.h>
9605+
9606+#include <memory>
9607+
9608+#include "base/pickle.h"
9609+#include "base/values.h"
9610+
9611+// In Javascript Bridge, we need to pass some kinds of values that can't
9612+// be put into base::Value. And since base::Value is not extensible,
9613+// we transfer these special values via base::Value.
9614+
9615+class OhGinJavascriptBridgeValue {
9616+ public:
9617+  enum Type {
9618+    TYPE_FIRST_VALUE = 0,
9619+    // JavaScript 'undefined'
9620+    TYPE_UNDEFINED = 0,
9621+    // JavaScript NaN and Infinity
9622+    TYPE_NONFINITE,
9623+    // Bridge Object ID
9624+    TYPE_OBJECT_ID,
9625+    // Uint32 type
9626+    TYPE_UINT32,
9627+    TYPE_LAST_VALUE
9628+  };
9629+
9630+  OhGinJavascriptBridgeValue(const OhGinJavascriptBridgeValue&) = delete;
9631+  OhGinJavascriptBridgeValue& operator=(const OhGinJavascriptBridgeValue&) =
9632+      delete;
9633+
9634+  // Serialization
9635+  static std::unique_ptr<base::Value> CreateUndefinedValue();
9636+  static std::unique_ptr<base::Value> CreateNonFiniteValue(float in_value);
9637+  static std::unique_ptr<base::Value> CreateNonFiniteValue(double in_value);
9638+  static std::unique_ptr<base::Value> CreateObjectIDValue(int32_t in_value);
9639+  static std::unique_ptr<base::Value> CreateUInt32Value(uint32_t in_value);
9640+
9641+  // De-serialization
9642+  static bool ContainsOhGinJavascriptBridgeValue(const base::Value* value);
9643+  static std::unique_ptr<const OhGinJavascriptBridgeValue> FromValue(
9644+      const base::Value* value);
9645+
9646+  Type GetType() const;
9647+  bool IsType(Type type) const;
9648+
9649+  bool GetAsNonFinite(float* out_value) const;
9650+  bool GetAsObjectID(int32_t* out_object_id) const;
9651+  bool GetAsUInt32(uint32_t* out_value) const;
9652+
9653+ private:
9654+  explicit OhGinJavascriptBridgeValue(Type type);
9655+  explicit OhGinJavascriptBridgeValue(const base::Value* value);
9656+  std::unique_ptr<base::Value> SerializeToBinaryValue();
9657+
9658+  base::Pickle pickle_;
9659+};
9660+
9661+#endif  // OH_GIN_JAVASCRIPT_BRIDGE_VALUE_H
9662\ No newline at end of file
9663diff --git a/cef/libcef/renderer/alloy/alloy_content_renderer_client.cc b/cef/libcef/renderer/alloy/alloy_content_renderer_client.cc
9664index 096412f29f..073ba4c7fb 100644
9665--- a/cef/libcef/renderer/alloy/alloy_content_renderer_client.cc
9666+++ b/cef/libcef/renderer/alloy/alloy_content_renderer_client.cc
9667@@ -30,6 +30,7 @@
9668 #include "libcef/common/extensions/extensions_util.h"
9669 #include "libcef/common/request_impl.h"
9670 #include "libcef/features/runtime_checks.h"
9671+#include "libcef/renderer/alloy/alloy_content_settings_client.h"
9672 #include "libcef/renderer/alloy/alloy_render_frame_observer.h"
9673 #include "libcef/renderer/alloy/alloy_render_thread_observer.h"
9674 #include "libcef/renderer/alloy/url_loader_throttle_provider_impl.h"
9675@@ -272,6 +273,7 @@ void AlloyContentRendererClient::RenderThreadConnected() {
9676
9677 void AlloyContentRendererClient::RenderFrameCreated(
9678     content::RenderFrame* render_frame) {
9679+  new AlloyContentSettingsClient(render_frame);
9680   AlloyRenderFrameObserver* render_frame_observer =
9681       new AlloyRenderFrameObserver(render_frame);
9682   service_manager::BinderRegistry* registry = render_frame_observer->registry();
9683diff --git a/cef/libcef/renderer/alloy/alloy_content_settings_client.cc b/cef/libcef/renderer/alloy/alloy_content_settings_client.cc
9684new file mode 100644
9685index 0000000000..031ea46a42
9686--- /dev/null
9687+++ b/cef/libcef/renderer/alloy/alloy_content_settings_client.cc
9688@@ -0,0 +1,25 @@
9689+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
9690+// Use of this source code is governed by a BSD-style license that can be
9691+// found in the LICENSE file.
9692+
9693+#include "libcef/renderer/alloy/alloy_content_settings_client.h"
9694+
9695+#include "content/public/renderer/render_frame.h"
9696+#include "third_party/blink/public/common/web_preferences/web_preferences.h"
9697+#include "third_party/blink/public/web/web_local_frame.h"
9698+
9699+AlloyContentSettingsClient::AlloyContentSettingsClient(
9700+    content::RenderFrame* render_frame)
9701+    : content::RenderFrameObserver(render_frame) {
9702+  render_frame->GetWebFrame()->SetContentSettingsClient(this);
9703+}
9704+
9705+AlloyContentSettingsClient::~AlloyContentSettingsClient() {}
9706+
9707+bool AlloyContentSettingsClient::ShouldAutoupgradeMixedContent() {
9708+  return render_frame()->GetBlinkPreferences().allow_mixed_content_upgrades;
9709+}
9710+
9711+void AlloyContentSettingsClient::OnDestruct() {
9712+  delete this;
9713+}
9714diff --git a/cef/libcef/renderer/alloy/alloy_content_settings_client.h b/cef/libcef/renderer/alloy/alloy_content_settings_client.h
9715new file mode 100644
9716index 0000000000..29e885110a
9717--- /dev/null
9718+++ b/cef/libcef/renderer/alloy/alloy_content_settings_client.h
9719@@ -0,0 +1,29 @@
9720+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
9721+// Use of this source code is governed by a BSD-style license that can be
9722+// found in the LICENSE file.
9723+
9724+#ifndef CEF_LIBCEF_RENDERER_ALLOY_ALLOY_CONTENT_SETTINGS_CLIENT_H_
9725+#define CEF_LIBCEF_RENDERER_ALLOY_ALLOY_CONTENT_SETTINGS_CLIENT_H_
9726+
9727+#include "base/macros.h"
9728+#include "content/public/renderer/render_frame_observer.h"
9729+#include "third_party/blink/public/platform/web_content_settings_client.h"
9730+
9731+// NWeb implementation of blink::WebContentSettingsClient.
9732+class AlloyContentSettingsClient : public content::RenderFrameObserver,
9733+                                   public blink::WebContentSettingsClient {
9734+ public:
9735+  explicit AlloyContentSettingsClient(content::RenderFrame* render_view);
9736+
9737+ private:
9738+  ~AlloyContentSettingsClient() override;
9739+
9740+  // content::RenderFrameObserver implementation.
9741+  void OnDestruct() override;
9742+
9743+  bool ShouldAutoupgradeMixedContent() override;
9744+
9745+  DISALLOW_COPY_AND_ASSIGN(AlloyContentSettingsClient);
9746+};
9747+
9748+#endif  // CEF_LIBCEF_RENDERER_ALLOY_ALLOY_CONTENT_SETTINGS_CLIENT_H_
9749diff --git a/cef/libcef/renderer/blink_glue.cc b/cef/libcef/renderer/blink_glue.cc
9750index a730e12921..67907ccf03 100644
9751--- a/cef/libcef/renderer/blink_glue.cc
9752+++ b/cef/libcef/renderer/blink_glue.cc
9753@@ -57,6 +57,21 @@ bool CanGoForward(blink::WebView* view) {
9754   return view->HistoryForwardListCount() > 0;
9755 }
9756
9757+bool CanGoBackOrForward(blink::WebView* view, int num_steps) {
9758+  if (!view)
9759+    return false;
9760+  if (num_steps == 0) {
9761+    return true;
9762+  }
9763+  if (num_steps > 0 && view->HistoryForwardListCount() >= num_steps) {
9764+    return true;
9765+  }
9766+  if (num_steps < 0 && view->HistoryBackListCount() >= -num_steps) {
9767+    return true;
9768+  }
9769+  return false;
9770+}
9771+
9772 void GoBack(blink::WebView* view) {
9773   if (!view)
9774     return;
9775diff --git a/cef/libcef/renderer/blink_glue.h b/cef/libcef/renderer/blink_glue.h
9776index a7db3ef456..46fc4f596e 100644
9777--- a/cef/libcef/renderer/blink_glue.h
9778+++ b/cef/libcef/renderer/blink_glue.h
9779@@ -39,6 +39,7 @@ BLINK_EXPORT bool CanGoBack(blink::WebView* view);
9780 BLINK_EXPORT bool CanGoForward(blink::WebView* view);
9781 BLINK_EXPORT void GoBack(blink::WebView* view);
9782 BLINK_EXPORT void GoForward(blink::WebView* view);
9783+BLINK_EXPORT bool CanGoBackOrForward(blink::WebView* view, int num_steps);
9784
9785 // Returns the text of the document element.
9786 BLINK_EXPORT std::string DumpDocumentText(blink::WebLocalFrame* frame);
9787diff --git a/cef/libcef/renderer/browser_impl.cc b/cef/libcef/renderer/browser_impl.cc
9788index 007692926a..80a4444232 100644
9789--- a/cef/libcef/renderer/browser_impl.cc
9790+++ b/cef/libcef/renderer/browser_impl.cc
9791@@ -1,7 +1,7 @@
9792-// Copyright (c) 2012 The Chromium Embedded Framework Authors.
9793-// Portions copyright (c) 2011 The Chromium Authors. All rights reserved.
9794-// Use of this source code is governed by a BSD-style license that can be
9795-// found in the LICENSE file.
9796+// Copyright (c) 2022 Huawei Device Co., Ltd.
9797+// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
9798+// reserved. Use of this source code is governed by a BSD-style license that can
9799+// be found in the LICENSE file.
9800
9801 #include "libcef/renderer/browser_impl.h"
9802
9803@@ -68,7 +68,6 @@ void CefBrowserImpl::GoBack() {
9804
9805 bool CefBrowserImpl::CanGoForward() {
9806   CEF_REQUIRE_RT_RETURN(false);
9807-
9808   return blink_glue::CanGoForward(GetWebView());
9809 }
9810
9811@@ -78,6 +77,12 @@ void CefBrowserImpl::GoForward() {
9812   blink_glue::GoForward(GetWebView());
9813 }
9814
9815+bool CefBrowserImpl::CanGoBackOrForward(int num_steps) {
9816+  CEF_REQUIRE_RT_RETURN(false);
9817+
9818+  return blink_glue::CanGoBackOrForward(GetWebView(), num_steps);
9819+}
9820+
9821 bool CefBrowserImpl::IsLoading() {
9822   CEF_REQUIRE_RT_RETURN(false);
9823
9824@@ -259,6 +264,16 @@ void CefBrowserImpl::GetFrameNames(std::vector<CefString>& names) {
9825   }
9826 }
9827
9828+CefRefPtr<CefBrowserPermissionRequestDelegate>
9829+CefBrowserImpl::GetPermissionRequestDelegate() {
9830+  return nullptr;
9831+}
9832+
9833+CefRefPtr<CefGeolocationAcess>
9834+CefBrowserImpl::GetGeolocationPermissions() {
9835+  return nullptr;
9836+}
9837+
9838 // CefBrowserImpl public methods.
9839 // -----------------------------------------------------------------------------
9840
9841diff --git a/cef/libcef/renderer/browser_impl.h b/cef/libcef/renderer/browser_impl.h
9842index cb422a4460..0f6711a91d 100644
9843--- a/cef/libcef/renderer/browser_impl.h
9844+++ b/cef/libcef/renderer/browser_impl.h
9845@@ -1,7 +1,7 @@
9846-// Copyright (c) 2012 The Chromium Embedded Framework Authors.
9847-// Portions copyright (c) 2011 The Chromium Authors. All rights reserved.
9848-// Use of this source code is governed by a BSD-style license that can be
9849-// found in the LICENSE file.
9850+// Copyright (c) 2022 Huawei Device Co., Ltd.
9851+// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
9852+// reserved. Use of this source code is governed by a BSD-style license that can
9853+// be found in the LICENSE file.
9854
9855 #ifndef CEF_LIBCEF_RENDERER_BROWSER_IMPL_H_
9856 #define CEF_LIBCEF_RENDERER_BROWSER_IMPL_H_
9857@@ -49,6 +49,7 @@ class CefBrowserImpl : public CefBrowser, public blink::WebViewObserver {
9858   void GoBack() override;
9859   bool CanGoForward() override;
9860   void GoForward() override;
9861+  bool CanGoBackOrForward(int num_steps) override;
9862   bool IsLoading() override;
9863   void Reload() override;
9864   void ReloadIgnoreCache() override;
9865@@ -64,6 +65,9 @@ class CefBrowserImpl : public CefBrowser, public blink::WebViewObserver {
9866   size_t GetFrameCount() override;
9867   void GetFrameIdentifiers(std::vector<int64>& identifiers) override;
9868   void GetFrameNames(std::vector<CefString>& names) override;
9869+  CefRefPtr<CefBrowserPermissionRequestDelegate> GetPermissionRequestDelegate()
9870+      override;
9871+  CefRefPtr<CefGeolocationAcess> GetGeolocationPermissions() override;
9872
9873   CefBrowserImpl(content::RenderView* render_view,
9874                  int browser_id,
9875diff --git a/cef/libcef/renderer/frame_impl.cc b/cef/libcef/renderer/frame_impl.cc
9876index d02fbb5eaf..393ae6f30b 100644
9877--- a/cef/libcef/renderer/frame_impl.cc
9878+++ b/cef/libcef/renderer/frame_impl.cc
9879@@ -1,3 +1,4 @@
9880+// Copyright (c) 2022 Huawei Device Co., Ltd.
9881 // Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
9882 // reserved. Use of this source code is governed by a BSD-style license that can
9883 // be found in the LICENSE file.
9884@@ -42,12 +43,29 @@
9885 #include "third_party/blink/public/web/blink.h"
9886 #include "third_party/blink/public/web/web_document.h"
9887 #include "third_party/blink/public/web/web_document_loader.h"
9888+#include "third_party/blink/public/web/web_element_collection.h"
9889 #include "third_party/blink/public/web/web_frame_content_dumper.h"
9890+#include "third_party/blink/public/web/web_frame_widget.h"
9891 #include "third_party/blink/public/web/web_local_frame.h"
9892 #include "third_party/blink/public/web/web_navigation_control.h"
9893 #include "third_party/blink/public/web/web_script_source.h"
9894 #include "third_party/blink/public/web/web_view.h"
9895
9896+const std::string kAddressPrefix = "geo:0,0?q=";
9897+const std::string kEmailPrefix = "mailto:";
9898+const std::string kPhoneNumberPrefix = "tel:";
9899+
9900+enum HitTestDataType {
9901+  kUnknown = 0,
9902+  kPhone = 2,
9903+  kGeo = 3,
9904+  kEmail = 4,
9905+  kImage = 5,
9906+  kSrcLink = 7,
9907+  kSrcImageLink = 8,
9908+  kEditText = 9,
9909+};
9910+
9911 CefFrameImpl::CefFrameImpl(CefBrowserImpl* browser,
9912                            blink::WebLocalFrame* frame,
9913                            int64_t frame_id)
9914@@ -154,6 +172,21 @@ void CefFrameImpl::LoadURL(const CefString& url) {
9915   OnLoadRequest(params);
9916 }
9917
9918+void CefFrameImpl::LoadHeaderUrl(const CefString& url,
9919+                                 const CefString& additionalHttpHeaders) {
9920+  CEF_REQUIRE_RT_RETURN_VOID();
9921+
9922+  if (!frame_)
9923+    return;
9924+
9925+  CefMsg_LoadRequest_Params params;
9926+  params.url = GURL(url.ToString());
9927+  params.method = "GET";
9928+  params.headers = additionalHttpHeaders;
9929+
9930+  OnLoadRequest(params);
9931+}
9932+
9933 void CefFrameImpl::ExecuteJavaScript(const CefString& jsCode,
9934                                      const CefString& scriptUrl,
9935                                      int startLine) {
9936@@ -334,8 +367,10 @@ bool CefFrameImpl::OnMessageReceived(const IPC::Message& message) {
9937     IPC_MESSAGE_HANDLER(CefMsg_Response, OnResponse)
9938     IPC_MESSAGE_HANDLER(CefMsg_ResponseAck, OnResponseAck)
9939     IPC_MESSAGE_HANDLER(CefMsg_LoadRequest, OnLoadRequest)
9940+    IPC_MESSAGE_HANDLER(CefMsg_TouchEvent, SendTouchEvent)
9941     IPC_MESSAGE_HANDLER(CefMsg_DidStopLoading, OnDidStopLoading)
9942     IPC_MESSAGE_HANDLER(CefMsg_MoveOrResizeStarted, OnMoveOrResizeStarted)
9943+    IPC_MESSAGE_HANDLER(CefMsg_PutZoomingForTextFactor, PutZoomingForTextFactor)
9944     IPC_MESSAGE_UNHANDLED(handled = false)
9945   IPC_END_MESSAGE_MAP()
9946   return handled;
9947@@ -364,6 +399,113 @@ void CefFrameImpl::OnDidFinishLoad() {
9948   }
9949 }
9950
9951+GURL CefFrameImpl::GetAbsoluteUrl(const blink::WebNode& node,
9952+                                  const std::u16string& url_fragment) {
9953+  return GURL(node.GetDocument().CompleteURL(
9954+      blink::WebString::FromUTF16(url_fragment)));
9955+}
9956+
9957+GURL CefFrameImpl::GetAbsoluteSrcUrl(const blink::WebElement& element) {
9958+  if (element.IsNull())
9959+    return GURL();
9960+  return GetAbsoluteUrl(element, element.GetAttribute("src").Utf16());
9961+}
9962+
9963+blink::WebElement CefFrameImpl::GetImgChild(const blink::WebNode& node) {
9964+  blink::WebElementCollection collection = node.GetElementsByHTMLTagName("img");
9965+  DCHECK(!collection.IsNull());
9966+  return collection.FirstItem();
9967+}
9968+
9969+GURL CefFrameImpl::GetChildImageUrlFromElement(
9970+    const blink::WebElement& element) {
9971+  const blink::WebElement child_img = GetImgChild(element);
9972+  if (child_img.IsNull())
9973+    return GURL();
9974+  return GetAbsoluteSrcUrl(child_img);
9975+}
9976+
9977+bool CefFrameImpl::RemovePrefixAndAssignIfMatches(const std::string prefix,
9978+                                                  const GURL& url,
9979+                                                  std::string* dest) {
9980+  const base::StringPiece spec(url.possibly_invalid_spec());
9981+
9982+  if (base::StartsWith(spec, prefix)) {
9983+    url::RawCanonOutputW<1024> output;
9984+    url::DecodeURLEscapeSequences(
9985+        spec.data() + prefix.length(), spec.length() - prefix.length(),
9986+        url::DecodeURLMode::kUTF8OrIsomorphic, &output);
9987+    *dest =
9988+        base::UTF16ToUTF8(base::StringPiece16(output.data(), output.length()));
9989+    return true;
9990+  }
9991+  return false;
9992+}
9993+
9994+void CefFrameImpl::DistinguishAndAssignSrcLinkType(const GURL& url,
9995+                                                   Cef_HitData_Params* data) {
9996+  if (RemovePrefixAndAssignIfMatches(kAddressPrefix, url,
9997+                                     &data->extra_data_for_type)) {
9998+    data->type = HitTestDataType::kGeo;
9999+  } else if (RemovePrefixAndAssignIfMatches(kPhoneNumberPrefix, url,
10000+                                            &data->extra_data_for_type)) {
10001+    data->type = HitTestDataType::kPhone;
10002+  } else if (RemovePrefixAndAssignIfMatches(kEmailPrefix, url,
10003+                                            &data->extra_data_for_type)) {
10004+    data->type = HitTestDataType::kEmail;
10005+  } else {
10006+    data->type = HitTestDataType::kSrcLink;
10007+    data->extra_data_for_type = url.possibly_invalid_spec();
10008+    if (!data->extra_data_for_type.empty())
10009+      data->href = base::UTF8ToUTF16(data->extra_data_for_type);
10010+  }
10011+}
10012+
10013+void CefFrameImpl::PopulateHitTestData(const GURL& absolute_link_url,
10014+                                       const GURL& absolute_image_url,
10015+                                       bool is_editable,
10016+                                       Cef_HitData_Params* data) {
10017+  if (!absolute_image_url.is_empty())
10018+    data->img_src = absolute_image_url;
10019+
10020+  const bool is_javascript_scheme =
10021+      absolute_link_url.SchemeIs(url::kJavaScriptScheme);
10022+  const bool has_link_url = !absolute_link_url.is_empty();
10023+  const bool has_image_url = !absolute_image_url.is_empty();
10024+  if (has_link_url && !has_image_url && !is_javascript_scheme) {
10025+    DistinguishAndAssignSrcLinkType(absolute_link_url, data);
10026+  } else if (has_link_url && has_image_url && !is_javascript_scheme) {
10027+    data->type = HitTestDataType::kSrcImageLink;
10028+    data->extra_data_for_type = data->img_src.possibly_invalid_spec();
10029+    if (absolute_link_url.is_valid())
10030+      data->href = base::UTF8ToUTF16(absolute_link_url.possibly_invalid_spec());
10031+  } else if (!has_link_url && has_image_url) {
10032+    data->type = HitTestDataType::kImage;
10033+    data->extra_data_for_type = data->img_src.possibly_invalid_spec();
10034+  } else if (is_editable) {
10035+    data->type = HitTestDataType::kEditText;
10036+    DCHECK_EQ(0u, data->extra_data_for_type.length());
10037+  }
10038+}
10039+
10040+void CefFrameImpl::OnFocusedNodeChanged(const blink::WebElement& element) {
10041+  Cef_HitData_Params data;
10042+  if (element.IsNull()) {
10043+    LOG(INFO) << "FocusedHitDataChange element is NULL";
10044+    return;
10045+  }
10046+  LOG(INFO) << "FocusedHitDataChangeBegin";
10047+  data.href = element.GetAttribute("href").Utf16();
10048+  data.anchor_text = element.TextContent().Utf16();
10049+  GURL absolute_link_url;
10050+  if (element.IsLink())
10051+    absolute_link_url = GetAbsoluteUrl(element, data.href);
10052+  GURL absolute_image_url = GetChildImageUrlFromElement(element);
10053+  PopulateHitTestData(absolute_link_url, absolute_image_url,
10054+                      element.IsEditable(), &data);
10055+  LOG(INFO) << "FocusedHitDataChangeEnd";
10056+  Send(new CefHostMsg_HitData(MSG_ROUTING_NONE, data));
10057+}
10058 void CefFrameImpl::OnDraggableRegionsChanged() {
10059   blink::WebVector<blink::WebDraggableRegion> webregions =
10060       frame_->GetDocument().DraggableRegions();
10061@@ -534,6 +676,30 @@ void CefFrameImpl::OnDidStopLoading() {
10062   browser_->OnLoadingStateChange(false);
10063 }
10064
10065+void CefFrameImpl::SendTouchEvent(const Cef_TouchEvent_Params& params) {
10066+  auto render_frame = content::RenderFrame::FromWebFrame(frame_);
10067+  DCHECK(render_frame->IsMainFrame());
10068+  blink::WebView* webview = render_frame->GetRenderView()->GetWebView();
10069+  if (!webview) {
10070+    LOG(INFO) << "SendTouchEvent webview is NULL";
10071+    return;
10072+  }
10073+  const blink::WebHitTestResult result = webview->HitTestResultForTap(
10074+      gfx::Point(params.x, params.y), gfx::Size(params.width, params.height));
10075+  Cef_HitData_Params data;
10076+  GURL absolute_image_url = result.AbsoluteImageURL();
10077+  if (!result.UrlElement().IsNull()) {
10078+    data.anchor_text = result.UrlElement().TextContent().Utf16();
10079+    data.href = result.UrlElement().GetAttribute("href").Utf16();
10080+    if (absolute_image_url.is_empty())
10081+      absolute_image_url = GetChildImageUrlFromElement(result.UrlElement());
10082+  }
10083+
10084+  PopulateHitTestData(result.AbsoluteLinkURL(), absolute_image_url,
10085+                      result.IsContentEditable(), &data);
10086+  Send(new CefHostMsg_HitData(MSG_ROUTING_NONE, data));
10087+}
10088+
10089 void CefFrameImpl::OnMoveOrResizeStarted() {
10090   if (frame_) {
10091     auto web_view = frame_->View();
10092@@ -551,6 +717,19 @@ void CefFrameImpl::OnLoadRequest(const CefMsg_LoadRequest_Params& params) {
10093   blink_glue::StartNavigation(frame_, request);
10094 }
10095
10096+void CefFrameImpl::PutZoomingForTextFactor(float factor) {
10097+  auto render_frame = content::RenderFrame::FromWebFrame(frame_);
10098+  DCHECK(render_frame->IsMainFrame());
10099+  blink::WebView* webview = render_frame->GetRenderView()->GetWebView();
10100+
10101+  if (!webview)
10102+    return;
10103+  // Hide selection and autofill popups.
10104+  webview->CancelPagePopup();
10105+
10106+  render_frame->GetWebFrame()->FrameWidget()->SetTextZoomFactor(factor);
10107+}
10108+
10109 // Enable deprecation warnings on Windows. See http://crbug.com/585142.
10110 #if defined(OS_WIN)
10111 #if defined(__clang__)
10112diff --git a/cef/libcef/renderer/frame_impl.h b/cef/libcef/renderer/frame_impl.h
10113index f587e0340e..2912625df3 100644
10114--- a/cef/libcef/renderer/frame_impl.h
10115+++ b/cef/libcef/renderer/frame_impl.h
10116@@ -1,3 +1,4 @@
10117+// Copyright (c) 2022 Huawei Device Co., Ltd.
10118 // Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
10119 // reserved. Use of this source code is governed by a BSD-style license that can
10120 // be found in the LICENSE file.
10121@@ -9,6 +10,7 @@
10122 #include <string>
10123 #include "include/cef_frame.h"
10124 #include "include/cef_v8.h"
10125+#include "third_party/blink/public/web/web_element.h"
10126
10127 namespace base {
10128 class ListValue;
10129@@ -29,6 +31,8 @@ class GURL;
10130
10131 class CefBrowserImpl;
10132 class CefResponseManager;
10133+struct Cef_HitData_Params;
10134+struct Cef_TouchEvent_Params;
10135 struct CefMsg_LoadRequest_Params;
10136 struct Cef_Request_Params;
10137 struct Cef_Response_Params;
10138@@ -74,6 +78,7 @@ class CefFrameImpl : public CefFrame {
10139       CefRefPtr<CefURLRequestClient> client) override;
10140   void SendProcessMessage(CefProcessId target_process,
10141                           CefRefPtr<CefProcessMessage> message) override;
10142+  void LoadHeaderUrl(const CefString& url, const CefString& additionalHttpHeaders) override;
10143
10144   // Used by CefRenderURLRequest.
10145   std::unique_ptr<blink::WebURLLoader> CreateURLLoader();
10146@@ -82,6 +87,7 @@ class CefFrameImpl : public CefFrame {
10147
10148   // Forwarded from CefRenderFrameObserver.
10149   void OnAttached();
10150+  void OnFocusedNodeChanged(const blink::WebElement& element);
10151   bool OnMessageReceived(const IPC::Message& message);
10152   void OnDidFinishLoad();
10153   void OnDraggableRegionsChanged();
10154@@ -106,8 +112,24 @@ class CefFrameImpl : public CefFrame {
10155   void OnResponse(const Cef_Response_Params& params);
10156   void OnResponseAck(int request_id);
10157   void OnDidStopLoading();
10158+  void SendTouchEvent(const Cef_TouchEvent_Params& params);
10159   void OnMoveOrResizeStarted();
10160   void OnLoadRequest(const CefMsg_LoadRequest_Params& params);
10161+  void PutZoomingForTextFactor(float factor);
10162+  GURL GetAbsoluteUrl(const blink::WebNode& node,
10163+                      const std::u16string& url_fragment);
10164+  GURL GetAbsoluteSrcUrl(const blink::WebElement& element);
10165+  blink::WebElement GetImgChild(const blink::WebNode& node);
10166+  GURL GetChildImageUrlFromElement(const blink::WebElement& element);
10167+  bool RemovePrefixAndAssignIfMatches(const std::string prefix,
10168+                                      const GURL& url,
10169+                                      std::string* dest);
10170+  void DistinguishAndAssignSrcLinkType(const GURL& url,
10171+                                       Cef_HitData_Params* data);
10172+  void PopulateHitTestData(const GURL& absolute_link_url,
10173+                           const GURL& absolute_image_url,
10174+                           bool is_editable,
10175+                           Cef_HitData_Params* data);
10176
10177   CefBrowserImpl* browser_;
10178   blink::WebLocalFrame* frame_;
10179diff --git a/cef/libcef/renderer/javascript/oh_gin_javascript_bridge_dispatcher.cc b/cef/libcef/renderer/javascript/oh_gin_javascript_bridge_dispatcher.cc
10180new file mode 100644
10181index 0000000000..30c0568a71
10182--- /dev/null
10183+++ b/cef/libcef/renderer/javascript/oh_gin_javascript_bridge_dispatcher.cc
10184@@ -0,0 +1,136 @@
10185+// Copyright (c) 2022 Huawei Device Co., Ltd.
10186+// Copyright 2018 The Chromium Authors. All rights reserved.
10187+// Use of this source code is governed by a BSD-style license that can be
10188+// found in the LICENSE file.
10189+
10190+#include "oh_gin_javascript_bridge_dispatcher.h"
10191+#include "base/auto_reset.h"
10192+#include "cef/libcef/common/javascript/oh_gin_javascript_bridge_messages.h"
10193+#include "cef/libcef/renderer/javascript/oh_gin_javascript_bridge_object.h"
10194+#include "content/public/renderer/render_frame.h"
10195+
10196+#include "third_party/blink/public/web/web_local_frame.h"
10197+#include "third_party/blink/public/web/web_view.h"
10198+namespace NWEB {
10199+OhGinJavascriptBridgeDispatcher::OhGinJavascriptBridgeDispatcher(
10200+    content::RenderFrame* render_frame)
10201+    : content::RenderFrameObserver(render_frame),
10202+      inside_did_clear_window_object_(false) {}
10203+
10204+OhGinJavascriptBridgeDispatcher::~OhGinJavascriptBridgeDispatcher() {}
10205+
10206+bool OhGinJavascriptBridgeDispatcher::OnMessageReceived(
10207+    const IPC::Message& msg) {
10208+  bool handled = true;
10209+  IPC_BEGIN_MESSAGE_MAP(OhGinJavascriptBridgeDispatcher, msg)
10210+    IPC_MESSAGE_HANDLER(OhGinJavascriptBridgeMsg_AddNamedObject,
10211+                        OnAddNamedObject)
10212+    IPC_MESSAGE_HANDLER(OhGinJavascriptBridgeMsg_RemoveNamedObject,
10213+                        OnRemoveNamedObject)
10214+    IPC_MESSAGE_UNHANDLED(handled = false)
10215+  IPC_END_MESSAGE_MAP()
10216+  return handled;
10217+}
10218+
10219+void OhGinJavascriptBridgeDispatcher::DidClearWindowObject() {
10220+  if (inside_did_clear_window_object_)
10221+    return;
10222+  base::AutoReset<bool> flag_entry(&inside_did_clear_window_object_, true);
10223+  for (NamedObjectMap::const_iterator iter = named_objects_.begin();
10224+       iter != named_objects_.end(); ++iter) {
10225+    if (objects_.Lookup(iter->second))
10226+      objects_.Remove(iter->second);
10227+
10228+    OhGinJavascriptBridgeObject* object =
10229+        OhGinJavascriptBridgeObject::InjectNamed(render_frame()->GetWebFrame(),
10230+                                                 AsWeakPtr(), iter->first,
10231+                                                 iter->second);
10232+    if (object) {
10233+      objects_.AddWithID(object, iter->second);
10234+    } else {
10235+      // Inform the host about wrapper creation failure.
10236+      render_frame()->Send(
10237+          new OhGinJavascriptBridgeHostMsg_ObjectWrapperDeleted(routing_id(),
10238+                                                                iter->second));
10239+    }
10240+  }
10241+}
10242+
10243+void OhGinJavascriptBridgeDispatcher::OnAddNamedObject(const std::string& name,
10244+                                                       ObjectID object_id) {
10245+  LOG(INFO) << "OnAddNamedObject name : " << name
10246+            << " object_id : " << object_id;
10247+  named_objects_.insert(std::make_pair(name, object_id));
10248+}
10249+
10250+void OhGinJavascriptBridgeDispatcher::OnRemoveNamedObject(
10251+    const std::string& name) {
10252+  // Removal becomes in effect on next reload. We simply removing the entry
10253+  // from the map here.
10254+  NamedObjectMap::iterator iter = named_objects_.find(name);
10255+  DCHECK(iter != named_objects_.end());
10256+  named_objects_.erase(iter);
10257+}
10258+
10259+void OhGinJavascriptBridgeDispatcher::GetJavascriptMethods(
10260+    ObjectID object_id,
10261+    std::set<std::string>* methods) {
10262+  render_frame()->Send(new OhGinJavascriptBridgeHostMsg_GetMethods(
10263+      routing_id(), object_id, methods));
10264+}
10265+
10266+bool OhGinJavascriptBridgeDispatcher::HasJavascriptMethod(
10267+    ObjectID object_id,
10268+    const std::string& method_name) {
10269+  LOG(INFO) << "HasJavascriptMethod";
10270+  bool result;
10271+  render_frame()->Send(new OhGinJavascriptBridgeHostMsg_HasMethod(
10272+      routing_id(), object_id, method_name, &result));
10273+  return result;
10274+}
10275+
10276+std::unique_ptr<base::Value>
10277+OhGinJavascriptBridgeDispatcher::InvokeJavascriptMethod(
10278+    ObjectID object_id,
10279+    const std::string& method_name,
10280+    const base::ListValue& arguments,
10281+    OhGinJavascriptBridgeError* error) {
10282+  base::ListValue result_wrapper;
10283+  render_frame()->Send(new OhGinJavascriptBridgeHostMsg_InvokeMethod(
10284+      routing_id(), object_id, method_name, arguments, &result_wrapper, error));
10285+  base::Value* result;
10286+  if (result_wrapper.Get(0, &result)) {
10287+    return std::unique_ptr<base::Value>(result->DeepCopy());
10288+  } else {
10289+    return std::unique_ptr<base::Value>();
10290+  }
10291+}
10292+
10293+OhGinJavascriptBridgeObject* OhGinJavascriptBridgeDispatcher::GetObject(
10294+    const ObjectID object_id) {
10295+  LOG(INFO) << "GetObject";
10296+  OhGinJavascriptBridgeObject* result = objects_.Lookup(object_id);
10297+  if (!result) {
10298+    result =
10299+        OhGinJavascriptBridgeObject::InjectAnonymous(AsWeakPtr(), object_id);
10300+    if (result)
10301+      objects_.AddWithID(result, object_id);
10302+  }
10303+  return result;
10304+}
10305+
10306+void OhGinJavascriptBridgeDispatcher::OnOhGinJavascriptBridgeObjectDeleted(
10307+    const OhGinJavascriptBridgeObject* object) {
10308+  int object_id = object->object_id();
10309+  // Ignore cleaning up of old object wrappers.
10310+  if (objects_.Lookup(object_id) != object)
10311+    return;
10312+  objects_.Remove(object_id);
10313+  render_frame()->Send(new OhGinJavascriptBridgeHostMsg_ObjectWrapperDeleted(
10314+      routing_id(), object_id));
10315+}
10316+
10317+void OhGinJavascriptBridgeDispatcher::OnDestruct() {
10318+  delete this;
10319+}
10320+}  // namespace NWEB
10321diff --git a/cef/libcef/renderer/javascript/oh_gin_javascript_bridge_dispatcher.h b/cef/libcef/renderer/javascript/oh_gin_javascript_bridge_dispatcher.h
10322new file mode 100644
10323index 0000000000..f9707de97e
10324--- /dev/null
10325+++ b/cef/libcef/renderer/javascript/oh_gin_javascript_bridge_dispatcher.h
10326@@ -0,0 +1,63 @@
10327+// Copyright (c) 2022 Huawei Device Co., Ltd.
10328+// Copyright 2018 The Chromium Authors. All rights reserved.
10329+// Use of this source code is governed by a BSD-style license that can be
10330+// found in the LICENSE file.
10331+
10332+#ifndef OH_GIN_JAVASCRIPT_BRIDGE_DISPATCHER_H
10333+#define OH_GIN_JAVASCRIPT_BRIDGE_DISPATCHER_H
10334+
10335+#include <map>
10336+#include <memory>
10337+#include <set>
10338+#include "base/containers/id_map.h"
10339+#include "base/macros.h"
10340+#include "base/memory/weak_ptr.h"
10341+#include "base/values.h"
10342+#include "cef/libcef/common/javascript/oh_gin_javascript_bridge_errors.h"
10343+#include "content/public/renderer/render_frame_observer.h"
10344+
10345+namespace NWEB {
10346+class OhGinJavascriptBridgeObject;
10347+class OhGinJavascriptBridgeDispatcher
10348+    : public base::SupportsWeakPtr<OhGinJavascriptBridgeDispatcher>,
10349+      public content::RenderFrameObserver {
10350+ public:
10351+  using ObjectMap = base::IDMap<OhGinJavascriptBridgeObject*>;
10352+  using ObjectID = ObjectMap::KeyType;
10353+
10354+  explicit OhGinJavascriptBridgeDispatcher(content::RenderFrame* render_frame);
10355+
10356+  ~OhGinJavascriptBridgeDispatcher() override;
10357+
10358+  // RenderFrameObserver override:
10359+  bool OnMessageReceived(const IPC::Message& message) override;
10360+  void DidClearWindowObject() override;
10361+
10362+  void GetJavascriptMethods(ObjectID object_id, std::set<std::string>* methods);
10363+  bool HasJavascriptMethod(ObjectID object_id, const std::string& method_name);
10364+
10365+  std::unique_ptr<base::Value> InvokeJavascriptMethod(
10366+      ObjectID object_id,
10367+      const std::string& method_name,
10368+      const base::ListValue& arguments,
10369+      OhGinJavascriptBridgeError* error);
10370+
10371+  OhGinJavascriptBridgeObject* GetObject(const ObjectID object_id);
10372+  void OnOhGinJavascriptBridgeObjectDeleted(
10373+      const OhGinJavascriptBridgeObject* object);
10374+
10375+ private:
10376+  // RenderFrameObserver implementation.
10377+  void OnDestruct() override;
10378+  void OnAddNamedObject(const std::string& name, ObjectID object_id);
10379+  void OnRemoveNamedObject(const std::string& name);
10380+
10381+  typedef std::map<std::string, ObjectID> NamedObjectMap;
10382+  NamedObjectMap named_objects_;
10383+  ObjectMap objects_;
10384+  bool inside_did_clear_window_object_;
10385+
10386+  DISALLOW_COPY_AND_ASSIGN(OhGinJavascriptBridgeDispatcher);
10387+};
10388+}  // namespace NWEB
10389+#endif
10390\ No newline at end of file
10391diff --git a/cef/libcef/renderer/javascript/oh_gin_javascript_bridge_object.cc b/cef/libcef/renderer/javascript/oh_gin_javascript_bridge_object.cc
10392new file mode 100644
10393index 0000000000..cc627de10a
10394--- /dev/null
10395+++ b/cef/libcef/renderer/javascript/oh_gin_javascript_bridge_object.cc
10396@@ -0,0 +1,133 @@
10397+// Copyright (c) 2022 Huawei Device Co., Ltd.
10398+// Copyright 2018 The Chromium Authors. All rights reserved.
10399+// Use of this source code is governed by a BSD-style license that can be
10400+// found in the LICENSE file.
10401+
10402+#include "libcef/renderer/javascript/oh_gin_javascript_bridge_object.h"
10403+
10404+#include "base/bind.h"
10405+#include "content/public/renderer/render_thread.h"
10406+#include "gin/function_template.h"
10407+#include "libcef/common/javascript/oh_gin_javascript_bridge_messages.h"
10408+#include "libcef/renderer/javascript/oh_gin_javascript_bridge_dispatcher.h"
10409+#include "libcef/renderer/javascript/oh_gin_javascript_function_invocation_helper.h"
10410+#include "third_party/blink/public/web/blink.h"
10411+#include "third_party/blink/public/web/web_local_frame.h"
10412+
10413+namespace NWEB {
10414+gin::WrapperInfo OhGinJavascriptBridgeObject::kWrapperInfo = {
10415+    gin::kEmbedderNativeGin};
10416+
10417+// static
10418+OhGinJavascriptBridgeObject* OhGinJavascriptBridgeObject::InjectNamed(
10419+    blink::WebLocalFrame* frame,
10420+    const base::WeakPtr<OhGinJavascriptBridgeDispatcher>& dispatcher,
10421+    const std::string& object_name,
10422+    OhGinJavascriptBridgeDispatcher::ObjectID object_id) {
10423+  v8::Isolate* isolate = blink::MainThreadIsolate();
10424+  v8::HandleScope handle_scope(isolate);
10425+  v8::Local<v8::Context> context = frame->MainWorldScriptContext();
10426+  if (context.IsEmpty())
10427+    return NULL;
10428+
10429+  OhGinJavascriptBridgeObject* object =
10430+      new OhGinJavascriptBridgeObject(isolate, dispatcher, object_id);
10431+
10432+  v8::Context::Scope context_scope(context);
10433+  v8::Local<v8::Object> global = context->Global();
10434+  gin::Handle<OhGinJavascriptBridgeObject> controller =
10435+      gin::CreateHandle(isolate, object);
10436+  // WrappableBase instance deletes itself in case of a wrapper
10437+  // creation failure, thus there is no need to delete |object|.
10438+  if (controller.IsEmpty())
10439+    return NULL;
10440+
10441+  global->Set(context, gin::StringToV8(isolate, object_name), controller.ToV8())
10442+      .Check();
10443+
10444+  return object;
10445+}
10446+
10447+// static
10448+OhGinJavascriptBridgeObject* OhGinJavascriptBridgeObject::InjectAnonymous(
10449+    const base::WeakPtr<OhGinJavascriptBridgeDispatcher>& dispatcher,
10450+    OhGinJavascriptBridgeDispatcher::ObjectID object_id) {
10451+  return new OhGinJavascriptBridgeObject(blink::MainThreadIsolate(), dispatcher,
10452+                                         object_id);
10453+}
10454+
10455+OhGinJavascriptBridgeObject::OhGinJavascriptBridgeObject(
10456+    v8::Isolate* isolate,
10457+    const base::WeakPtr<OhGinJavascriptBridgeDispatcher>& dispatcher,
10458+    OhGinJavascriptBridgeDispatcher::ObjectID object_id)
10459+    : gin::NamedPropertyInterceptor(isolate, this),
10460+      dispatcher_(dispatcher),
10461+      object_id_(object_id),
10462+      frame_routing_id_(dispatcher_->routing_id()),
10463+      template_cache_(isolate) {}
10464+
10465+OhGinJavascriptBridgeObject::~OhGinJavascriptBridgeObject() {
10466+  if (dispatcher_) {
10467+    dispatcher_->OnOhGinJavascriptBridgeObjectDeleted(this);
10468+  } else {
10469+    // A wrapper can outlive a render frame, and thus the dispatcher.
10470+    // Note that we intercept GinJavaBridgeHostMsg messages in a browser filter
10471+    // thus it's OK to send the message with a routing id of a ceased frame.
10472+    content::RenderThread::Get()->Send(
10473+        new OhGinJavascriptBridgeHostMsg_ObjectWrapperDeleted(frame_routing_id_,
10474+                                                              object_id_));
10475+  }
10476+}
10477+
10478+gin::ObjectTemplateBuilder
10479+OhGinJavascriptBridgeObject::GetObjectTemplateBuilder(v8::Isolate* isolate) {
10480+  return gin::Wrappable<OhGinJavascriptBridgeObject>::GetObjectTemplateBuilder(
10481+             isolate)
10482+      .AddNamedPropertyInterceptor();
10483+}
10484+
10485+v8::Local<v8::Value> OhGinJavascriptBridgeObject::GetNamedProperty(
10486+    v8::Isolate* isolate,
10487+    const std::string& property) {
10488+  std::map<std::string, bool>::iterator method_pos =
10489+      known_methods_.find(property);
10490+  if (method_pos == known_methods_.end()) {
10491+    if (!dispatcher_) {
10492+      return v8::Local<v8::Value>();
10493+    }
10494+    known_methods_[property] =
10495+        dispatcher_->HasJavascriptMethod(object_id_, property);
10496+  }
10497+  if (known_methods_[property]) {
10498+    return GetFunctionTemplate(isolate, property)
10499+        ->GetFunction(isolate->GetCurrentContext())
10500+        .FromMaybe(v8::Local<v8::Value>());
10501+  } else {
10502+    return v8::Local<v8::Value>();
10503+  }
10504+}
10505+
10506+std::vector<std::string> OhGinJavascriptBridgeObject::EnumerateNamedProperties(
10507+    v8::Isolate* isolate) {
10508+  std::set<std::string> method_names;
10509+  if (dispatcher_)
10510+    dispatcher_->GetJavascriptMethods(object_id_, &method_names);
10511+  return std::vector<std::string>(method_names.begin(), method_names.end());
10512+}
10513+
10514+v8::Local<v8::FunctionTemplate>
10515+OhGinJavascriptBridgeObject::GetFunctionTemplate(v8::Isolate* isolate,
10516+                                                 const std::string& name) {
10517+  LOG(INFO) << "GetFunctionTemplate name : " << name.c_str();
10518+  v8::Local<v8::FunctionTemplate> function_template = template_cache_.Get(name);
10519+  if (!function_template.IsEmpty())
10520+    return function_template;
10521+  function_template = gin::CreateFunctionTemplate(
10522+      isolate, base::BindRepeating(
10523+                   &OhGinJavascriptFunctionInvocationHelper::Invoke,
10524+                   base::Owned(new OhGinJavascriptFunctionInvocationHelper(
10525+                       name, dispatcher_))));
10526+  template_cache_.Set(name, function_template);
10527+  return function_template;
10528+}
10529+}  // namespace NWEB
10530\ No newline at end of file
10531diff --git a/cef/libcef/renderer/javascript/oh_gin_javascript_bridge_object.h b/cef/libcef/renderer/javascript/oh_gin_javascript_bridge_object.h
10532new file mode 100644
10533index 0000000000..f7eb636810
10534--- /dev/null
10535+++ b/cef/libcef/renderer/javascript/oh_gin_javascript_bridge_object.h
10536@@ -0,0 +1,75 @@
10537+// Copyright (c) 2022 Huawei Device Co., Ltd.
10538+// Copyright 2018 The Chromium Authors. All rights reserved.
10539+// Use of this source code is governed by a BSD-style license that can be
10540+// found in the LICENSE file.
10541+
10542+#ifndef OH_GIN_JAVASCRIPT_BRIDGE_OBJECT_H
10543+#define OH_GIN_JAVASCRIPT_BRIDGE_OBJECT_H
10544+
10545+#include <map>
10546+
10547+#include "base/macros.h"
10548+#include "base/memory/weak_ptr.h"
10549+#include "cef/libcef/renderer/javascript/oh_gin_javascript_bridge_dispatcher.h"
10550+#include "gin/handle.h"
10551+#include "gin/interceptor.h"
10552+#include "gin/object_template_builder.h"
10553+#include "gin/wrappable.h"
10554+#include "v8/include/v8-util.h"
10555+
10556+namespace blink {
10557+class WebLocalFrame;
10558+}
10559+
10560+namespace NWEB {
10561+class OhGinJavascriptBridgeObject
10562+    : public gin::Wrappable<OhGinJavascriptBridgeObject>,
10563+      public gin::NamedPropertyInterceptor {
10564+ public:
10565+  static gin::WrapperInfo kWrapperInfo;
10566+
10567+  OhGinJavascriptBridgeDispatcher::ObjectID object_id() const {
10568+    return object_id_;
10569+  }
10570+
10571+  // gin::Wrappable.
10572+  gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
10573+      v8::Isolate* isolate) override;
10574+
10575+  // gin::NamedPropertyInterceptor
10576+  v8::Local<v8::Value> GetNamedProperty(v8::Isolate* isolate,
10577+                                        const std::string& property) override;
10578+  std::vector<std::string> EnumerateNamedProperties(
10579+      v8::Isolate* isolate) override;
10580+
10581+  static OhGinJavascriptBridgeObject* InjectNamed(
10582+      blink::WebLocalFrame* frame,
10583+      const base::WeakPtr<OhGinJavascriptBridgeDispatcher>& dispatcher,
10584+      const std::string& object_name,
10585+      OhGinJavascriptBridgeDispatcher::ObjectID object_id);
10586+
10587+  static OhGinJavascriptBridgeObject* InjectAnonymous(
10588+      const base::WeakPtr<OhGinJavascriptBridgeDispatcher>& dispatcher,
10589+      OhGinJavascriptBridgeDispatcher::ObjectID object_id);
10590+
10591+ private:
10592+  OhGinJavascriptBridgeObject(
10593+      v8::Isolate* isolate,
10594+      const base::WeakPtr<OhGinJavascriptBridgeDispatcher>& dispatcher,
10595+      OhGinJavascriptBridgeDispatcher::ObjectID object_id);
10596+
10597+  ~OhGinJavascriptBridgeObject() override;
10598+
10599+  v8::Local<v8::FunctionTemplate> GetFunctionTemplate(v8::Isolate* isolate,
10600+                                                      const std::string& name);
10601+
10602+  base::WeakPtr<OhGinJavascriptBridgeDispatcher> dispatcher_;
10603+  OhGinJavascriptBridgeDispatcher::ObjectID object_id_;
10604+  int frame_routing_id_;
10605+  std::map<std::string, bool> known_methods_;
10606+  v8::StdGlobalValueMap<std::string, v8::FunctionTemplate> template_cache_;
10607+
10608+  DISALLOW_COPY_AND_ASSIGN(OhGinJavascriptBridgeObject);
10609+};
10610+}  // namespace NWEB
10611+#endif
10612\ No newline at end of file
10613diff --git a/cef/libcef/renderer/javascript/oh_gin_javascript_bridge_value_converter.cc b/cef/libcef/renderer/javascript/oh_gin_javascript_bridge_value_converter.cc
10614new file mode 100644
10615index 0000000000..0a3a9f3670
10616--- /dev/null
10617+++ b/cef/libcef/renderer/javascript/oh_gin_javascript_bridge_value_converter.cc
10618@@ -0,0 +1,178 @@
10619+// Copyright (c) 2022 Huawei Device Co., Ltd.
10620+// Copyright 2018 The Chromium Authors. All rights reserved.
10621+// Use of this source code is governed by a BSD-style license that can be
10622+// found in the LICENSE file.
10623+
10624+#include "libcef/renderer/javascript/oh_gin_javascript_bridge_value_converter.h"
10625+
10626+#include <stddef.h>
10627+#include <stdint.h>
10628+
10629+#include <cmath>
10630+
10631+#include "base/memory/ptr_util.h"
10632+#include "base/values.h"
10633+#include "gin/array_buffer.h"
10634+#include "libcef/common/javascript/oh_gin_javascript_bridge_value.h"
10635+#include "libcef/renderer/javascript/oh_gin_javascript_bridge_object.h"
10636+
10637+namespace NWEB {
10638+OhGinJavascriptBridgeValueConverter::OhGinJavascriptBridgeValueConverter()
10639+    : converter_(content::V8ValueConverter::Create()) {
10640+  converter_->SetDateAllowed(false);
10641+  converter_->SetRegExpAllowed(false);
10642+  converter_->SetFunctionAllowed(true);
10643+  converter_->SetStrategy(this);
10644+}
10645+
10646+OhGinJavascriptBridgeValueConverter::~OhGinJavascriptBridgeValueConverter() {}
10647+
10648+v8::Local<v8::Value> OhGinJavascriptBridgeValueConverter::ToV8Value(
10649+    const base::Value* value,
10650+    v8::Local<v8::Context> context) const {
10651+  return converter_->ToV8Value(value, context);
10652+}
10653+
10654+std::unique_ptr<base::Value> OhGinJavascriptBridgeValueConverter::FromV8Value(
10655+    v8::Local<v8::Value> value,
10656+    v8::Local<v8::Context> context) const {
10657+  return converter_->FromV8Value(value, context);
10658+}
10659+
10660+bool OhGinJavascriptBridgeValueConverter::FromV8Object(
10661+    v8::Local<v8::Object> value,
10662+    std::unique_ptr<base::Value>* out,
10663+    v8::Isolate* isolate) {
10664+  OhGinJavascriptBridgeObject* unwrapped;
10665+  if (!gin::ConvertFromV8(isolate, value, &unwrapped)) {
10666+    return false;
10667+  }
10668+  *out =
10669+      OhGinJavascriptBridgeValue::CreateObjectIDValue(unwrapped->object_id());
10670+  return true;
10671+}
10672+
10673+namespace {
10674+
10675+class TypedArraySerializer {
10676+ public:
10677+  virtual ~TypedArraySerializer() {}
10678+  static std::unique_ptr<TypedArraySerializer> Create(
10679+      v8::Local<v8::TypedArray> typed_array);
10680+  virtual void serializeTo(char* data,
10681+                           size_t data_length,
10682+                           base::ListValue* out) = 0;
10683+
10684+ protected:
10685+  TypedArraySerializer() {}
10686+};
10687+
10688+template <typename ElementType, typename ListType>
10689+class TypedArraySerializerImpl : public TypedArraySerializer {
10690+ public:
10691+  static std::unique_ptr<TypedArraySerializer> Create(
10692+      v8::Local<v8::TypedArray> typed_array) {
10693+    return base::WrapUnique(
10694+        new TypedArraySerializerImpl<ElementType, ListType>(typed_array));
10695+  }
10696+
10697+  TypedArraySerializerImpl(const TypedArraySerializerImpl&) = delete;
10698+  TypedArraySerializerImpl& operator=(const TypedArraySerializerImpl&) = delete;
10699+
10700+  void serializeTo(char* data,
10701+                   size_t data_length,
10702+                   base::ListValue* out) override {
10703+    DCHECK_EQ(data_length, typed_array_->Length() * sizeof(ElementType));
10704+    for (ElementType *element = reinterpret_cast<ElementType*>(data),
10705+                     *end = element + typed_array_->Length();
10706+         element != end; ++element) {
10707+      // Serialize the uint32 value as the binary type since base::Value
10708+      // supports only int for the integer type, and the uint8 and the uint16
10709+      // with Base::Value since they fit into int.
10710+      if (std::is_same<ElementType, uint32_t>::value) {
10711+        out->Append(OhGinJavascriptBridgeValue::CreateUInt32Value(*element));
10712+      } else {
10713+        out->Append(std::make_unique<base::Value>(ListType(*element)));
10714+      }
10715+    }
10716+  }
10717+
10718+ private:
10719+  explicit TypedArraySerializerImpl(v8::Local<v8::TypedArray> typed_array)
10720+      : typed_array_(typed_array) {}
10721+
10722+  v8::Local<v8::TypedArray> typed_array_;
10723+};
10724+
10725+// static
10726+std::unique_ptr<TypedArraySerializer> TypedArraySerializer::Create(
10727+    v8::Local<v8::TypedArray> typed_array) {
10728+  if (typed_array->IsInt8Array()) {
10729+    return TypedArraySerializerImpl<int8_t, int>::Create(typed_array);
10730+  } else if (typed_array->IsUint8Array() ||
10731+             typed_array->IsUint8ClampedArray()) {
10732+    return TypedArraySerializerImpl<uint8_t, int>::Create(typed_array);
10733+  } else if (typed_array->IsInt16Array()) {
10734+    return TypedArraySerializerImpl<int16_t, int>::Create(typed_array);
10735+  } else if (typed_array->IsUint16Array()) {
10736+    return TypedArraySerializerImpl<uint16_t, int>::Create(typed_array);
10737+  } else if (typed_array->IsInt32Array()) {
10738+    return TypedArraySerializerImpl<int32_t, int>::Create(typed_array);
10739+  } else if (typed_array->IsUint32Array()) {
10740+    return TypedArraySerializerImpl<uint32_t, int>::Create(typed_array);
10741+  } else if (typed_array->IsFloat32Array()) {
10742+    return TypedArraySerializerImpl<float, double>::Create(typed_array);
10743+  } else if (typed_array->IsFloat64Array()) {
10744+    return TypedArraySerializerImpl<double, double>::Create(typed_array);
10745+  }
10746+  NOTREACHED();
10747+  return nullptr;
10748+}
10749+
10750+}  // namespace
10751+
10752+bool OhGinJavascriptBridgeValueConverter::FromV8ArrayBuffer(
10753+    v8::Local<v8::Object> value,
10754+    std::unique_ptr<base::Value>* out,
10755+    v8::Isolate* isolate) {
10756+  if (!value->IsTypedArray()) {
10757+    *out = OhGinJavascriptBridgeValue::CreateUndefinedValue();
10758+    return true;
10759+  }
10760+
10761+  char* data = NULL;
10762+  size_t data_length = 0;
10763+  gin::ArrayBufferView view;
10764+  if (ConvertFromV8(isolate, value.As<v8::ArrayBufferView>(), &view)) {
10765+    data = reinterpret_cast<char*>(view.bytes());
10766+    data_length = view.num_bytes();
10767+  }
10768+  if (!data) {
10769+    *out = OhGinJavascriptBridgeValue::CreateUndefinedValue();
10770+    return true;
10771+  }
10772+
10773+  std::unique_ptr<base::ListValue> result = std::make_unique<base::ListValue>();
10774+  std::unique_ptr<TypedArraySerializer> serializer(
10775+      TypedArraySerializer::Create(value.As<v8::TypedArray>()));
10776+  serializer->serializeTo(data, data_length, result.get());
10777+  *out = std::move(result);
10778+  return true;
10779+}
10780+
10781+bool OhGinJavascriptBridgeValueConverter::FromV8Number(
10782+    v8::Local<v8::Number> value,
10783+    std::unique_ptr<base::Value>* out) {
10784+  double double_value = value->Value();
10785+  if (std::isfinite(double_value))
10786+    return false;
10787+  *out = OhGinJavascriptBridgeValue::CreateNonFiniteValue(double_value);
10788+  return true;
10789+}
10790+
10791+bool OhGinJavascriptBridgeValueConverter::FromV8Undefined(
10792+    std::unique_ptr<base::Value>* out) {
10793+  *out = OhGinJavascriptBridgeValue::CreateUndefinedValue();
10794+  return true;
10795+}
10796+}  // namespace NWEB
10797diff --git a/cef/libcef/renderer/javascript/oh_gin_javascript_bridge_value_converter.h b/cef/libcef/renderer/javascript/oh_gin_javascript_bridge_value_converter.h
10798new file mode 100644
10799index 0000000000..8795c124ef
10800--- /dev/null
10801+++ b/cef/libcef/renderer/javascript/oh_gin_javascript_bridge_value_converter.h
10802@@ -0,0 +1,47 @@
10803+// Copyright (c) 2022 Huawei Device Co., Ltd.
10804+// Copyright 2018 The Chromium Authors. All rights reserved.
10805+// Use of this source code is governed by a BSD-style license that can be
10806+// found in the LICENSE file.
10807+
10808+#ifndef OH_GIN_JAVASCRIPT_BRIDGE_VALUE_CONVERTER_H
10809+#define OH_GIN_JAVASCRIPT_BRIDGE_VALUE_CONVERTER_H
10810+
10811+#include <memory>
10812+
10813+#include "content/public/renderer/v8_value_converter.h"
10814+
10815+namespace NWEB {
10816+class OhGinJavascriptBridgeValueConverter
10817+    : public content::V8ValueConverter::Strategy {
10818+ public:
10819+  OhGinJavascriptBridgeValueConverter();
10820+
10821+  OhGinJavascriptBridgeValueConverter(
10822+      const OhGinJavascriptBridgeValueConverter&) = delete;
10823+  OhGinJavascriptBridgeValueConverter& operator=(
10824+      const OhGinJavascriptBridgeValueConverter&) = delete;
10825+
10826+  ~OhGinJavascriptBridgeValueConverter() override;
10827+
10828+  v8::Local<v8::Value> ToV8Value(const base::Value* value,
10829+                                 v8::Local<v8::Context> context) const;
10830+  std::unique_ptr<base::Value> FromV8Value(
10831+      v8::Local<v8::Value> value,
10832+      v8::Local<v8::Context> context) const;
10833+
10834+  // content::V8ValueConverter::Strategy
10835+  bool FromV8Object(v8::Local<v8::Object> value,
10836+                    std::unique_ptr<base::Value>* out,
10837+                    v8::Isolate* isolate) override;
10838+  bool FromV8ArrayBuffer(v8::Local<v8::Object> value,
10839+                         std::unique_ptr<base::Value>* out,
10840+                         v8::Isolate* isolate) override;
10841+  bool FromV8Number(v8::Local<v8::Number> value,
10842+                    std::unique_ptr<base::Value>* out) override;
10843+  bool FromV8Undefined(std::unique_ptr<base::Value>* out) override;
10844+
10845+ private:
10846+  std::unique_ptr<content::V8ValueConverter> converter_;
10847+};
10848+}  // namespace NWEB
10849+#endif
10850diff --git a/cef/libcef/renderer/javascript/oh_gin_javascript_function_invocation_helper.cc b/cef/libcef/renderer/javascript/oh_gin_javascript_function_invocation_helper.cc
10851new file mode 100644
10852index 0000000000..078c4b84cf
10853--- /dev/null
10854+++ b/cef/libcef/renderer/javascript/oh_gin_javascript_function_invocation_helper.cc
10855@@ -0,0 +1,111 @@
10856+// Copyright (c) 2022 Huawei Device Co., Ltd.
10857+// Copyright 2018 The Chromium Authors. All rights reserved.
10858+// Use of this source code is governed by a BSD-style license that can be
10859+// found in the LICENSE file.
10860+
10861+#include "libcef/renderer/javascript/oh_gin_javascript_function_invocation_helper.h"
10862+
10863+#include <utility>
10864+
10865+#include "base/values.h"
10866+#include "content/public/renderer/v8_value_converter.h"
10867+#include "libcef/common/javascript/oh_gin_javascript_bridge_errors.h"
10868+#include "libcef/common/javascript/oh_gin_javascript_bridge_value.h"
10869+#include "libcef/renderer/javascript/oh_gin_javascript_bridge_object.h"
10870+#include "libcef/renderer/javascript/oh_gin_javascript_bridge_value_converter.h"
10871+
10872+namespace {
10873+
10874+const char kMethodInvocationAsConstructorDisallowed[] =
10875+    "Javascript bridge method can't be invoked as a constructor";
10876+const char kMethodInvocationOnNonInjectedObjectDisallowed[] =
10877+    "Javascript bridge method can't be invoked on a non-injected object";
10878+const char kMethodInvocationErrorMessage[] =
10879+    "Javascript bridge method invocation error";
10880+
10881+}  // namespace
10882+
10883+namespace NWEB {
10884+OhGinJavascriptFunctionInvocationHelper::
10885+    OhGinJavascriptFunctionInvocationHelper(
10886+        const std::string& method_name,
10887+        const base::WeakPtr<OhGinJavascriptBridgeDispatcher>& dispatcher)
10888+    : method_name_(method_name),
10889+      dispatcher_(dispatcher),
10890+      converter_(new OhGinJavascriptBridgeValueConverter()) {}
10891+
10892+OhGinJavascriptFunctionInvocationHelper::
10893+    ~OhGinJavascriptFunctionInvocationHelper() {}
10894+
10895+v8::Local<v8::Value> OhGinJavascriptFunctionInvocationHelper::Invoke(
10896+    gin::Arguments* args) {
10897+  LOG(INFO) << "OhGinJavascriptFunctionInvocationHelper Invoke";
10898+  if (!dispatcher_) {
10899+    args->isolate()->ThrowException(v8::Exception::Error(
10900+        gin::StringToV8(args->isolate(), kMethodInvocationErrorMessage)));
10901+    return v8::Undefined(args->isolate());
10902+  }
10903+
10904+  if (args->IsConstructCall()) {
10905+    args->isolate()->ThrowException(v8::Exception::Error(gin::StringToV8(
10906+        args->isolate(), kMethodInvocationAsConstructorDisallowed)));
10907+    return v8::Undefined(args->isolate());
10908+  }
10909+
10910+  OhGinJavascriptBridgeObject* object = NULL;
10911+  if (!args->GetHolder(&object) || !object) {
10912+    args->isolate()->ThrowException(v8::Exception::Error(gin::StringToV8(
10913+        args->isolate(), kMethodInvocationOnNonInjectedObjectDisallowed)));
10914+    return v8::Undefined(args->isolate());
10915+  }
10916+
10917+  base::ListValue arguments;
10918+  {
10919+    v8::HandleScope handle_scope(args->isolate());
10920+    v8::Local<v8::Context> context = args->isolate()->GetCurrentContext();
10921+    v8::Local<v8::Value> val;
10922+    while (args->GetNext(&val)) {
10923+      std::unique_ptr<base::Value> arg(converter_->FromV8Value(val, context));
10924+      if (arg.get())
10925+        arguments.Append(std::move(arg));
10926+      else
10927+        arguments.Append(std::make_unique<base::Value>());
10928+    }
10929+  }
10930+
10931+  OhGinJavascriptBridgeError error;
10932+  std::unique_ptr<base::Value> result = dispatcher_->InvokeJavascriptMethod(
10933+      object->object_id(), method_name_, arguments, &error);
10934+  if (!result.get()) {
10935+    args->isolate()->ThrowException(v8::Exception::Error(gin::StringToV8(
10936+        args->isolate(), OhGinJavascriptBridgeErrorToString(error))));
10937+    return v8::Undefined(args->isolate());
10938+  }
10939+  if (!result->is_blob()) {
10940+    return converter_->ToV8Value(result.get(),
10941+                                 args->isolate()->GetCurrentContext());
10942+  }
10943+
10944+  std::unique_ptr<const OhGinJavascriptBridgeValue> gin_value =
10945+      OhGinJavascriptBridgeValue::FromValue(result.get());
10946+  if (gin_value->IsType(OhGinJavascriptBridgeValue::TYPE_OBJECT_ID)) {
10947+    OhGinJavascriptBridgeObject* object_result = NULL;
10948+    OhGinJavascriptBridgeDispatcher::ObjectID object_id;
10949+    if (gin_value->GetAsObjectID(&object_id)) {
10950+      object_result = dispatcher_->GetObject(object_id);
10951+    }
10952+    if (object_result) {
10953+      gin::Handle<OhGinJavascriptBridgeObject> controller =
10954+          gin::CreateHandle(args->isolate(), object_result);
10955+      if (controller.IsEmpty())
10956+        return v8::Undefined(args->isolate());
10957+      return controller.ToV8();
10958+    }
10959+  } else if (gin_value->IsType(OhGinJavascriptBridgeValue::TYPE_NONFINITE)) {
10960+    float float_value;
10961+    gin_value->GetAsNonFinite(&float_value);
10962+    return v8::Number::New(args->isolate(), float_value);
10963+  }
10964+  return v8::Undefined(args->isolate());
10965+}
10966+}  // namespace NWEB
10967diff --git a/cef/libcef/renderer/javascript/oh_gin_javascript_function_invocation_helper.h b/cef/libcef/renderer/javascript/oh_gin_javascript_function_invocation_helper.h
10968new file mode 100644
10969index 0000000000..4f3fd697f3
10970--- /dev/null
10971+++ b/cef/libcef/renderer/javascript/oh_gin_javascript_function_invocation_helper.h
10972@@ -0,0 +1,40 @@
10973+// Copyright (c) 2022 Huawei Device Co., Ltd.
10974+// Copyright 2018 The Chromium Authors. All rights reserved.
10975+// Use of this source code is governed by a BSD-style license that can be
10976+// found in the LICENSE file.
10977+
10978+#ifndef OH_GIN_JAVASCRIPT_FUNCTION_INVOCATION_HELPER_H
10979+#define OH_GIN_JAVASCRIPT_FUNCTION_INVOCATION_HELPER_H
10980+
10981+#include <memory>
10982+
10983+#include "base/memory/weak_ptr.h"
10984+#include "cef/libcef/renderer/javascript/oh_gin_javascript_bridge_dispatcher.h"
10985+#include "gin/arguments.h"
10986+#include "gin/handle.h"
10987+
10988+namespace NWEB {
10989+class OhGinJavascriptBridgeValueConverter;
10990+
10991+class OhGinJavascriptFunctionInvocationHelper {
10992+ public:
10993+  OhGinJavascriptFunctionInvocationHelper(
10994+      const std::string& method_name,
10995+      const base::WeakPtr<OhGinJavascriptBridgeDispatcher>& dispatcher);
10996+
10997+  OhGinJavascriptFunctionInvocationHelper(
10998+      const OhGinJavascriptFunctionInvocationHelper&) = delete;
10999+  OhGinJavascriptFunctionInvocationHelper& operator=(
11000+      const OhGinJavascriptFunctionInvocationHelper&) = delete;
11001+
11002+  ~OhGinJavascriptFunctionInvocationHelper();
11003+
11004+  v8::Local<v8::Value> Invoke(gin::Arguments* args);
11005+
11006+ private:
11007+  std::string method_name_;
11008+  base::WeakPtr<OhGinJavascriptBridgeDispatcher> dispatcher_;
11009+  std::unique_ptr<OhGinJavascriptBridgeValueConverter> converter_;
11010+};
11011+}  // namespace NWEB
11012+#endif
11013diff --git a/cef/libcef/renderer/render_frame_observer.cc b/cef/libcef/renderer/render_frame_observer.cc
11014index 0459ab60e5..6504da052f 100644
11015--- a/cef/libcef/renderer/render_frame_observer.cc
11016+++ b/cef/libcef/renderer/render_frame_observer.cc
11017@@ -20,6 +20,7 @@
11018 #include "libcef/common/app_manager.h"
11019 #include "libcef/renderer/blink_glue.h"
11020 #include "libcef/renderer/browser_impl.h"
11021+#include "libcef/common/cef_messages.h"
11022 #include "libcef/renderer/dom_document_impl.h"
11023 #include "libcef/renderer/v8_impl.h"
11024
11025@@ -73,7 +74,7 @@ void CefRenderFrameObserver::FocusedElementChanged(
11026     const blink::WebElement& element) {
11027   if (!frame_)
11028     return;
11029-
11030+  frame_->OnFocusedNodeChanged(element);
11031   blink::WebLocalFrame* frame = render_frame()->GetWebFrame();
11032   CefRefPtr<CefBrowserImpl> browserPtr =
11033       CefBrowserImpl::GetBrowserForMainFrame(frame->Top());
11034diff --git a/cef/libcef/renderer/render_frame_observer.h b/cef/libcef/renderer/render_frame_observer.h
11035index efd93bc652..ed505e7960 100644
11036--- a/cef/libcef/renderer/render_frame_observer.h
11037+++ b/cef/libcef/renderer/render_frame_observer.h
11038@@ -38,6 +38,7 @@ class CefRenderFrameObserver : public content::RenderFrameObserver {
11039  private:
11040   void OnLoadStart();
11041   void OnLoadError();
11042+  void FocusedHitDataChange(const blink::WebElement& element);
11043
11044   CefFrameImpl* frame_ = nullptr;
11045
11046diff --git a/cef/libcef_dll/cpptoc/access_request_cpptoc.cc b/cef/libcef_dll/cpptoc/access_request_cpptoc.cc
11047new file mode 100644
11048index 0000000000..d97849ec3b
11049--- /dev/null
11050+++ b/cef/libcef_dll/cpptoc/access_request_cpptoc.cc
11051@@ -0,0 +1,102 @@
11052+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
11053+// reserved. Use of this source code is governed by a BSD-style license that
11054+// can be found in the LICENSE file.
11055+//
11056+// ---------------------------------------------------------------------------
11057+//
11058+// This file was generated by the CEF translator tool. If making changes by
11059+// hand only do so within the body of existing method and function
11060+// implementations. See the translator.README.txt file in the tools directory
11061+// for more information.
11062+//
11063+// $hash=6b186aa2b1640034df797d439745503309071680$
11064+//
11065+
11066+#include "libcef_dll/cpptoc/access_request_cpptoc.h"
11067+#include "libcef_dll/shutdown_checker.h"
11068+
11069+namespace {
11070+
11071+// MEMBER FUNCTIONS - Body may be edited by hand.
11072+
11073+cef_string_userfree_t CEF_CALLBACK
11074+access_request_origin(struct _cef_access_request_t* self) {
11075+  shutdown_checker::AssertNotShutdown();
11076+
11077+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11078+
11079+  DCHECK(self);
11080+  if (!self)
11081+    return NULL;
11082+
11083+  // Execute
11084+  CefString _retval = CefAccessRequestCppToC::Get(self)->Origin();
11085+
11086+  // Return type: string
11087+  return _retval.DetachToUserFree();
11088+}
11089+
11090+int CEF_CALLBACK
11091+access_request_resource_acess_id(struct _cef_access_request_t* self) {
11092+  shutdown_checker::AssertNotShutdown();
11093+
11094+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11095+
11096+  DCHECK(self);
11097+  if (!self)
11098+    return 0;
11099+
11100+  // Execute
11101+  int _retval = CefAccessRequestCppToC::Get(self)->ResourceAcessId();
11102+
11103+  // Return type: simple
11104+  return _retval;
11105+}
11106+
11107+void CEF_CALLBACK
11108+access_request_report_request_result(struct _cef_access_request_t* self,
11109+                                     int allowed) {
11110+  shutdown_checker::AssertNotShutdown();
11111+
11112+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11113+
11114+  DCHECK(self);
11115+  if (!self)
11116+    return;
11117+
11118+  // Execute
11119+  CefAccessRequestCppToC::Get(self)->ReportRequestResult(allowed ? true
11120+                                                                 : false);
11121+}
11122+
11123+}  // namespace
11124+
11125+// CONSTRUCTOR - Do not edit by hand.
11126+
11127+CefAccessRequestCppToC::CefAccessRequestCppToC() {
11128+  GetStruct()->origin = access_request_origin;
11129+  GetStruct()->resource_acess_id = access_request_resource_acess_id;
11130+  GetStruct()->report_request_result = access_request_report_request_result;
11131+}
11132+
11133+// DESTRUCTOR - Do not edit by hand.
11134+
11135+CefAccessRequestCppToC::~CefAccessRequestCppToC() {
11136+  shutdown_checker::AssertNotShutdown();
11137+}
11138+
11139+template <>
11140+CefRefPtr<CefAccessRequest> CefCppToCRefCounted<
11141+    CefAccessRequestCppToC,
11142+    CefAccessRequest,
11143+    cef_access_request_t>::UnwrapDerived(CefWrapperType type,
11144+                                         cef_access_request_t* s) {
11145+  NOTREACHED() << "Unexpected class type: " << type;
11146+  return nullptr;
11147+}
11148+
11149+template <>
11150+CefWrapperType CefCppToCRefCounted<CefAccessRequestCppToC,
11151+                                   CefAccessRequest,
11152+                                   cef_access_request_t>::kWrapperType =
11153+    WT_ACCESS_REQUEST;
11154diff --git a/cef/libcef_dll/cpptoc/access_request_cpptoc.h b/cef/libcef_dll/cpptoc/access_request_cpptoc.h
11155new file mode 100644
11156index 0000000000..c5262807d7
11157--- /dev/null
11158+++ b/cef/libcef_dll/cpptoc/access_request_cpptoc.h
11159@@ -0,0 +1,38 @@
11160+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
11161+// reserved. Use of this source code is governed by a BSD-style license that
11162+// can be found in the LICENSE file.
11163+//
11164+// ---------------------------------------------------------------------------
11165+//
11166+// This file was generated by the CEF translator tool. If making changes by
11167+// hand only do so within the body of existing method and function
11168+// implementations. See the translator.README.txt file in the tools directory
11169+// for more information.
11170+//
11171+// $hash=7f780d77c50f8f64713a51f886c76adc70e44357$
11172+//
11173+
11174+#ifndef CEF_LIBCEF_DLL_CPPTOC_ACCESS_REQUEST_CPPTOC_H_
11175+#define CEF_LIBCEF_DLL_CPPTOC_ACCESS_REQUEST_CPPTOC_H_
11176+#pragma once
11177+
11178+#if !defined(BUILDING_CEF_SHARED)
11179+#error This file can be included DLL-side only
11180+#endif
11181+
11182+#include "include/capi/cef_permission_request_capi.h"
11183+#include "include/cef_permission_request.h"
11184+#include "libcef_dll/cpptoc/cpptoc_ref_counted.h"
11185+
11186+// Wrap a C++ class with a C structure.
11187+// This class may be instantiated and accessed DLL-side only.
11188+class CefAccessRequestCppToC
11189+    : public CefCppToCRefCounted<CefAccessRequestCppToC,
11190+                                 CefAccessRequest,
11191+                                 cef_access_request_t> {
11192+ public:
11193+  CefAccessRequestCppToC();
11194+  virtual ~CefAccessRequestCppToC();
11195+};
11196+
11197+#endif  // CEF_LIBCEF_DLL_CPPTOC_ACCESS_REQUEST_CPPTOC_H_
11198diff --git a/cef/libcef_dll/cpptoc/accessibility_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/accessibility_handler_cpptoc.cc
11199index 6928523ec5..992a81d609 100644
11200--- a/cef/libcef_dll/cpptoc/accessibility_handler_cpptoc.cc
11201+++ b/cef/libcef_dll/cpptoc/accessibility_handler_cpptoc.cc
11202@@ -1,4 +1,4 @@
11203-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
11204+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
11205 // reserved. Use of this source code is governed by a BSD-style license that
11206 // can be found in the LICENSE file.
11207 //
11208@@ -9,7 +9,7 @@
11209 // implementations. See the translator.README.txt file in the tools directory
11210 // for more information.
11211 //
11212-// $hash=d13edb3e144059dce3337ab5781fffbae7a7ead2$
11213+// $hash=f20a2530c9b5ad72cccd301ee4234a16132c487d$
11214 //
11215
11216 #include "libcef_dll/cpptoc/accessibility_handler_cpptoc.h"
11217diff --git a/cef/libcef_dll/cpptoc/accessibility_handler_cpptoc.h b/cef/libcef_dll/cpptoc/accessibility_handler_cpptoc.h
11218index ea01945a6a..b6dce7abc8 100644
11219--- a/cef/libcef_dll/cpptoc/accessibility_handler_cpptoc.h
11220+++ b/cef/libcef_dll/cpptoc/accessibility_handler_cpptoc.h
11221@@ -1,4 +1,4 @@
11222-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
11223+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
11224 // reserved. Use of this source code is governed by a BSD-style license that
11225 // can be found in the LICENSE file.
11226 //
11227@@ -9,7 +9,7 @@
11228 // implementations. See the translator.README.txt file in the tools directory
11229 // for more information.
11230 //
11231-// $hash=948aad5c459d9e8317428559b6c6b7ab0467c0ed$
11232+// $hash=0605de17534cba62d36fc1160997660c4a38e40b$
11233 //
11234
11235 #ifndef CEF_LIBCEF_DLL_CPPTOC_ACCESSIBILITY_HANDLER_CPPTOC_H_
11236diff --git a/cef/libcef_dll/cpptoc/app_cpptoc.cc b/cef/libcef_dll/cpptoc/app_cpptoc.cc
11237index c39287fa83..bc6f55efe8 100644
11238--- a/cef/libcef_dll/cpptoc/app_cpptoc.cc
11239+++ b/cef/libcef_dll/cpptoc/app_cpptoc.cc
11240@@ -1,4 +1,4 @@
11241-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
11242+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
11243 // reserved. Use of this source code is governed by a BSD-style license that
11244 // can be found in the LICENSE file.
11245 //
11246@@ -9,7 +9,7 @@
11247 // implementations. See the translator.README.txt file in the tools directory
11248 // for more information.
11249 //
11250-// $hash=3d9026243d2086b44cd99c460a82848837672131$
11251+// $hash=ee267b6567062246b9f82b4b50b68d82d2cc939f$
11252 //
11253
11254 #include "libcef_dll/cpptoc/app_cpptoc.h"
11255diff --git a/cef/libcef_dll/cpptoc/app_cpptoc.h b/cef/libcef_dll/cpptoc/app_cpptoc.h
11256index 7e391a66e2..c705f806df 100644
11257--- a/cef/libcef_dll/cpptoc/app_cpptoc.h
11258+++ b/cef/libcef_dll/cpptoc/app_cpptoc.h
11259@@ -1,4 +1,4 @@
11260-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
11261+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
11262 // reserved. Use of this source code is governed by a BSD-style license that
11263 // can be found in the LICENSE file.
11264 //
11265@@ -9,7 +9,7 @@
11266 // implementations. See the translator.README.txt file in the tools directory
11267 // for more information.
11268 //
11269-// $hash=0ca0d5506a28dbf7e1d36e00e8f8de07da222411$
11270+// $hash=601455da6a16a7212debdb8184b8f731be4e2f8d$
11271 //
11272
11273 #ifndef CEF_LIBCEF_DLL_CPPTOC_APP_CPPTOC_H_
11274diff --git a/cef/libcef_dll/cpptoc/audio_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/audio_handler_cpptoc.cc
11275index 44396046df..0317067179 100644
11276--- a/cef/libcef_dll/cpptoc/audio_handler_cpptoc.cc
11277+++ b/cef/libcef_dll/cpptoc/audio_handler_cpptoc.cc
11278@@ -1,4 +1,4 @@
11279-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
11280+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
11281 // reserved. Use of this source code is governed by a BSD-style license that
11282 // can be found in the LICENSE file.
11283 //
11284@@ -9,7 +9,7 @@
11285 // implementations. See the translator.README.txt file in the tools directory
11286 // for more information.
11287 //
11288-// $hash=4874d395bcbe824a8ddd9394cec1b56bfee5000b$
11289+// $hash=519a82bbea84ea39cadc72c55291e15cb2a74072$
11290 //
11291
11292 #include "libcef_dll/cpptoc/audio_handler_cpptoc.h"
11293diff --git a/cef/libcef_dll/cpptoc/audio_handler_cpptoc.h b/cef/libcef_dll/cpptoc/audio_handler_cpptoc.h
11294index 24bbfacd91..d2574a797a 100644
11295--- a/cef/libcef_dll/cpptoc/audio_handler_cpptoc.h
11296+++ b/cef/libcef_dll/cpptoc/audio_handler_cpptoc.h
11297@@ -1,4 +1,4 @@
11298-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
11299+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
11300 // reserved. Use of this source code is governed by a BSD-style license that
11301 // can be found in the LICENSE file.
11302 //
11303@@ -9,7 +9,7 @@
11304 // implementations. See the translator.README.txt file in the tools directory
11305 // for more information.
11306 //
11307-// $hash=b84737f07d28a6a8a602729a851b206d42868833$
11308+// $hash=352ed71e6c70ef8e5f38e635ed8fc17b2fcc2b4e$
11309 //
11310
11311 #ifndef CEF_LIBCEF_DLL_CPPTOC_AUDIO_HANDLER_CPPTOC_H_
11312diff --git a/cef/libcef_dll/cpptoc/auth_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/auth_callback_cpptoc.cc
11313index bcd7d463d1..c9733c0168 100644
11314--- a/cef/libcef_dll/cpptoc/auth_callback_cpptoc.cc
11315+++ b/cef/libcef_dll/cpptoc/auth_callback_cpptoc.cc
11316@@ -1,4 +1,4 @@
11317-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
11318+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
11319 // reserved. Use of this source code is governed by a BSD-style license that
11320 // can be found in the LICENSE file.
11321 //
11322@@ -9,7 +9,7 @@
11323 // implementations. See the translator.README.txt file in the tools directory
11324 // for more information.
11325 //
11326-// $hash=6d0b1ff7c3c5bfdbfb339036c7fa7e36ee2ebaf9$
11327+// $hash=7497a44116b3cfc86eb309dc940c91c7cca78353$
11328 //
11329
11330 #include "libcef_dll/cpptoc/auth_callback_cpptoc.h"
11331diff --git a/cef/libcef_dll/cpptoc/auth_callback_cpptoc.h b/cef/libcef_dll/cpptoc/auth_callback_cpptoc.h
11332index 37a8c23fb9..b9aae72ade 100644
11333--- a/cef/libcef_dll/cpptoc/auth_callback_cpptoc.h
11334+++ b/cef/libcef_dll/cpptoc/auth_callback_cpptoc.h
11335@@ -1,4 +1,4 @@
11336-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
11337+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
11338 // reserved. Use of this source code is governed by a BSD-style license that
11339 // can be found in the LICENSE file.
11340 //
11341@@ -9,7 +9,7 @@
11342 // implementations. See the translator.README.txt file in the tools directory
11343 // for more information.
11344 //
11345-// $hash=d230ed608200d25f8efb032971ff796bc4401f62$
11346+// $hash=036ebbbaaa86b497dda11ef6371e5bc6c9171b04$
11347 //
11348
11349 #ifndef CEF_LIBCEF_DLL_CPPTOC_AUTH_CALLBACK_CPPTOC_H_
11350diff --git a/cef/libcef_dll/cpptoc/before_download_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/before_download_callback_cpptoc.cc
11351index 364acc406f..6187dfa3f3 100644
11352--- a/cef/libcef_dll/cpptoc/before_download_callback_cpptoc.cc
11353+++ b/cef/libcef_dll/cpptoc/before_download_callback_cpptoc.cc
11354@@ -1,4 +1,4 @@
11355-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
11356+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
11357 // reserved. Use of this source code is governed by a BSD-style license that
11358 // can be found in the LICENSE file.
11359 //
11360@@ -9,7 +9,7 @@
11361 // implementations. See the translator.README.txt file in the tools directory
11362 // for more information.
11363 //
11364-// $hash=e33b28b1b5a88aece1ba705cfd2f9e22ab2e04fd$
11365+// $hash=0f0475ffcd9ea6ca7f91616c52c21b3e51b075f3$
11366 //
11367
11368 #include "libcef_dll/cpptoc/before_download_callback_cpptoc.h"
11369diff --git a/cef/libcef_dll/cpptoc/before_download_callback_cpptoc.h b/cef/libcef_dll/cpptoc/before_download_callback_cpptoc.h
11370index 9005865fb7..fc31cf8417 100644
11371--- a/cef/libcef_dll/cpptoc/before_download_callback_cpptoc.h
11372+++ b/cef/libcef_dll/cpptoc/before_download_callback_cpptoc.h
11373@@ -1,4 +1,4 @@
11374-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
11375+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
11376 // reserved. Use of this source code is governed by a BSD-style license that
11377 // can be found in the LICENSE file.
11378 //
11379@@ -9,7 +9,7 @@
11380 // implementations. See the translator.README.txt file in the tools directory
11381 // for more information.
11382 //
11383-// $hash=b11017f368ab5c6b1dd1c481dec048ceaf86bbb1$
11384+// $hash=53a024e4e503f7e107c19ed638684c5708efd6e6$
11385 //
11386
11387 #ifndef CEF_LIBCEF_DLL_CPPTOC_BEFORE_DOWNLOAD_CALLBACK_CPPTOC_H_
11388diff --git a/cef/libcef_dll/cpptoc/binary_value_cpptoc.cc b/cef/libcef_dll/cpptoc/binary_value_cpptoc.cc
11389index f179d1384d..51659b1677 100644
11390--- a/cef/libcef_dll/cpptoc/binary_value_cpptoc.cc
11391+++ b/cef/libcef_dll/cpptoc/binary_value_cpptoc.cc
11392@@ -1,4 +1,4 @@
11393-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
11394+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
11395 // reserved. Use of this source code is governed by a BSD-style license that
11396 // can be found in the LICENSE file.
11397 //
11398@@ -9,7 +9,7 @@
11399 // implementations. See the translator.README.txt file in the tools directory
11400 // for more information.
11401 //
11402-// $hash=60f72b2e1a5118e01de182a9d10d4e2b2c236bd1$
11403+// $hash=fd59a248f99060800fc3bab5c381784eb3309a57$
11404 //
11405
11406 #include "libcef_dll/cpptoc/binary_value_cpptoc.h"
11407diff --git a/cef/libcef_dll/cpptoc/binary_value_cpptoc.h b/cef/libcef_dll/cpptoc/binary_value_cpptoc.h
11408index 380907574f..994621aa25 100644
11409--- a/cef/libcef_dll/cpptoc/binary_value_cpptoc.h
11410+++ b/cef/libcef_dll/cpptoc/binary_value_cpptoc.h
11411@@ -1,4 +1,4 @@
11412-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
11413+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
11414 // reserved. Use of this source code is governed by a BSD-style license that
11415 // can be found in the LICENSE file.
11416 //
11417@@ -9,7 +9,7 @@
11418 // implementations. See the translator.README.txt file in the tools directory
11419 // for more information.
11420 //
11421-// $hash=8f13b32d7b16d6ad756c50755bc8268ec24d782d$
11422+// $hash=83361bb9395a566ef5bfcd9d87eade8df222d075$
11423 //
11424
11425 #ifndef CEF_LIBCEF_DLL_CPPTOC_BINARY_VALUE_CPPTOC_H_
11426diff --git a/cef/libcef_dll/cpptoc/browser_cpptoc.cc b/cef/libcef_dll/cpptoc/browser_cpptoc.cc
11427index 5bb98a30e7..3105dcd17b 100644
11428--- a/cef/libcef_dll/cpptoc/browser_cpptoc.cc
11429+++ b/cef/libcef_dll/cpptoc/browser_cpptoc.cc
11430@@ -1,4 +1,4 @@
11431-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
11432+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
11433 // reserved. Use of this source code is governed by a BSD-style license that
11434 // can be found in the LICENSE file.
11435 //
11436@@ -9,13 +9,15 @@
11437 // implementations. See the translator.README.txt file in the tools directory
11438 // for more information.
11439 //
11440-// $hash=b573d2840558cbf17908a16d3e92c3196c84b1c7$
11441+// $hash=37305a392b6fceed48564b7a7d5f0d2811c537f4$
11442 //
11443
11444 #include "libcef_dll/cpptoc/browser_cpptoc.h"
11445 #include <algorithm>
11446 #include "libcef_dll/cpptoc/browser_host_cpptoc.h"
11447+#include "libcef_dll/cpptoc/browser_permission_request_delegate_cpptoc.h"
11448 #include "libcef_dll/cpptoc/frame_cpptoc.h"
11449+#include "libcef_dll/cpptoc/geolocation_acess_cpptoc.h"
11450 #include "libcef_dll/shutdown_checker.h"
11451 #include "libcef_dll/transfer_util.h"
11452
11453@@ -98,6 +100,23 @@ void CEF_CALLBACK browser_go_forward(struct _cef_browser_t* self) {
11454   CefBrowserCppToC::Get(self)->GoForward();
11455 }
11456
11457+int CEF_CALLBACK browser_can_go_back_or_forward(struct _cef_browser_t* self,
11458+                                                int num_steps) {
11459+  shutdown_checker::AssertNotShutdown();
11460+
11461+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11462+
11463+  DCHECK(self);
11464+  if (!self)
11465+    return 0;
11466+
11467+  // Execute
11468+  bool _retval = CefBrowserCppToC::Get(self)->CanGoBackOrForward(num_steps);
11469+
11470+  // Return type: bool
11471+  return _retval;
11472+}
11473+
11474 int CEF_CALLBACK browser_is_loading(struct _cef_browser_t* self) {
11475   shutdown_checker::AssertNotShutdown();
11476
11477@@ -373,6 +392,42 @@ void CEF_CALLBACK browser_get_frame_names(struct _cef_browser_t* self,
11478   transfer_string_list_contents(namesList, names);
11479 }
11480
11481+struct _cef_browser_permission_request_delegate_t* CEF_CALLBACK
11482+browser_get_permission_request_delegate(struct _cef_browser_t* self) {
11483+  shutdown_checker::AssertNotShutdown();
11484+
11485+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11486+
11487+  DCHECK(self);
11488+  if (!self)
11489+    return NULL;
11490+
11491+  // Execute
11492+  CefRefPtr<CefBrowserPermissionRequestDelegate> _retval =
11493+      CefBrowserCppToC::Get(self)->GetPermissionRequestDelegate();
11494+
11495+  // Return type: refptr_same
11496+  return CefBrowserPermissionRequestDelegateCppToC::Wrap(_retval);
11497+}
11498+
11499+struct _cef_geolocation_acess_t* CEF_CALLBACK
11500+browser_get_geolocation_permissions(struct _cef_browser_t* self) {
11501+  shutdown_checker::AssertNotShutdown();
11502+
11503+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11504+
11505+  DCHECK(self);
11506+  if (!self)
11507+    return NULL;
11508+
11509+  // Execute
11510+  CefRefPtr<CefGeolocationAcess> _retval =
11511+      CefBrowserCppToC::Get(self)->GetGeolocationPermissions();
11512+
11513+  // Return type: refptr_same
11514+  return CefGeolocationAcessCppToC::Wrap(_retval);
11515+}
11516+
11517 }  // namespace
11518
11519 // CONSTRUCTOR - Do not edit by hand.
11520@@ -383,6 +438,7 @@ CefBrowserCppToC::CefBrowserCppToC() {
11521   GetStruct()->go_back = browser_go_back;
11522   GetStruct()->can_go_forward = browser_can_go_forward;
11523   GetStruct()->go_forward = browser_go_forward;
11524+  GetStruct()->can_go_back_or_forward = browser_can_go_back_or_forward;
11525   GetStruct()->is_loading = browser_is_loading;
11526   GetStruct()->reload = browser_reload;
11527   GetStruct()->reload_ignore_cache = browser_reload_ignore_cache;
11528@@ -398,6 +454,10 @@ CefBrowserCppToC::CefBrowserCppToC() {
11529   GetStruct()->get_frame_count = browser_get_frame_count;
11530   GetStruct()->get_frame_identifiers = browser_get_frame_identifiers;
11531   GetStruct()->get_frame_names = browser_get_frame_names;
11532+  GetStruct()->get_permission_request_delegate =
11533+      browser_get_permission_request_delegate;
11534+  GetStruct()->get_geolocation_permissions =
11535+      browser_get_geolocation_permissions;
11536 }
11537
11538 // DESTRUCTOR - Do not edit by hand.
11539diff --git a/cef/libcef_dll/cpptoc/browser_cpptoc.h b/cef/libcef_dll/cpptoc/browser_cpptoc.h
11540index 2c92c98b33..08c927b498 100644
11541--- a/cef/libcef_dll/cpptoc/browser_cpptoc.h
11542+++ b/cef/libcef_dll/cpptoc/browser_cpptoc.h
11543@@ -1,4 +1,4 @@
11544-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
11545+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
11546 // reserved. Use of this source code is governed by a BSD-style license that
11547 // can be found in the LICENSE file.
11548 //
11549@@ -9,7 +9,7 @@
11550 // implementations. See the translator.README.txt file in the tools directory
11551 // for more information.
11552 //
11553-// $hash=524016208502fc4afb767c79320d5568ce1987d7$
11554+// $hash=68e6a8ff4e47ec0c3c767d80746091550b9d11dc$
11555 //
11556
11557 #ifndef CEF_LIBCEF_DLL_CPPTOC_BROWSER_CPPTOC_H_
11558diff --git a/cef/libcef_dll/cpptoc/browser_host_cpptoc.cc b/cef/libcef_dll/cpptoc/browser_host_cpptoc.cc
11559index 9514635efa..63bc4cc194 100644
11560--- a/cef/libcef_dll/cpptoc/browser_host_cpptoc.cc
11561+++ b/cef/libcef_dll/cpptoc/browser_host_cpptoc.cc
11562@@ -1,4 +1,4 @@
11563-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
11564+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
11565 // reserved. Use of this source code is governed by a BSD-style license that
11566 // can be found in the LICENSE file.
11567 //
11568@@ -9,7 +9,7 @@
11569 // implementations. See the translator.README.txt file in the tools directory
11570 // for more information.
11571 //
11572-// $hash=0109529f61a92116f73bc6c0ff47bfd0423b6f07$
11573+// $hash=30942a6f9c376a901f337c13dbbb65417e9b1c5d$
11574 //
11575
11576 #include "libcef_dll/cpptoc/browser_host_cpptoc.h"
11577@@ -23,9 +23,11 @@
11578 #include "libcef_dll/ctocpp/client_ctocpp.h"
11579 #include "libcef_dll/ctocpp/dev_tools_message_observer_ctocpp.h"
11580 #include "libcef_dll/ctocpp/download_image_callback_ctocpp.h"
11581+#include "libcef_dll/ctocpp/java_script_result_callback_ctocpp.h"
11582 #include "libcef_dll/ctocpp/navigation_entry_visitor_ctocpp.h"
11583 #include "libcef_dll/ctocpp/pdf_print_callback_ctocpp.h"
11584 #include "libcef_dll/ctocpp/run_file_dialog_callback_ctocpp.h"
11585+#include "libcef_dll/ctocpp/task_ctocpp.h"
11586 #include "libcef_dll/shutdown_checker.h"
11587 #include "libcef_dll/transfer_util.h"
11588
11589@@ -132,6 +134,26 @@ browser_host_get_browser(struct _cef_browser_host_t* self) {
11590   return CefBrowserCppToC::Wrap(_retval);
11591 }
11592
11593+void CEF_CALLBACK
11594+browser_host_post_task_to_uithread(struct _cef_browser_host_t* self,
11595+                                   struct _cef_task_t* task) {
11596+  shutdown_checker::AssertNotShutdown();
11597+
11598+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11599+
11600+  DCHECK(self);
11601+  if (!self)
11602+    return;
11603+  // Verify param: task; type: refptr_diff
11604+  DCHECK(task);
11605+  if (!task)
11606+    return;
11607+
11608+  // Execute
11609+  CefBrowserHostCppToC::Get(self)->PostTaskToUIThread(
11610+      CefTaskCToCpp::Wrap(task));
11611+}
11612+
11613 void CEF_CALLBACK browser_host_close_browser(struct _cef_browser_host_t* self,
11614                                              int force_close) {
11615   shutdown_checker::AssertNotShutdown();
11616@@ -948,6 +970,276 @@ browser_host_set_windowless_frame_rate(struct _cef_browser_host_t* self,
11617   CefBrowserHostCppToC::Get(self)->SetWindowlessFrameRate(frame_rate);
11618 }
11619
11620+void CEF_CALLBACK browser_host_set_web_preferences(
11621+    struct _cef_browser_host_t* self,
11622+    const struct _cef_browser_settings_t* browser_settings) {
11623+  shutdown_checker::AssertNotShutdown();
11624+
11625+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11626+
11627+  DCHECK(self);
11628+  if (!self)
11629+    return;
11630+  // Verify param: browser_settings; type: struct_byref_const
11631+  DCHECK(browser_settings);
11632+  if (!browser_settings)
11633+    return;
11634+
11635+  // Translate param: browser_settings; type: struct_byref_const
11636+  CefBrowserSettings browser_settingsObj;
11637+  if (browser_settings)
11638+    browser_settingsObj.Set(*browser_settings, false);
11639+
11640+  // Execute
11641+  CefBrowserHostCppToC::Get(self)->SetWebPreferences(browser_settingsObj);
11642+}
11643+
11644+void CEF_CALLBACK browser_host_put_user_agent(struct _cef_browser_host_t* self,
11645+                                              const cef_string_t* ua) {
11646+  shutdown_checker::AssertNotShutdown();
11647+
11648+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11649+
11650+  DCHECK(self);
11651+  if (!self)
11652+    return;
11653+  // Verify param: ua; type: string_byref_const
11654+  DCHECK(ua);
11655+  if (!ua)
11656+    return;
11657+
11658+  // Execute
11659+  CefBrowserHostCppToC::Get(self)->PutUserAgent(CefString(ua));
11660+}
11661+
11662+cef_string_userfree_t CEF_CALLBACK
11663+browser_host_default_user_agent(struct _cef_browser_host_t* self) {
11664+  shutdown_checker::AssertNotShutdown();
11665+
11666+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11667+
11668+  DCHECK(self);
11669+  if (!self)
11670+    return NULL;
11671+
11672+  // Execute
11673+  CefString _retval = CefBrowserHostCppToC::Get(self)->DefaultUserAgent();
11674+
11675+  // Return type: string
11676+  return _retval.DetachToUserFree();
11677+}
11678+
11679+void CEF_CALLBACK
11680+browser_host_set_background_color(struct _cef_browser_host_t* self, int color) {
11681+  shutdown_checker::AssertNotShutdown();
11682+
11683+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11684+
11685+  DCHECK(self);
11686+  if (!self)
11687+    return;
11688+
11689+  // Execute
11690+  CefBrowserHostCppToC::Get(self)->SetBackgroundColor(color);
11691+}
11692+
11693+void CEF_CALLBACK
11694+browser_host_register_ark_jsfunction(struct _cef_browser_host_t* self,
11695+                                     const cef_string_t* object_name,
11696+                                     cef_string_list_t method_list) {
11697+  shutdown_checker::AssertNotShutdown();
11698+
11699+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11700+
11701+  DCHECK(self);
11702+  if (!self)
11703+    return;
11704+  // Verify param: object_name; type: string_byref_const
11705+  DCHECK(object_name);
11706+  if (!object_name)
11707+    return;
11708+  // Verify param: method_list; type: string_vec_byref_const
11709+  DCHECK(method_list);
11710+  if (!method_list)
11711+    return;
11712+
11713+  // Translate param: method_list; type: string_vec_byref_const
11714+  std::vector<CefString> method_listList;
11715+  transfer_string_list_contents(method_list, method_listList);
11716+
11717+  // Execute
11718+  CefBrowserHostCppToC::Get(self)->RegisterArkJSfunction(CefString(object_name),
11719+                                                         method_listList);
11720+}
11721+
11722+void CEF_CALLBACK
11723+browser_host_unregister_ark_jsfunction(struct _cef_browser_host_t* self,
11724+                                       const cef_string_t* object_name,
11725+                                       cef_string_list_t method_list) {
11726+  shutdown_checker::AssertNotShutdown();
11727+
11728+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11729+
11730+  DCHECK(self);
11731+  if (!self)
11732+    return;
11733+  // Verify param: object_name; type: string_byref_const
11734+  DCHECK(object_name);
11735+  if (!object_name)
11736+    return;
11737+  // Unverified params: method_list
11738+
11739+  // Translate param: method_list; type: string_vec_byref_const
11740+  std::vector<CefString> method_listList;
11741+  transfer_string_list_contents(method_list, method_listList);
11742+
11743+  // Execute
11744+  CefBrowserHostCppToC::Get(self)->UnregisterArkJSfunction(
11745+      CefString(object_name), method_listList);
11746+}
11747+
11748+cef_string_userfree_t CEF_CALLBACK
11749+browser_host_title(struct _cef_browser_host_t* self) {
11750+  shutdown_checker::AssertNotShutdown();
11751+
11752+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11753+
11754+  DCHECK(self);
11755+  if (!self)
11756+    return NULL;
11757+
11758+  // Execute
11759+  CefString _retval = CefBrowserHostCppToC::Get(self)->Title();
11760+
11761+  // Return type: string
11762+  return _retval.DetachToUserFree();
11763+}
11764+
11765+void CEF_CALLBACK browser_host_get_hit_data(struct _cef_browser_host_t* self,
11766+                                            int* type,
11767+                                            cef_string_t* extra_data) {
11768+  shutdown_checker::AssertNotShutdown();
11769+
11770+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11771+
11772+  DCHECK(self);
11773+  if (!self)
11774+    return;
11775+  // Verify param: type; type: simple_byref
11776+  DCHECK(type);
11777+  if (!type)
11778+    return;
11779+  // Verify param: extra_data; type: string_byref
11780+  DCHECK(extra_data);
11781+  if (!extra_data)
11782+    return;
11783+
11784+  // Translate param: type; type: simple_byref
11785+  int typeVal = type ? *type : 0;
11786+  // Translate param: extra_data; type: string_byref
11787+  CefString extra_dataStr(extra_data);
11788+
11789+  // Execute
11790+  CefBrowserHostCppToC::Get(self)->GetHitData(typeVal, extra_dataStr);
11791+
11792+  // Restore param: type; type: simple_byref
11793+  if (type)
11794+    *type = typeVal;
11795+}
11796+
11797+int CEF_CALLBACK
11798+browser_host_page_load_progress(struct _cef_browser_host_t* self) {
11799+  shutdown_checker::AssertNotShutdown();
11800+
11801+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11802+
11803+  DCHECK(self);
11804+  if (!self)
11805+    return 0;
11806+
11807+  // Execute
11808+  int _retval = CefBrowserHostCppToC::Get(self)->PageLoadProgress();
11809+
11810+  // Return type: simple
11811+  return _retval;
11812+}
11813+
11814+float CEF_CALLBACK browser_host_scale(struct _cef_browser_host_t* self) {
11815+  shutdown_checker::AssertNotShutdown();
11816+
11817+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11818+
11819+  DCHECK(self);
11820+  if (!self)
11821+    return 0;
11822+
11823+  // Execute
11824+  float _retval = CefBrowserHostCppToC::Get(self)->Scale();
11825+
11826+  // Return type: simple
11827+  return _retval;
11828+}
11829+
11830+void CEF_CALLBACK
11831+browser_host_load_with_data_and_base_url(struct _cef_browser_host_t* self,
11832+                                         const cef_string_t* baseUrl,
11833+                                         const cef_string_t* data,
11834+                                         const cef_string_t* mimeType,
11835+                                         const cef_string_t* encoding,
11836+                                         const cef_string_t* historyUrl) {
11837+  shutdown_checker::AssertNotShutdown();
11838+
11839+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11840+
11841+  DCHECK(self);
11842+  if (!self)
11843+    return;
11844+  // Unverified params: baseUrl, data, mimeType, encoding, historyUrl
11845+
11846+  // Execute
11847+  CefBrowserHostCppToC::Get(self)->LoadWithDataAndBaseUrl(
11848+      CefString(baseUrl), CefString(data), CefString(mimeType),
11849+      CefString(encoding), CefString(historyUrl));
11850+}
11851+
11852+void CEF_CALLBACK browser_host_load_with_data(struct _cef_browser_host_t* self,
11853+                                              const cef_string_t* data,
11854+                                              const cef_string_t* mimeType,
11855+                                              const cef_string_t* encoding) {
11856+  shutdown_checker::AssertNotShutdown();
11857+
11858+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11859+
11860+  DCHECK(self);
11861+  if (!self)
11862+    return;
11863+  // Unverified params: data, mimeType, encoding
11864+
11865+  // Execute
11866+  CefBrowserHostCppToC::Get(self)->LoadWithData(
11867+      CefString(data), CefString(mimeType), CefString(encoding));
11868+}
11869+
11870+void CEF_CALLBACK
11871+browser_host_add_visited_links(struct _cef_browser_host_t* self,
11872+                               cef_string_list_t urls) {
11873+  shutdown_checker::AssertNotShutdown();
11874+
11875+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11876+
11877+  DCHECK(self);
11878+  if (!self)
11879+    return;
11880+  // Unverified params: urls
11881+
11882+  // Translate param: urls; type: string_vec_byref_const
11883+  std::vector<CefString> urlsList;
11884+  transfer_string_list_contents(urls, urlsList);
11885+
11886+  // Execute
11887+  CefBrowserHostCppToC::Get(self)->AddVisitedLinks(urlsList);
11888+}
11889+
11890 void CEF_CALLBACK
11891 browser_host_ime_set_composition(struct _cef_browser_host_t* self,
11892                                  const cef_string_t* text,
11893@@ -1303,12 +1595,38 @@ int CEF_CALLBACK browser_host_is_audio_muted(struct _cef_browser_host_t* self) {
11894   return _retval;
11895 }
11896
11897+void CEF_CALLBACK browser_host_execute_java_script(
11898+    struct _cef_browser_host_t* self,
11899+    const cef_string_t* code,
11900+    struct _cef_java_script_result_callback_t* callback) {
11901+  shutdown_checker::AssertNotShutdown();
11902+
11903+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
11904+
11905+  DCHECK(self);
11906+  if (!self)
11907+    return;
11908+  // Verify param: code; type: string_byref_const
11909+  DCHECK(code);
11910+  if (!code)
11911+    return;
11912+  // Verify param: callback; type: refptr_diff
11913+  DCHECK(callback);
11914+  if (!callback)
11915+    return;
11916+
11917+  // Execute
11918+  CefBrowserHostCppToC::Get(self)->ExecuteJavaScript(
11919+      CefString(code), CefJavaScriptResultCallbackCToCpp::Wrap(callback));
11920+}
11921+
11922 }  // namespace
11923
11924 // CONSTRUCTOR - Do not edit by hand.
11925
11926 CefBrowserHostCppToC::CefBrowserHostCppToC() {
11927   GetStruct()->get_browser = browser_host_get_browser;
11928+  GetStruct()->post_task_to_uithread = browser_host_post_task_to_uithread;
11929   GetStruct()->close_browser = browser_host_close_browser;
11930   GetStruct()->try_close_browser = browser_host_try_close_browser;
11931   GetStruct()->set_focus = browser_host_set_focus;
11932@@ -1358,6 +1676,21 @@ CefBrowserHostCppToC::CefBrowserHostCppToC() {
11933       browser_host_get_windowless_frame_rate;
11934   GetStruct()->set_windowless_frame_rate =
11935       browser_host_set_windowless_frame_rate;
11936+  GetStruct()->set_web_preferences = browser_host_set_web_preferences;
11937+  GetStruct()->put_user_agent = browser_host_put_user_agent;
11938+  GetStruct()->default_user_agent = browser_host_default_user_agent;
11939+  GetStruct()->set_background_color = browser_host_set_background_color;
11940+  GetStruct()->register_ark_jsfunction = browser_host_register_ark_jsfunction;
11941+  GetStruct()->unregister_ark_jsfunction =
11942+      browser_host_unregister_ark_jsfunction;
11943+  GetStruct()->title = browser_host_title;
11944+  GetStruct()->get_hit_data = browser_host_get_hit_data;
11945+  GetStruct()->page_load_progress = browser_host_page_load_progress;
11946+  GetStruct()->scale = browser_host_scale;
11947+  GetStruct()->load_with_data_and_base_url =
11948+      browser_host_load_with_data_and_base_url;
11949+  GetStruct()->load_with_data = browser_host_load_with_data;
11950+  GetStruct()->add_visited_links = browser_host_add_visited_links;
11951   GetStruct()->ime_set_composition = browser_host_ime_set_composition;
11952   GetStruct()->ime_commit_text = browser_host_ime_commit_text;
11953   GetStruct()->ime_finish_composing_text =
11954@@ -1378,6 +1711,7 @@ CefBrowserHostCppToC::CefBrowserHostCppToC() {
11955   GetStruct()->is_background_host = browser_host_is_background_host;
11956   GetStruct()->set_audio_muted = browser_host_set_audio_muted;
11957   GetStruct()->is_audio_muted = browser_host_is_audio_muted;
11958+  GetStruct()->execute_java_script = browser_host_execute_java_script;
11959 }
11960
11961 // DESTRUCTOR - Do not edit by hand.
11962diff --git a/cef/libcef_dll/cpptoc/browser_host_cpptoc.h b/cef/libcef_dll/cpptoc/browser_host_cpptoc.h
11963index 2afe298c8f..3a7c593329 100644
11964--- a/cef/libcef_dll/cpptoc/browser_host_cpptoc.h
11965+++ b/cef/libcef_dll/cpptoc/browser_host_cpptoc.h
11966@@ -1,4 +1,4 @@
11967-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
11968+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
11969 // reserved. Use of this source code is governed by a BSD-style license that
11970 // can be found in the LICENSE file.
11971 //
11972@@ -9,7 +9,7 @@
11973 // implementations. See the translator.README.txt file in the tools directory
11974 // for more information.
11975 //
11976-// $hash=65fa250d1ab296dd74f4047aef707a4a9e41a772$
11977+// $hash=244bcb519cd21d6febf70c4ce40fbc1cbb18176c$
11978 //
11979
11980 #ifndef CEF_LIBCEF_DLL_CPPTOC_BROWSER_HOST_CPPTOC_H_
11981diff --git a/cef/libcef_dll/cpptoc/browser_permission_request_delegate_cpptoc.cc b/cef/libcef_dll/cpptoc/browser_permission_request_delegate_cpptoc.cc
11982new file mode 100644
11983index 0000000000..82e01abae7
11984--- /dev/null
11985+++ b/cef/libcef_dll/cpptoc/browser_permission_request_delegate_cpptoc.cc
11986@@ -0,0 +1,217 @@
11987+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
11988+// reserved. Use of this source code is governed by a BSD-style license that
11989+// can be found in the LICENSE file.
11990+//
11991+// ---------------------------------------------------------------------------
11992+//
11993+// This file was generated by the CEF translator tool. If making changes by
11994+// hand only do so within the body of existing method and function
11995+// implementations. See the translator.README.txt file in the tools directory
11996+// for more information.
11997+//
11998+// $hash=2f9f0ebd4c8a44fb9c2d2136e0791770fc72dfe0$
11999+//
12000+
12001+#include "libcef_dll/cpptoc/browser_permission_request_delegate_cpptoc.h"
12002+#include "libcef_dll/shutdown_checker.h"
12003+
12004+namespace {
12005+
12006+// MEMBER FUNCTIONS - Body may be edited by hand.
12007+
12008+void CEF_CALLBACK
12009+browser_permission_request_delegate_ask_geolocation_permission(
12010+    struct _cef_browser_permission_request_delegate_t* self,
12011+    const cef_string_t* origin,
12012+    cef_permission_callback_t callback) {
12013+  shutdown_checker::AssertNotShutdown();
12014+
12015+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
12016+
12017+  DCHECK(self);
12018+  if (!self)
12019+    return;
12020+  // Verify param: origin; type: string_byref_const
12021+  DCHECK(origin);
12022+  if (!origin)
12023+    return;
12024+
12025+  // Execute
12026+  CefBrowserPermissionRequestDelegateCppToC::Get(self)
12027+      ->AskGeolocationPermission(CefString(origin), callback);
12028+}
12029+
12030+void CEF_CALLBACK
12031+browser_permission_request_delegate_abort_ask_geolocation_permission(
12032+    struct _cef_browser_permission_request_delegate_t* self,
12033+    const cef_string_t* origin) {
12034+  shutdown_checker::AssertNotShutdown();
12035+
12036+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
12037+
12038+  DCHECK(self);
12039+  if (!self)
12040+    return;
12041+  // Verify param: origin; type: string_byref_const
12042+  DCHECK(origin);
12043+  if (!origin)
12044+    return;
12045+
12046+  // Execute
12047+  CefBrowserPermissionRequestDelegateCppToC::Get(self)
12048+      ->AbortAskGeolocationPermission(CefString(origin));
12049+}
12050+
12051+void CEF_CALLBACK
12052+browser_permission_request_delegate_ask_protected_media_identifier_permission(
12053+    struct _cef_browser_permission_request_delegate_t* self,
12054+    const cef_string_t* origin,
12055+    cef_permission_callback_t callback) {
12056+  shutdown_checker::AssertNotShutdown();
12057+
12058+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
12059+
12060+  DCHECK(self);
12061+  if (!self)
12062+    return;
12063+  // Verify param: origin; type: string_byref_const
12064+  DCHECK(origin);
12065+  if (!origin)
12066+    return;
12067+
12068+  // Execute
12069+  CefBrowserPermissionRequestDelegateCppToC::Get(self)
12070+      ->AskProtectedMediaIdentifierPermission(CefString(origin), callback);
12071+}
12072+
12073+void CEF_CALLBACK
12074+browser_permission_request_delegate_abort_ask_protected_media_identifier_permission(
12075+    struct _cef_browser_permission_request_delegate_t* self,
12076+    const cef_string_t* origin) {
12077+  shutdown_checker::AssertNotShutdown();
12078+
12079+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
12080+
12081+  DCHECK(self);
12082+  if (!self)
12083+    return;
12084+  // Verify param: origin; type: string_byref_const
12085+  DCHECK(origin);
12086+  if (!origin)
12087+    return;
12088+
12089+  // Execute
12090+  CefBrowserPermissionRequestDelegateCppToC::Get(self)
12091+      ->AbortAskProtectedMediaIdentifierPermission(CefString(origin));
12092+}
12093+
12094+void CEF_CALLBACK browser_permission_request_delegate_ask_midisysex_permission(
12095+    struct _cef_browser_permission_request_delegate_t* self,
12096+    const cef_string_t* origin,
12097+    cef_permission_callback_t callback) {
12098+  shutdown_checker::AssertNotShutdown();
12099+
12100+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
12101+
12102+  DCHECK(self);
12103+  if (!self)
12104+    return;
12105+  // Verify param: origin; type: string_byref_const
12106+  DCHECK(origin);
12107+  if (!origin)
12108+    return;
12109+
12110+  // Execute
12111+  CefBrowserPermissionRequestDelegateCppToC::Get(self)->AskMIDISysexPermission(
12112+      CefString(origin), callback);
12113+}
12114+
12115+void CEF_CALLBACK
12116+browser_permission_request_delegate_abort_ask_midisysex_permission(
12117+    struct _cef_browser_permission_request_delegate_t* self,
12118+    const cef_string_t* origin) {
12119+  shutdown_checker::AssertNotShutdown();
12120+
12121+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
12122+
12123+  DCHECK(self);
12124+  if (!self)
12125+    return;
12126+  // Verify param: origin; type: string_byref_const
12127+  DCHECK(origin);
12128+  if (!origin)
12129+    return;
12130+
12131+  // Execute
12132+  CefBrowserPermissionRequestDelegateCppToC::Get(self)
12133+      ->AbortAskMIDISysexPermission(CefString(origin));
12134+}
12135+
12136+void CEF_CALLBACK
12137+browser_permission_request_delegate_notify_geolocation_permission(
12138+    struct _cef_browser_permission_request_delegate_t* self,
12139+    int value,
12140+    const cef_string_t* origin) {
12141+  shutdown_checker::AssertNotShutdown();
12142+
12143+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
12144+
12145+  DCHECK(self);
12146+  if (!self)
12147+    return;
12148+  // Verify param: origin; type: string_byref_const
12149+  DCHECK(origin);
12150+  if (!origin)
12151+    return;
12152+
12153+  // Execute
12154+  CefBrowserPermissionRequestDelegateCppToC::Get(self)
12155+      ->NotifyGeolocationPermission(value ? true : false, CefString(origin));
12156+}
12157+
12158+}  // namespace
12159+
12160+// CONSTRUCTOR - Do not edit by hand.
12161+
12162+CefBrowserPermissionRequestDelegateCppToC::
12163+    CefBrowserPermissionRequestDelegateCppToC() {
12164+  GetStruct()->ask_geolocation_permission =
12165+      browser_permission_request_delegate_ask_geolocation_permission;
12166+  GetStruct()->abort_ask_geolocation_permission =
12167+      browser_permission_request_delegate_abort_ask_geolocation_permission;
12168+  GetStruct()->ask_protected_media_identifier_permission =
12169+      browser_permission_request_delegate_ask_protected_media_identifier_permission;
12170+  GetStruct()->abort_ask_protected_media_identifier_permission =
12171+      browser_permission_request_delegate_abort_ask_protected_media_identifier_permission;
12172+  GetStruct()->ask_midisysex_permission =
12173+      browser_permission_request_delegate_ask_midisysex_permission;
12174+  GetStruct()->abort_ask_midisysex_permission =
12175+      browser_permission_request_delegate_abort_ask_midisysex_permission;
12176+  GetStruct()->notify_geolocation_permission =
12177+      browser_permission_request_delegate_notify_geolocation_permission;
12178+}
12179+
12180+// DESTRUCTOR - Do not edit by hand.
12181+
12182+CefBrowserPermissionRequestDelegateCppToC::
12183+    ~CefBrowserPermissionRequestDelegateCppToC() {
12184+  shutdown_checker::AssertNotShutdown();
12185+}
12186+
12187+template <>
12188+CefRefPtr<CefBrowserPermissionRequestDelegate>
12189+CefCppToCRefCounted<CefBrowserPermissionRequestDelegateCppToC,
12190+                    CefBrowserPermissionRequestDelegate,
12191+                    cef_browser_permission_request_delegate_t>::
12192+    UnwrapDerived(CefWrapperType type,
12193+                  cef_browser_permission_request_delegate_t* s) {
12194+  NOTREACHED() << "Unexpected class type: " << type;
12195+  return nullptr;
12196+}
12197+
12198+template <>
12199+CefWrapperType CefCppToCRefCounted<
12200+    CefBrowserPermissionRequestDelegateCppToC,
12201+    CefBrowserPermissionRequestDelegate,
12202+    cef_browser_permission_request_delegate_t>::kWrapperType =
12203+    WT_BROWSER_PERMISSION_REQUEST_DELEGATE;
12204diff --git a/cef/libcef_dll/cpptoc/browser_permission_request_delegate_cpptoc.h b/cef/libcef_dll/cpptoc/browser_permission_request_delegate_cpptoc.h
12205new file mode 100644
12206index 0000000000..34e1571c8b
12207--- /dev/null
12208+++ b/cef/libcef_dll/cpptoc/browser_permission_request_delegate_cpptoc.h
12209@@ -0,0 +1,38 @@
12210+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12211+// reserved. Use of this source code is governed by a BSD-style license that
12212+// can be found in the LICENSE file.
12213+//
12214+// ---------------------------------------------------------------------------
12215+//
12216+// This file was generated by the CEF translator tool. If making changes by
12217+// hand only do so within the body of existing method and function
12218+// implementations. See the translator.README.txt file in the tools directory
12219+// for more information.
12220+//
12221+// $hash=56d5e14a811fca57a762921bdef1270c44af6b4c$
12222+//
12223+
12224+#ifndef CEF_LIBCEF_DLL_CPPTOC_BROWSER_PERMISSION_REQUEST_DELEGATE_CPPTOC_H_
12225+#define CEF_LIBCEF_DLL_CPPTOC_BROWSER_PERMISSION_REQUEST_DELEGATE_CPPTOC_H_
12226+#pragma once
12227+
12228+#if !defined(BUILDING_CEF_SHARED)
12229+#error This file can be included DLL-side only
12230+#endif
12231+
12232+#include "include/capi/cef_permission_request_capi.h"
12233+#include "include/cef_permission_request.h"
12234+#include "libcef_dll/cpptoc/cpptoc_ref_counted.h"
12235+
12236+// Wrap a C++ class with a C structure.
12237+// This class may be instantiated and accessed DLL-side only.
12238+class CefBrowserPermissionRequestDelegateCppToC
12239+    : public CefCppToCRefCounted<CefBrowserPermissionRequestDelegateCppToC,
12240+                                 CefBrowserPermissionRequestDelegate,
12241+                                 cef_browser_permission_request_delegate_t> {
12242+ public:
12243+  CefBrowserPermissionRequestDelegateCppToC();
12244+  virtual ~CefBrowserPermissionRequestDelegateCppToC();
12245+};
12246+
12247+#endif  // CEF_LIBCEF_DLL_CPPTOC_BROWSER_PERMISSION_REQUEST_DELEGATE_CPPTOC_H_
12248diff --git a/cef/libcef_dll/cpptoc/browser_process_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/browser_process_handler_cpptoc.cc
12249index 908e0f7b22..0a3e0b0e0a 100644
12250--- a/cef/libcef_dll/cpptoc/browser_process_handler_cpptoc.cc
12251+++ b/cef/libcef_dll/cpptoc/browser_process_handler_cpptoc.cc
12252@@ -1,4 +1,4 @@
12253-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12254+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12255 // reserved. Use of this source code is governed by a BSD-style license that
12256 // can be found in the LICENSE file.
12257 //
12258@@ -9,7 +9,7 @@
12259 // implementations. See the translator.README.txt file in the tools directory
12260 // for more information.
12261 //
12262-// $hash=160f499a80898e5b6934960c4f41764c0610458e$
12263+// $hash=452f119327aff2ec0aaed162adf85bbd239b9033$
12264 //
12265
12266 #include "libcef_dll/cpptoc/browser_process_handler_cpptoc.h"
12267diff --git a/cef/libcef_dll/cpptoc/browser_process_handler_cpptoc.h b/cef/libcef_dll/cpptoc/browser_process_handler_cpptoc.h
12268index df662553aa..5ee18f0f52 100644
12269--- a/cef/libcef_dll/cpptoc/browser_process_handler_cpptoc.h
12270+++ b/cef/libcef_dll/cpptoc/browser_process_handler_cpptoc.h
12271@@ -1,4 +1,4 @@
12272-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12273+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12274 // reserved. Use of this source code is governed by a BSD-style license that
12275 // can be found in the LICENSE file.
12276 //
12277@@ -9,7 +9,7 @@
12278 // implementations. See the translator.README.txt file in the tools directory
12279 // for more information.
12280 //
12281-// $hash=780d6faccdcc4a4f1a2a3f1f8b2bd0f780f739be$
12282+// $hash=ebbabaa3d73f0266003818a764f8ca677a9ec6b2$
12283 //
12284
12285 #ifndef CEF_LIBCEF_DLL_CPPTOC_BROWSER_PROCESS_HANDLER_CPPTOC_H_
12286diff --git a/cef/libcef_dll/cpptoc/callback_cpptoc.cc b/cef/libcef_dll/cpptoc/callback_cpptoc.cc
12287index 6b51cd29cb..5deff72b31 100644
12288--- a/cef/libcef_dll/cpptoc/callback_cpptoc.cc
12289+++ b/cef/libcef_dll/cpptoc/callback_cpptoc.cc
12290@@ -1,4 +1,4 @@
12291-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12292+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12293 // reserved. Use of this source code is governed by a BSD-style license that
12294 // can be found in the LICENSE file.
12295 //
12296@@ -9,7 +9,7 @@
12297 // implementations. See the translator.README.txt file in the tools directory
12298 // for more information.
12299 //
12300-// $hash=e4fe3ae042f545ad36a92c641823a25e0502c93d$
12301+// $hash=01b8f661ca054d4a48ee00f1163011688b32e9f1$
12302 //
12303
12304 #include "libcef_dll/cpptoc/callback_cpptoc.h"
12305diff --git a/cef/libcef_dll/cpptoc/callback_cpptoc.h b/cef/libcef_dll/cpptoc/callback_cpptoc.h
12306index 40c13ca4c3..8850a48171 100644
12307--- a/cef/libcef_dll/cpptoc/callback_cpptoc.h
12308+++ b/cef/libcef_dll/cpptoc/callback_cpptoc.h
12309@@ -1,4 +1,4 @@
12310-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12311+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12312 // reserved. Use of this source code is governed by a BSD-style license that
12313 // can be found in the LICENSE file.
12314 //
12315@@ -9,7 +9,7 @@
12316 // implementations. See the translator.README.txt file in the tools directory
12317 // for more information.
12318 //
12319-// $hash=0f7c4746faf3da0cfc56a9d083dc814e4d753494$
12320+// $hash=5b2fa7fef3cde7efde7df615769b6361ea81ce46$
12321 //
12322
12323 #ifndef CEF_LIBCEF_DLL_CPPTOC_CALLBACK_CPPTOC_H_
12324diff --git a/cef/libcef_dll/cpptoc/client_cpptoc.cc b/cef/libcef_dll/cpptoc/client_cpptoc.cc
12325index a8c9c4bed9..2e399963b6 100644
12326--- a/cef/libcef_dll/cpptoc/client_cpptoc.cc
12327+++ b/cef/libcef_dll/cpptoc/client_cpptoc.cc
12328@@ -1,4 +1,4 @@
12329-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12330+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12331 // reserved. Use of this source code is governed by a BSD-style license that
12332 // can be found in the LICENSE file.
12333 //
12334@@ -9,7 +9,7 @@
12335 // implementations. See the translator.README.txt file in the tools directory
12336 // for more information.
12337 //
12338-// $hash=bdbe1ed03a5ab0ca22668417c329555a3b0d9cea$
12339+// $hash=f75b1d4f0b40dc405cdad086256df8feee38f56a$
12340 //
12341
12342 #include "libcef_dll/cpptoc/client_cpptoc.h"
12343@@ -25,11 +25,13 @@
12344 #include "libcef_dll/cpptoc/keyboard_handler_cpptoc.h"
12345 #include "libcef_dll/cpptoc/life_span_handler_cpptoc.h"
12346 #include "libcef_dll/cpptoc/load_handler_cpptoc.h"
12347+#include "libcef_dll/cpptoc/permission_request_cpptoc.h"
12348 #include "libcef_dll/cpptoc/print_handler_cpptoc.h"
12349 #include "libcef_dll/cpptoc/render_handler_cpptoc.h"
12350 #include "libcef_dll/cpptoc/request_handler_cpptoc.h"
12351 #include "libcef_dll/ctocpp/browser_ctocpp.h"
12352 #include "libcef_dll/ctocpp/frame_ctocpp.h"
12353+#include "libcef_dll/ctocpp/list_value_ctocpp.h"
12354 #include "libcef_dll/ctocpp/process_message_ctocpp.h"
12355
12356 namespace {
12357@@ -276,6 +278,22 @@ client_get_request_handler(struct _cef_client_t* self) {
12358   return CefRequestHandlerCppToC::Wrap(_retval);
12359 }
12360
12361+struct _cef_permission_request_t* CEF_CALLBACK
12362+client_get_permission_request(struct _cef_client_t* self) {
12363+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
12364+
12365+  DCHECK(self);
12366+  if (!self)
12367+    return NULL;
12368+
12369+  // Execute
12370+  CefRefPtr<CefPermissionRequest> _retval =
12371+      CefClientCppToC::Get(self)->GetPermissionRequest();
12372+
12373+  // Return type: refptr_same
12374+  return CefPermissionRequestCppToC::Wrap(_retval);
12375+}
12376+
12377 int CEF_CALLBACK
12378 client_on_process_message_received(struct _cef_client_t* self,
12379                                    cef_browser_t* browser,
12380@@ -309,6 +327,43 @@ client_on_process_message_received(struct _cef_client_t* self,
12381   return _retval;
12382 }
12383
12384+int CEF_CALLBACK
12385+client_notify_java_script_result(struct _cef_client_t* self,
12386+                                 struct _cef_list_value_t* args,
12387+                                 const cef_string_t* method,
12388+                                 const cef_string_t* object_name,
12389+                                 struct _cef_list_value_t* result) {
12390+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
12391+
12392+  DCHECK(self);
12393+  if (!self)
12394+    return 0;
12395+  // Verify param: args; type: refptr_diff
12396+  DCHECK(args);
12397+  if (!args)
12398+    return 0;
12399+  // Verify param: method; type: string_byref_const
12400+  DCHECK(method);
12401+  if (!method)
12402+    return 0;
12403+  // Verify param: object_name; type: string_byref_const
12404+  DCHECK(object_name);
12405+  if (!object_name)
12406+    return 0;
12407+  // Verify param: result; type: refptr_diff
12408+  DCHECK(result);
12409+  if (!result)
12410+    return 0;
12411+
12412+  // Execute
12413+  int _retval = CefClientCppToC::Get(self)->NotifyJavaScriptResult(
12414+      CefListValueCToCpp::Wrap(args), CefString(method), CefString(object_name),
12415+      CefListValueCToCpp::Wrap(result));
12416+
12417+  // Return type: simple
12418+  return _retval;
12419+}
12420+
12421 }  // namespace
12422
12423 // CONSTRUCTOR - Do not edit by hand.
12424@@ -329,7 +384,9 @@ CefClientCppToC::CefClientCppToC() {
12425   GetStruct()->get_print_handler = client_get_print_handler;
12426   GetStruct()->get_render_handler = client_get_render_handler;
12427   GetStruct()->get_request_handler = client_get_request_handler;
12428+  GetStruct()->get_permission_request = client_get_permission_request;
12429   GetStruct()->on_process_message_received = client_on_process_message_received;
12430+  GetStruct()->notify_java_script_result = client_notify_java_script_result;
12431 }
12432
12433 // DESTRUCTOR - Do not edit by hand.
12434diff --git a/cef/libcef_dll/cpptoc/client_cpptoc.h b/cef/libcef_dll/cpptoc/client_cpptoc.h
12435index 2cc1906fb6..e33730c9b5 100644
12436--- a/cef/libcef_dll/cpptoc/client_cpptoc.h
12437+++ b/cef/libcef_dll/cpptoc/client_cpptoc.h
12438@@ -1,4 +1,4 @@
12439-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12440+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12441 // reserved. Use of this source code is governed by a BSD-style license that
12442 // can be found in the LICENSE file.
12443 //
12444@@ -9,7 +9,7 @@
12445 // implementations. See the translator.README.txt file in the tools directory
12446 // for more information.
12447 //
12448-// $hash=add3a870eb1069fd05d8c2adae9b89a4ef559e11$
12449+// $hash=30d4264433606a5e29f5ec2a325f630b278d4be9$
12450 //
12451
12452 #ifndef CEF_LIBCEF_DLL_CPPTOC_CLIENT_CPPTOC_H_
12453diff --git a/cef/libcef_dll/cpptoc/command_line_cpptoc.cc b/cef/libcef_dll/cpptoc/command_line_cpptoc.cc
12454index 5ee236f051..97e1a5ef50 100644
12455--- a/cef/libcef_dll/cpptoc/command_line_cpptoc.cc
12456+++ b/cef/libcef_dll/cpptoc/command_line_cpptoc.cc
12457@@ -1,4 +1,4 @@
12458-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12459+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12460 // reserved. Use of this source code is governed by a BSD-style license that
12461 // can be found in the LICENSE file.
12462 //
12463@@ -9,7 +9,7 @@
12464 // implementations. See the translator.README.txt file in the tools directory
12465 // for more information.
12466 //
12467-// $hash=91a5cb8087aef1db3e5b2ac423f345a574b1e67f$
12468+// $hash=fec108946a9d826210e4fa3746839b56a123316c$
12469 //
12470
12471 #include "libcef_dll/cpptoc/command_line_cpptoc.h"
12472diff --git a/cef/libcef_dll/cpptoc/command_line_cpptoc.h b/cef/libcef_dll/cpptoc/command_line_cpptoc.h
12473index 9c2cfef3a9..a466cc76fd 100644
12474--- a/cef/libcef_dll/cpptoc/command_line_cpptoc.h
12475+++ b/cef/libcef_dll/cpptoc/command_line_cpptoc.h
12476@@ -1,4 +1,4 @@
12477-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12478+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12479 // reserved. Use of this source code is governed by a BSD-style license that
12480 // can be found in the LICENSE file.
12481 //
12482@@ -9,7 +9,7 @@
12483 // implementations. See the translator.README.txt file in the tools directory
12484 // for more information.
12485 //
12486-// $hash=86f69fdf227ecb61f15f83cc1e57aadd93169076$
12487+// $hash=395fccd246892782a1c4a26a87baa43f75436bd8$
12488 //
12489
12490 #ifndef CEF_LIBCEF_DLL_CPPTOC_COMMAND_LINE_CPPTOC_H_
12491diff --git a/cef/libcef_dll/cpptoc/completion_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/completion_callback_cpptoc.cc
12492index 7a41014445..dbfc0cab56 100644
12493--- a/cef/libcef_dll/cpptoc/completion_callback_cpptoc.cc
12494+++ b/cef/libcef_dll/cpptoc/completion_callback_cpptoc.cc
12495@@ -1,4 +1,4 @@
12496-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12497+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12498 // reserved. Use of this source code is governed by a BSD-style license that
12499 // can be found in the LICENSE file.
12500 //
12501@@ -9,7 +9,7 @@
12502 // implementations. See the translator.README.txt file in the tools directory
12503 // for more information.
12504 //
12505-// $hash=f4cf5ba559fdc51bcc7e5fa88416d509664c5239$
12506+// $hash=c16d5dc361785c620c9066fc473a443651afa7ab$
12507 //
12508
12509 #include "libcef_dll/cpptoc/completion_callback_cpptoc.h"
12510diff --git a/cef/libcef_dll/cpptoc/completion_callback_cpptoc.h b/cef/libcef_dll/cpptoc/completion_callback_cpptoc.h
12511index c94f9a469d..96b2bb1c78 100644
12512--- a/cef/libcef_dll/cpptoc/completion_callback_cpptoc.h
12513+++ b/cef/libcef_dll/cpptoc/completion_callback_cpptoc.h
12514@@ -1,4 +1,4 @@
12515-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12516+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12517 // reserved. Use of this source code is governed by a BSD-style license that
12518 // can be found in the LICENSE file.
12519 //
12520@@ -9,7 +9,7 @@
12521 // implementations. See the translator.README.txt file in the tools directory
12522 // for more information.
12523 //
12524-// $hash=dfe9244d4a99e0760b1de909640b1ac625d66cd2$
12525+// $hash=7ac48d4ac56f3e31947f8f3b9d9bf54a3bc3383c$
12526 //
12527
12528 #ifndef CEF_LIBCEF_DLL_CPPTOC_COMPLETION_CALLBACK_CPPTOC_H_
12529diff --git a/cef/libcef_dll/cpptoc/context_menu_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/context_menu_handler_cpptoc.cc
12530index 86f870eee7..9f3981569e 100644
12531--- a/cef/libcef_dll/cpptoc/context_menu_handler_cpptoc.cc
12532+++ b/cef/libcef_dll/cpptoc/context_menu_handler_cpptoc.cc
12533@@ -1,4 +1,4 @@
12534-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12535+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12536 // reserved. Use of this source code is governed by a BSD-style license that
12537 // can be found in the LICENSE file.
12538 //
12539@@ -9,7 +9,7 @@
12540 // implementations. See the translator.README.txt file in the tools directory
12541 // for more information.
12542 //
12543-// $hash=7d14f8464796fb174c6b8d35d049f20a054ab03b$
12544+// $hash=a689271e9c27cfd0d6f6fadb8bb624898f165934$
12545 //
12546
12547 #include "libcef_dll/cpptoc/context_menu_handler_cpptoc.h"
12548diff --git a/cef/libcef_dll/cpptoc/context_menu_handler_cpptoc.h b/cef/libcef_dll/cpptoc/context_menu_handler_cpptoc.h
12549index 007d99e65b..f429b4b859 100644
12550--- a/cef/libcef_dll/cpptoc/context_menu_handler_cpptoc.h
12551+++ b/cef/libcef_dll/cpptoc/context_menu_handler_cpptoc.h
12552@@ -1,4 +1,4 @@
12553-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12554+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12555 // reserved. Use of this source code is governed by a BSD-style license that
12556 // can be found in the LICENSE file.
12557 //
12558@@ -9,7 +9,7 @@
12559 // implementations. See the translator.README.txt file in the tools directory
12560 // for more information.
12561 //
12562-// $hash=559fa8da353ae9f961720df55b72bc59811fcf1e$
12563+// $hash=51d213cb8d40ba1f608944422e0522749e433a6f$
12564 //
12565
12566 #ifndef CEF_LIBCEF_DLL_CPPTOC_CONTEXT_MENU_HANDLER_CPPTOC_H_
12567diff --git a/cef/libcef_dll/cpptoc/context_menu_params_cpptoc.cc b/cef/libcef_dll/cpptoc/context_menu_params_cpptoc.cc
12568index 1f0541664a..6c26eac307 100644
12569--- a/cef/libcef_dll/cpptoc/context_menu_params_cpptoc.cc
12570+++ b/cef/libcef_dll/cpptoc/context_menu_params_cpptoc.cc
12571@@ -1,4 +1,4 @@
12572-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12573+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12574 // reserved. Use of this source code is governed by a BSD-style license that
12575 // can be found in the LICENSE file.
12576 //
12577@@ -9,7 +9,7 @@
12578 // implementations. See the translator.README.txt file in the tools directory
12579 // for more information.
12580 //
12581-// $hash=4ff1017b303be65e38e293470384dc891bb26b15$
12582+// $hash=e2f6dee4f74c0eb0979d7a557b007fb8e495bcbb$
12583 //
12584
12585 #include "libcef_dll/cpptoc/context_menu_params_cpptoc.h"
12586diff --git a/cef/libcef_dll/cpptoc/context_menu_params_cpptoc.h b/cef/libcef_dll/cpptoc/context_menu_params_cpptoc.h
12587index 15fec7b9ef..e4cc567718 100644
12588--- a/cef/libcef_dll/cpptoc/context_menu_params_cpptoc.h
12589+++ b/cef/libcef_dll/cpptoc/context_menu_params_cpptoc.h
12590@@ -1,4 +1,4 @@
12591-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12592+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12593 // reserved. Use of this source code is governed by a BSD-style license that
12594 // can be found in the LICENSE file.
12595 //
12596@@ -9,7 +9,7 @@
12597 // implementations. See the translator.README.txt file in the tools directory
12598 // for more information.
12599 //
12600-// $hash=1e0be158c3f98733b0eff48e68b24d592c4ced20$
12601+// $hash=9612bbf58cbf1ee4c41d9cec79267e473d130172$
12602 //
12603
12604 #ifndef CEF_LIBCEF_DLL_CPPTOC_CONTEXT_MENU_PARAMS_CPPTOC_H_
12605diff --git a/cef/libcef_dll/cpptoc/cookie_access_filter_cpptoc.cc b/cef/libcef_dll/cpptoc/cookie_access_filter_cpptoc.cc
12606index 90420bd7ec..eb095602c2 100644
12607--- a/cef/libcef_dll/cpptoc/cookie_access_filter_cpptoc.cc
12608+++ b/cef/libcef_dll/cpptoc/cookie_access_filter_cpptoc.cc
12609@@ -1,4 +1,4 @@
12610-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12611+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12612 // reserved. Use of this source code is governed by a BSD-style license that
12613 // can be found in the LICENSE file.
12614 //
12615@@ -9,7 +9,7 @@
12616 // implementations. See the translator.README.txt file in the tools directory
12617 // for more information.
12618 //
12619-// $hash=f4b9b2362826114b98103317ecc50839a7bf46b1$
12620+// $hash=8a64cdcb148bd7c9cad278d57c353ebf48386a16$
12621 //
12622
12623 #include "libcef_dll/cpptoc/cookie_access_filter_cpptoc.h"
12624diff --git a/cef/libcef_dll/cpptoc/cookie_access_filter_cpptoc.h b/cef/libcef_dll/cpptoc/cookie_access_filter_cpptoc.h
12625index c9816ea1d5..32c7864d66 100644
12626--- a/cef/libcef_dll/cpptoc/cookie_access_filter_cpptoc.h
12627+++ b/cef/libcef_dll/cpptoc/cookie_access_filter_cpptoc.h
12628@@ -1,4 +1,4 @@
12629-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12630+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12631 // reserved. Use of this source code is governed by a BSD-style license that
12632 // can be found in the LICENSE file.
12633 //
12634@@ -9,7 +9,7 @@
12635 // implementations. See the translator.README.txt file in the tools directory
12636 // for more information.
12637 //
12638-// $hash=04d9ec7e72314a01a154debc4742e7921f018efb$
12639+// $hash=16e58fb5b73a0c13602b01a14afb4f6a882c094d$
12640 //
12641
12642 #ifndef CEF_LIBCEF_DLL_CPPTOC_COOKIE_ACCESS_FILTER_CPPTOC_H_
12643diff --git a/cef/libcef_dll/cpptoc/cookie_manager_cpptoc.cc b/cef/libcef_dll/cpptoc/cookie_manager_cpptoc.cc
12644index 53caa6c4fc..e5abda9d95 100644
12645--- a/cef/libcef_dll/cpptoc/cookie_manager_cpptoc.cc
12646+++ b/cef/libcef_dll/cpptoc/cookie_manager_cpptoc.cc
12647@@ -1,4 +1,4 @@
12648-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12649+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12650 // reserved. Use of this source code is governed by a BSD-style license that
12651 // can be found in the LICENSE file.
12652 //
12653@@ -9,7 +9,7 @@
12654 // implementations. See the translator.README.txt file in the tools directory
12655 // for more information.
12656 //
12657-// $hash=0307287ed355556f7c6dab1e4a4fd188ce11d919$
12658+// $hash=de992f1be99ed2d831e840e60f8fb318ca433265$
12659 //
12660
12661 #include "libcef_dll/cpptoc/cookie_manager_cpptoc.h"
12662@@ -34,10 +34,105 @@ CEF_EXPORT cef_cookie_manager_t* cef_cookie_manager_get_global_manager(
12663   return CefCookieManagerCppToC::Wrap(_retval);
12664 }
12665
12666+CEF_EXPORT int cef_cookie_manager_create_cef_cookie(
12667+    const cef_string_t* url,
12668+    const cef_string_t* value,
12669+    struct _cef_cookie_t* cef_cookie) {
12670+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
12671+
12672+  // Verify param: url; type: string_byref_const
12673+  DCHECK(url);
12674+  if (!url)
12675+    return 0;
12676+  // Verify param: value; type: string_byref_const
12677+  DCHECK(value);
12678+  if (!value)
12679+    return 0;
12680+  // Verify param: cef_cookie; type: struct_byref
12681+  DCHECK(cef_cookie);
12682+  if (!cef_cookie)
12683+    return 0;
12684+
12685+  // Translate param: cef_cookie; type: struct_byref
12686+  CefCookie cef_cookieObj;
12687+  if (cef_cookie)
12688+    cef_cookieObj.AttachTo(*cef_cookie);
12689+
12690+  // Execute
12691+  bool _retval = CefCookieManager::CreateCefCookie(
12692+      CefString(url), CefString(value), cef_cookieObj);
12693+
12694+  // Restore param: cef_cookie; type: struct_byref
12695+  if (cef_cookie)
12696+    cef_cookieObj.DetachTo(*cef_cookie);
12697+
12698+  // Return type: bool
12699+  return _retval;
12700+}
12701+
12702 namespace {
12703
12704 // MEMBER FUNCTIONS - Body may be edited by hand.
12705
12706+int CEF_CALLBACK
12707+cookie_manager_is_accept_cookie_allowed(struct _cef_cookie_manager_t* self) {
12708+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
12709+
12710+  DCHECK(self);
12711+  if (!self)
12712+    return 0;
12713+
12714+  // Execute
12715+  bool _retval = CefCookieManagerCppToC::Get(self)->IsAcceptCookieAllowed();
12716+
12717+  // Return type: bool
12718+  return _retval;
12719+}
12720+
12721+void CEF_CALLBACK
12722+cookie_manager_put_accept_cookie_enabled(struct _cef_cookie_manager_t* self,
12723+                                         int accept) {
12724+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
12725+
12726+  DCHECK(self);
12727+  if (!self)
12728+    return;
12729+
12730+  // Execute
12731+  CefCookieManagerCppToC::Get(self)->PutAcceptCookieEnabled(accept ? true
12732+                                                                   : false);
12733+}
12734+
12735+int CEF_CALLBACK cookie_manager_is_file_urlscheme_cookies_allowed(
12736+    struct _cef_cookie_manager_t* self) {
12737+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
12738+
12739+  DCHECK(self);
12740+  if (!self)
12741+    return 0;
12742+
12743+  // Execute
12744+  bool _retval =
12745+      CefCookieManagerCppToC::Get(self)->IsFileURLSchemeCookiesAllowed();
12746+
12747+  // Return type: bool
12748+  return _retval;
12749+}
12750+
12751+void CEF_CALLBACK cookie_manager_put_accept_file_urlscheme_cookies_enabled(
12752+    struct _cef_cookie_manager_t* self,
12753+    int allow) {
12754+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
12755+
12756+  DCHECK(self);
12757+  if (!self)
12758+    return;
12759+
12760+  // Execute
12761+  CefCookieManagerCppToC::Get(self)->PutAcceptFileURLSchemeCookiesEnabled(
12762+      allow ? true : false);
12763+}
12764+
12765 int CEF_CALLBACK
12766 cookie_manager_visit_all_cookies(struct _cef_cookie_manager_t* self,
12767                                  struct _cef_cookie_visitor_t* visitor) {
12768@@ -124,6 +219,7 @@ int CEF_CALLBACK
12769 cookie_manager_delete_cookies(struct _cef_cookie_manager_t* self,
12770                               const cef_string_t* url,
12771                               const cef_string_t* cookie_name,
12772+                              int is_session,
12773                               struct _cef_delete_cookies_callback_t* callback) {
12774   // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
12775
12776@@ -134,7 +230,7 @@ cookie_manager_delete_cookies(struct _cef_cookie_manager_t* self,
12777
12778   // Execute
12779   bool _retval = CefCookieManagerCppToC::Get(self)->DeleteCookies(
12780-      CefString(url), CefString(cookie_name),
12781+      CefString(url), CefString(cookie_name), is_session ? true : false,
12782       CefDeleteCookiesCallbackCToCpp::Wrap(callback));
12783
12784   // Return type: bool
12785@@ -164,6 +260,14 @@ cookie_manager_flush_store(struct _cef_cookie_manager_t* self,
12786 // CONSTRUCTOR - Do not edit by hand.
12787
12788 CefCookieManagerCppToC::CefCookieManagerCppToC() {
12789+  GetStruct()->is_accept_cookie_allowed =
12790+      cookie_manager_is_accept_cookie_allowed;
12791+  GetStruct()->put_accept_cookie_enabled =
12792+      cookie_manager_put_accept_cookie_enabled;
12793+  GetStruct()->is_file_urlscheme_cookies_allowed =
12794+      cookie_manager_is_file_urlscheme_cookies_allowed;
12795+  GetStruct()->put_accept_file_urlscheme_cookies_enabled =
12796+      cookie_manager_put_accept_file_urlscheme_cookies_enabled;
12797   GetStruct()->visit_all_cookies = cookie_manager_visit_all_cookies;
12798   GetStruct()->visit_url_cookies = cookie_manager_visit_url_cookies;
12799   GetStruct()->set_cookie = cookie_manager_set_cookie;
12800diff --git a/cef/libcef_dll/cpptoc/cookie_manager_cpptoc.h b/cef/libcef_dll/cpptoc/cookie_manager_cpptoc.h
12801index 785436edf6..b1088b7340 100644
12802--- a/cef/libcef_dll/cpptoc/cookie_manager_cpptoc.h
12803+++ b/cef/libcef_dll/cpptoc/cookie_manager_cpptoc.h
12804@@ -1,4 +1,4 @@
12805-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12806+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12807 // reserved. Use of this source code is governed by a BSD-style license that
12808 // can be found in the LICENSE file.
12809 //
12810@@ -9,7 +9,7 @@
12811 // implementations. See the translator.README.txt file in the tools directory
12812 // for more information.
12813 //
12814-// $hash=1506d130763fdc06c9346895dbbc2fd9aed0b65f$
12815+// $hash=75170ff033e8e382ba463d350493fab6e12e4192$
12816 //
12817
12818 #ifndef CEF_LIBCEF_DLL_CPPTOC_COOKIE_MANAGER_CPPTOC_H_
12819diff --git a/cef/libcef_dll/cpptoc/cookie_visitor_cpptoc.cc b/cef/libcef_dll/cpptoc/cookie_visitor_cpptoc.cc
12820index 6f3be6beb6..d3d5ef0895 100644
12821--- a/cef/libcef_dll/cpptoc/cookie_visitor_cpptoc.cc
12822+++ b/cef/libcef_dll/cpptoc/cookie_visitor_cpptoc.cc
12823@@ -1,4 +1,4 @@
12824-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12825+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12826 // reserved. Use of this source code is governed by a BSD-style license that
12827 // can be found in the LICENSE file.
12828 //
12829@@ -9,7 +9,7 @@
12830 // implementations. See the translator.README.txt file in the tools directory
12831 // for more information.
12832 //
12833-// $hash=097662e392b7121bf63eef79696420041d753978$
12834+// $hash=07483aea0b811fedba3da36f7a598f06edd22faf$
12835 //
12836
12837 #include "libcef_dll/cpptoc/cookie_visitor_cpptoc.h"
12838@@ -59,12 +59,32 @@ int CEF_CALLBACK cookie_visitor_visit(struct _cef_cookie_visitor_t* self,
12839   return _retval;
12840 }
12841
12842+void CEF_CALLBACK
12843+cookie_visitor_set_cookie_line(struct _cef_cookie_visitor_t* self,
12844+                               const cef_string_t* cookieLine) {
12845+  shutdown_checker::AssertNotShutdown();
12846+
12847+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
12848+
12849+  DCHECK(self);
12850+  if (!self)
12851+    return;
12852+  // Verify param: cookieLine; type: string_byref_const
12853+  DCHECK(cookieLine);
12854+  if (!cookieLine)
12855+    return;
12856+
12857+  // Execute
12858+  CefCookieVisitorCppToC::Get(self)->SetCookieLine(CefString(cookieLine));
12859+}
12860+
12861 }  // namespace
12862
12863 // CONSTRUCTOR - Do not edit by hand.
12864
12865 CefCookieVisitorCppToC::CefCookieVisitorCppToC() {
12866   GetStruct()->visit = cookie_visitor_visit;
12867+  GetStruct()->set_cookie_line = cookie_visitor_set_cookie_line;
12868 }
12869
12870 // DESTRUCTOR - Do not edit by hand.
12871diff --git a/cef/libcef_dll/cpptoc/cookie_visitor_cpptoc.h b/cef/libcef_dll/cpptoc/cookie_visitor_cpptoc.h
12872index 2d3e4f4a22..130318cd07 100644
12873--- a/cef/libcef_dll/cpptoc/cookie_visitor_cpptoc.h
12874+++ b/cef/libcef_dll/cpptoc/cookie_visitor_cpptoc.h
12875@@ -1,4 +1,4 @@
12876-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12877+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12878 // reserved. Use of this source code is governed by a BSD-style license that
12879 // can be found in the LICENSE file.
12880 //
12881@@ -9,7 +9,7 @@
12882 // implementations. See the translator.README.txt file in the tools directory
12883 // for more information.
12884 //
12885-// $hash=badac918a8a378ce2d89a3c2d5c4fe9cdaaa7d15$
12886+// $hash=2c087a5613a69038aa9bba45c46a56d96c6a60ba$
12887 //
12888
12889 #ifndef CEF_LIBCEF_DLL_CPPTOC_COOKIE_VISITOR_CPPTOC_H_
12890diff --git a/cef/libcef_dll/cpptoc/delete_cookies_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/delete_cookies_callback_cpptoc.cc
12891index 096a8b64a0..8c5b758b23 100644
12892--- a/cef/libcef_dll/cpptoc/delete_cookies_callback_cpptoc.cc
12893+++ b/cef/libcef_dll/cpptoc/delete_cookies_callback_cpptoc.cc
12894@@ -1,4 +1,4 @@
12895-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12896+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12897 // reserved. Use of this source code is governed by a BSD-style license that
12898 // can be found in the LICENSE file.
12899 //
12900@@ -9,7 +9,7 @@
12901 // implementations. See the translator.README.txt file in the tools directory
12902 // for more information.
12903 //
12904-// $hash=35218b8c1049df57946037a75907ea3a2774d473$
12905+// $hash=0d2b19ca10e7a4ad389d3ce8de83addc1cad4b63$
12906 //
12907
12908 #include "libcef_dll/cpptoc/delete_cookies_callback_cpptoc.h"
12909diff --git a/cef/libcef_dll/cpptoc/delete_cookies_callback_cpptoc.h b/cef/libcef_dll/cpptoc/delete_cookies_callback_cpptoc.h
12910index 2da23ce189..5f8c4f6db1 100644
12911--- a/cef/libcef_dll/cpptoc/delete_cookies_callback_cpptoc.h
12912+++ b/cef/libcef_dll/cpptoc/delete_cookies_callback_cpptoc.h
12913@@ -1,4 +1,4 @@
12914-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12915+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12916 // reserved. Use of this source code is governed by a BSD-style license that
12917 // can be found in the LICENSE file.
12918 //
12919@@ -9,7 +9,7 @@
12920 // implementations. See the translator.README.txt file in the tools directory
12921 // for more information.
12922 //
12923-// $hash=867dea9b048c71bbbb7ba593a60cfd9c572646e2$
12924+// $hash=424b81efdcb5b86629d8388df5df13b1229155bb$
12925 //
12926
12927 #ifndef CEF_LIBCEF_DLL_CPPTOC_DELETE_COOKIES_CALLBACK_CPPTOC_H_
12928diff --git a/cef/libcef_dll/cpptoc/dev_tools_message_observer_cpptoc.cc b/cef/libcef_dll/cpptoc/dev_tools_message_observer_cpptoc.cc
12929index d3edfa574e..534d94072a 100644
12930--- a/cef/libcef_dll/cpptoc/dev_tools_message_observer_cpptoc.cc
12931+++ b/cef/libcef_dll/cpptoc/dev_tools_message_observer_cpptoc.cc
12932@@ -1,4 +1,4 @@
12933-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12934+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12935 // reserved. Use of this source code is governed by a BSD-style license that
12936 // can be found in the LICENSE file.
12937 //
12938@@ -9,7 +9,7 @@
12939 // implementations. See the translator.README.txt file in the tools directory
12940 // for more information.
12941 //
12942-// $hash=d675fee9716fb6801ed17dea7d57a7c427c4ba5f$
12943+// $hash=a8a10af1258edd37dbb8d079a10943070c1e9c4c$
12944 //
12945
12946 #include "libcef_dll/cpptoc/dev_tools_message_observer_cpptoc.h"
12947diff --git a/cef/libcef_dll/cpptoc/dev_tools_message_observer_cpptoc.h b/cef/libcef_dll/cpptoc/dev_tools_message_observer_cpptoc.h
12948index 80c9939e1e..cd0396a86b 100644
12949--- a/cef/libcef_dll/cpptoc/dev_tools_message_observer_cpptoc.h
12950+++ b/cef/libcef_dll/cpptoc/dev_tools_message_observer_cpptoc.h
12951@@ -1,4 +1,4 @@
12952-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12953+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12954 // reserved. Use of this source code is governed by a BSD-style license that
12955 // can be found in the LICENSE file.
12956 //
12957@@ -9,7 +9,7 @@
12958 // implementations. See the translator.README.txt file in the tools directory
12959 // for more information.
12960 //
12961-// $hash=41e7f0fbaa447820c81bf49d1f02040a04d814a3$
12962+// $hash=309236e96bdbd2d39e63f94872d2de18552bec80$
12963 //
12964
12965 #ifndef CEF_LIBCEF_DLL_CPPTOC_DEV_TOOLS_MESSAGE_OBSERVER_CPPTOC_H_
12966diff --git a/cef/libcef_dll/cpptoc/dialog_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/dialog_handler_cpptoc.cc
12967index f0822febac..6dcffbb174 100644
12968--- a/cef/libcef_dll/cpptoc/dialog_handler_cpptoc.cc
12969+++ b/cef/libcef_dll/cpptoc/dialog_handler_cpptoc.cc
12970@@ -1,4 +1,4 @@
12971-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12972+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12973 // reserved. Use of this source code is governed by a BSD-style license that
12974 // can be found in the LICENSE file.
12975 //
12976@@ -9,7 +9,7 @@
12977 // implementations. See the translator.README.txt file in the tools directory
12978 // for more information.
12979 //
12980-// $hash=01fbdd3bbe7d3cfd39c7d9ae93d8930ac6bd8f39$
12981+// $hash=639576c610ca3898809cdee6d19c45253e9ea4d2$
12982 //
12983
12984 #include "libcef_dll/cpptoc/dialog_handler_cpptoc.h"
12985diff --git a/cef/libcef_dll/cpptoc/dialog_handler_cpptoc.h b/cef/libcef_dll/cpptoc/dialog_handler_cpptoc.h
12986index d587913fcb..d1dbb38f3a 100644
12987--- a/cef/libcef_dll/cpptoc/dialog_handler_cpptoc.h
12988+++ b/cef/libcef_dll/cpptoc/dialog_handler_cpptoc.h
12989@@ -1,4 +1,4 @@
12990-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
12991+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
12992 // reserved. Use of this source code is governed by a BSD-style license that
12993 // can be found in the LICENSE file.
12994 //
12995@@ -9,7 +9,7 @@
12996 // implementations. See the translator.README.txt file in the tools directory
12997 // for more information.
12998 //
12999-// $hash=7a95491bece16f5cac5eb7b50188a27b22ee6f9d$
13000+// $hash=52c108ee7b518b733b331b7d172f16bf3126fe3d$
13001 //
13002
13003 #ifndef CEF_LIBCEF_DLL_CPPTOC_DIALOG_HANDLER_CPPTOC_H_
13004diff --git a/cef/libcef_dll/cpptoc/dictionary_value_cpptoc.cc b/cef/libcef_dll/cpptoc/dictionary_value_cpptoc.cc
13005index 657b28622c..450903a13b 100644
13006--- a/cef/libcef_dll/cpptoc/dictionary_value_cpptoc.cc
13007+++ b/cef/libcef_dll/cpptoc/dictionary_value_cpptoc.cc
13008@@ -1,4 +1,4 @@
13009-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13010+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13011 // reserved. Use of this source code is governed by a BSD-style license that
13012 // can be found in the LICENSE file.
13013 //
13014@@ -9,7 +9,7 @@
13015 // implementations. See the translator.README.txt file in the tools directory
13016 // for more information.
13017 //
13018-// $hash=75a1a43dc9ee88124580e8eff4f7c86b13f03625$
13019+// $hash=c55e53ae76eba8e90a364cd6768764a4c56967ff$
13020 //
13021
13022 #include "libcef_dll/cpptoc/dictionary_value_cpptoc.h"
13023diff --git a/cef/libcef_dll/cpptoc/dictionary_value_cpptoc.h b/cef/libcef_dll/cpptoc/dictionary_value_cpptoc.h
13024index db288ad47b..4b2aeae7eb 100644
13025--- a/cef/libcef_dll/cpptoc/dictionary_value_cpptoc.h
13026+++ b/cef/libcef_dll/cpptoc/dictionary_value_cpptoc.h
13027@@ -1,4 +1,4 @@
13028-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13029+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13030 // reserved. Use of this source code is governed by a BSD-style license that
13031 // can be found in the LICENSE file.
13032 //
13033@@ -9,7 +9,7 @@
13034 // implementations. See the translator.README.txt file in the tools directory
13035 // for more information.
13036 //
13037-// $hash=e436cb8a857b96370525bfb29ff2045d0bfc6ec6$
13038+// $hash=ddb7429c3059bb7af3a285adde53aab78a99d39d$
13039 //
13040
13041 #ifndef CEF_LIBCEF_DLL_CPPTOC_DICTIONARY_VALUE_CPPTOC_H_
13042diff --git a/cef/libcef_dll/cpptoc/display_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/display_handler_cpptoc.cc
13043index c8605c5c88..6f0058a9a1 100644
13044--- a/cef/libcef_dll/cpptoc/display_handler_cpptoc.cc
13045+++ b/cef/libcef_dll/cpptoc/display_handler_cpptoc.cc
13046@@ -1,4 +1,4 @@
13047-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13048+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13049 // reserved. Use of this source code is governed by a BSD-style license that
13050 // can be found in the LICENSE file.
13051 //
13052@@ -9,7 +9,7 @@
13053 // implementations. See the translator.README.txt file in the tools directory
13054 // for more information.
13055 //
13056-// $hash=caf5dead1197de40a4038520f33e48739949d4a0$
13057+// $hash=b990f1a9bafcdd5be19363932738a3f2e778e769$
13058 //
13059
13060 #include "libcef_dll/cpptoc/display_handler_cpptoc.h"
13061@@ -101,6 +101,57 @@ display_handler_on_favicon_urlchange(struct _cef_display_handler_t* self,
13062       CefBrowserCToCpp::Wrap(browser), icon_urlsList);
13063 }
13064
13065+void CEF_CALLBACK
13066+display_handler_on_received_touch_icon_url(struct _cef_display_handler_t* self,
13067+                                           cef_browser_t* browser,
13068+                                           const cef_string_t* icon_url,
13069+                                           int precomposed) {
13070+  shutdown_checker::AssertNotShutdown();
13071+
13072+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
13073+
13074+  DCHECK(self);
13075+  if (!self)
13076+    return;
13077+  // Verify param: browser; type: refptr_diff
13078+  DCHECK(browser);
13079+  if (!browser)
13080+    return;
13081+  // Verify param: icon_url; type: string_byref_const
13082+  DCHECK(icon_url);
13083+  if (!icon_url)
13084+    return;
13085+
13086+  // Execute
13087+  CefDisplayHandlerCppToC::Get(self)->OnReceivedTouchIconUrl(
13088+      CefBrowserCToCpp::Wrap(browser), CefString(icon_url),
13089+      precomposed ? true : false);
13090+}
13091+
13092+void CEF_CALLBACK
13093+display_handler_on_received_icon(struct _cef_display_handler_t* self,
13094+                                 const void* data,
13095+                                 size_t width,
13096+                                 size_t height,
13097+                                 cef_color_type_t color_type,
13098+                                 cef_alpha_type_t alpha_type) {
13099+  shutdown_checker::AssertNotShutdown();
13100+
13101+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
13102+
13103+  DCHECK(self);
13104+  if (!self)
13105+    return;
13106+  // Verify param: data; type: simple_byaddr
13107+  DCHECK(data);
13108+  if (!data)
13109+    return;
13110+
13111+  // Execute
13112+  CefDisplayHandlerCppToC::Get(self)->OnReceivedIcon(data, width, height,
13113+                                                     color_type, alpha_type);
13114+}
13115+
13116 void CEF_CALLBACK
13117 display_handler_on_fullscreen_mode_change(struct _cef_display_handler_t* self,
13118                                           cef_browser_t* browser,
13119@@ -295,6 +346,9 @@ CefDisplayHandlerCppToC::CefDisplayHandlerCppToC() {
13120   GetStruct()->on_address_change = display_handler_on_address_change;
13121   GetStruct()->on_title_change = display_handler_on_title_change;
13122   GetStruct()->on_favicon_urlchange = display_handler_on_favicon_urlchange;
13123+  GetStruct()->on_received_touch_icon_url =
13124+      display_handler_on_received_touch_icon_url;
13125+  GetStruct()->on_received_icon = display_handler_on_received_icon;
13126   GetStruct()->on_fullscreen_mode_change =
13127       display_handler_on_fullscreen_mode_change;
13128   GetStruct()->on_tooltip = display_handler_on_tooltip;
13129diff --git a/cef/libcef_dll/cpptoc/display_handler_cpptoc.h b/cef/libcef_dll/cpptoc/display_handler_cpptoc.h
13130index 8e15fb7d36..9d5121a244 100644
13131--- a/cef/libcef_dll/cpptoc/display_handler_cpptoc.h
13132+++ b/cef/libcef_dll/cpptoc/display_handler_cpptoc.h
13133@@ -1,4 +1,4 @@
13134-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13135+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13136 // reserved. Use of this source code is governed by a BSD-style license that
13137 // can be found in the LICENSE file.
13138 //
13139@@ -9,7 +9,7 @@
13140 // implementations. See the translator.README.txt file in the tools directory
13141 // for more information.
13142 //
13143-// $hash=f73c1983623b5163268cccd0526d7772a987173b$
13144+// $hash=db9ca0d224aa971d8912fc577c53cc9abe52fe58$
13145 //
13146
13147 #ifndef CEF_LIBCEF_DLL_CPPTOC_DISPLAY_HANDLER_CPPTOC_H_
13148diff --git a/cef/libcef_dll/cpptoc/domdocument_cpptoc.cc b/cef/libcef_dll/cpptoc/domdocument_cpptoc.cc
13149index aa9e6a8511..4850dcd185 100644
13150--- a/cef/libcef_dll/cpptoc/domdocument_cpptoc.cc
13151+++ b/cef/libcef_dll/cpptoc/domdocument_cpptoc.cc
13152@@ -1,4 +1,4 @@
13153-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13154+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13155 // reserved. Use of this source code is governed by a BSD-style license that
13156 // can be found in the LICENSE file.
13157 //
13158@@ -9,7 +9,7 @@
13159 // implementations. See the translator.README.txt file in the tools directory
13160 // for more information.
13161 //
13162-// $hash=6478a60c9da50d426e6e4baaa2a08b87e1263179$
13163+// $hash=c4cad301694f35ea716d7c4376252140fcb0d78f$
13164 //
13165
13166 #include "libcef_dll/cpptoc/domdocument_cpptoc.h"
13167diff --git a/cef/libcef_dll/cpptoc/domdocument_cpptoc.h b/cef/libcef_dll/cpptoc/domdocument_cpptoc.h
13168index 48910ee02d..919eb2a288 100644
13169--- a/cef/libcef_dll/cpptoc/domdocument_cpptoc.h
13170+++ b/cef/libcef_dll/cpptoc/domdocument_cpptoc.h
13171@@ -1,4 +1,4 @@
13172-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13173+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13174 // reserved. Use of this source code is governed by a BSD-style license that
13175 // can be found in the LICENSE file.
13176 //
13177@@ -9,7 +9,7 @@
13178 // implementations. See the translator.README.txt file in the tools directory
13179 // for more information.
13180 //
13181-// $hash=c424b9ae21add2404156a766a322bb5843570492$
13182+// $hash=8aea7ead4b6cbdefba65a1234213fee4eb4a1952$
13183 //
13184
13185 #ifndef CEF_LIBCEF_DLL_CPPTOC_DOMDOCUMENT_CPPTOC_H_
13186diff --git a/cef/libcef_dll/cpptoc/domnode_cpptoc.cc b/cef/libcef_dll/cpptoc/domnode_cpptoc.cc
13187index cbf2e2b0d1..6496648c82 100644
13188--- a/cef/libcef_dll/cpptoc/domnode_cpptoc.cc
13189+++ b/cef/libcef_dll/cpptoc/domnode_cpptoc.cc
13190@@ -1,4 +1,4 @@
13191-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13192+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13193 // reserved. Use of this source code is governed by a BSD-style license that
13194 // can be found in the LICENSE file.
13195 //
13196@@ -9,7 +9,7 @@
13197 // implementations. See the translator.README.txt file in the tools directory
13198 // for more information.
13199 //
13200-// $hash=178f5f1c60b6e540f465abc8d7fead1a90c044c6$
13201+// $hash=d352693e8728b1ed586dc62d69a91dd92667760a$
13202 //
13203
13204 #include "libcef_dll/cpptoc/domnode_cpptoc.h"
13205diff --git a/cef/libcef_dll/cpptoc/domnode_cpptoc.h b/cef/libcef_dll/cpptoc/domnode_cpptoc.h
13206index 85e42d6a98..a9325b62b0 100644
13207--- a/cef/libcef_dll/cpptoc/domnode_cpptoc.h
13208+++ b/cef/libcef_dll/cpptoc/domnode_cpptoc.h
13209@@ -1,4 +1,4 @@
13210-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13211+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13212 // reserved. Use of this source code is governed by a BSD-style license that
13213 // can be found in the LICENSE file.
13214 //
13215@@ -9,7 +9,7 @@
13216 // implementations. See the translator.README.txt file in the tools directory
13217 // for more information.
13218 //
13219-// $hash=38aef0aaf02bbd77f9b53cbde53bcaf92cc62800$
13220+// $hash=e5c97231e7d369e8fb4bd73611ec49d7289af076$
13221 //
13222
13223 #ifndef CEF_LIBCEF_DLL_CPPTOC_DOMNODE_CPPTOC_H_
13224diff --git a/cef/libcef_dll/cpptoc/domvisitor_cpptoc.cc b/cef/libcef_dll/cpptoc/domvisitor_cpptoc.cc
13225index 37c2b1a233..fd1cff6281 100644
13226--- a/cef/libcef_dll/cpptoc/domvisitor_cpptoc.cc
13227+++ b/cef/libcef_dll/cpptoc/domvisitor_cpptoc.cc
13228@@ -1,4 +1,4 @@
13229-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13230+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13231 // reserved. Use of this source code is governed by a BSD-style license that
13232 // can be found in the LICENSE file.
13233 //
13234@@ -9,7 +9,7 @@
13235 // implementations. See the translator.README.txt file in the tools directory
13236 // for more information.
13237 //
13238-// $hash=be3a37f8b7472c46512ce6fb910957d36a03da5e$
13239+// $hash=f809bcb5a3f1246b3a94aebe14ad36bbb7e185c7$
13240 //
13241
13242 #include "libcef_dll/cpptoc/domvisitor_cpptoc.h"
13243diff --git a/cef/libcef_dll/cpptoc/domvisitor_cpptoc.h b/cef/libcef_dll/cpptoc/domvisitor_cpptoc.h
13244index 07356d2aa3..84a2b75baa 100644
13245--- a/cef/libcef_dll/cpptoc/domvisitor_cpptoc.h
13246+++ b/cef/libcef_dll/cpptoc/domvisitor_cpptoc.h
13247@@ -1,4 +1,4 @@
13248-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13249+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13250 // reserved. Use of this source code is governed by a BSD-style license that
13251 // can be found in the LICENSE file.
13252 //
13253@@ -9,7 +9,7 @@
13254 // implementations. See the translator.README.txt file in the tools directory
13255 // for more information.
13256 //
13257-// $hash=dd9ebd1d2d03dc18467d9e944925b5ce6768dc22$
13258+// $hash=974358c3bab311f8a19af125f5ccf2dfd13ad8e7$
13259 //
13260
13261 #ifndef CEF_LIBCEF_DLL_CPPTOC_DOMVISITOR_CPPTOC_H_
13262diff --git a/cef/libcef_dll/cpptoc/download_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/download_handler_cpptoc.cc
13263index e922b99d29..8c2aa1f202 100644
13264--- a/cef/libcef_dll/cpptoc/download_handler_cpptoc.cc
13265+++ b/cef/libcef_dll/cpptoc/download_handler_cpptoc.cc
13266@@ -1,4 +1,4 @@
13267-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13268+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13269 // reserved. Use of this source code is governed by a BSD-style license that
13270 // can be found in the LICENSE file.
13271 //
13272@@ -9,7 +9,7 @@
13273 // implementations. See the translator.README.txt file in the tools directory
13274 // for more information.
13275 //
13276-// $hash=eb3787c594889d79bb9c1cfed9bdc5ed6b55f7aa$
13277+// $hash=496b226297ba7d5fa5e7e7bd4117c417e26fae59$
13278 //
13279
13280 #include "libcef_dll/cpptoc/download_handler_cpptoc.h"
13281diff --git a/cef/libcef_dll/cpptoc/download_handler_cpptoc.h b/cef/libcef_dll/cpptoc/download_handler_cpptoc.h
13282index 185eea5692..cd7580f8ab 100644
13283--- a/cef/libcef_dll/cpptoc/download_handler_cpptoc.h
13284+++ b/cef/libcef_dll/cpptoc/download_handler_cpptoc.h
13285@@ -1,4 +1,4 @@
13286-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13287+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13288 // reserved. Use of this source code is governed by a BSD-style license that
13289 // can be found in the LICENSE file.
13290 //
13291@@ -9,7 +9,7 @@
13292 // implementations. See the translator.README.txt file in the tools directory
13293 // for more information.
13294 //
13295-// $hash=7f7550fe074374d10b0601de008eaa81c72f8758$
13296+// $hash=d8c8f94bad7ee32841d16658b106158880edb5e0$
13297 //
13298
13299 #ifndef CEF_LIBCEF_DLL_CPPTOC_DOWNLOAD_HANDLER_CPPTOC_H_
13300diff --git a/cef/libcef_dll/cpptoc/download_image_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/download_image_callback_cpptoc.cc
13301index 47402be7ab..9b31d1e296 100644
13302--- a/cef/libcef_dll/cpptoc/download_image_callback_cpptoc.cc
13303+++ b/cef/libcef_dll/cpptoc/download_image_callback_cpptoc.cc
13304@@ -1,4 +1,4 @@
13305-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13306+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13307 // reserved. Use of this source code is governed by a BSD-style license that
13308 // can be found in the LICENSE file.
13309 //
13310@@ -9,7 +9,7 @@
13311 // implementations. See the translator.README.txt file in the tools directory
13312 // for more information.
13313 //
13314-// $hash=bd98cacb709cbd923c79cf8d61847e0bd6a2e3d9$
13315+// $hash=9313088260606d8b5a57b7e75c1d37e724924a40$
13316 //
13317
13318 #include "libcef_dll/cpptoc/download_image_callback_cpptoc.h"
13319diff --git a/cef/libcef_dll/cpptoc/download_image_callback_cpptoc.h b/cef/libcef_dll/cpptoc/download_image_callback_cpptoc.h
13320index ab340cba33..c7d6125bbb 100644
13321--- a/cef/libcef_dll/cpptoc/download_image_callback_cpptoc.h
13322+++ b/cef/libcef_dll/cpptoc/download_image_callback_cpptoc.h
13323@@ -1,4 +1,4 @@
13324-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13325+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13326 // reserved. Use of this source code is governed by a BSD-style license that
13327 // can be found in the LICENSE file.
13328 //
13329@@ -9,7 +9,7 @@
13330 // implementations. See the translator.README.txt file in the tools directory
13331 // for more information.
13332 //
13333-// $hash=a3b02330389789479f880c0b333632c3c2ddf835$
13334+// $hash=c5f83abc0a8e18b3f0c87d39f83df687dfff22e1$
13335 //
13336
13337 #ifndef CEF_LIBCEF_DLL_CPPTOC_DOWNLOAD_IMAGE_CALLBACK_CPPTOC_H_
13338diff --git a/cef/libcef_dll/cpptoc/download_item_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/download_item_callback_cpptoc.cc
13339index 9c406cf9d4..7ef2878221 100644
13340--- a/cef/libcef_dll/cpptoc/download_item_callback_cpptoc.cc
13341+++ b/cef/libcef_dll/cpptoc/download_item_callback_cpptoc.cc
13342@@ -1,4 +1,4 @@
13343-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13344+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13345 // reserved. Use of this source code is governed by a BSD-style license that
13346 // can be found in the LICENSE file.
13347 //
13348@@ -9,7 +9,7 @@
13349 // implementations. See the translator.README.txt file in the tools directory
13350 // for more information.
13351 //
13352-// $hash=b5c79b2579c5bd4abcd4514214aa2bad8e6c5d08$
13353+// $hash=7cb000dca30be501541fc16036c585a3cd6618cb$
13354 //
13355
13356 #include "libcef_dll/cpptoc/download_item_callback_cpptoc.h"
13357diff --git a/cef/libcef_dll/cpptoc/download_item_callback_cpptoc.h b/cef/libcef_dll/cpptoc/download_item_callback_cpptoc.h
13358index 0c0610c2c6..bd9dec4ef2 100644
13359--- a/cef/libcef_dll/cpptoc/download_item_callback_cpptoc.h
13360+++ b/cef/libcef_dll/cpptoc/download_item_callback_cpptoc.h
13361@@ -1,4 +1,4 @@
13362-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13363+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13364 // reserved. Use of this source code is governed by a BSD-style license that
13365 // can be found in the LICENSE file.
13366 //
13367@@ -9,7 +9,7 @@
13368 // implementations. See the translator.README.txt file in the tools directory
13369 // for more information.
13370 //
13371-// $hash=0437928c10d1860236103d10041bfc2093b29e15$
13372+// $hash=d0baa6c264292da99e5c909d18450486435c9a8e$
13373 //
13374
13375 #ifndef CEF_LIBCEF_DLL_CPPTOC_DOWNLOAD_ITEM_CALLBACK_CPPTOC_H_
13376diff --git a/cef/libcef_dll/cpptoc/download_item_cpptoc.cc b/cef/libcef_dll/cpptoc/download_item_cpptoc.cc
13377index 24adcedf08..357d285c90 100644
13378--- a/cef/libcef_dll/cpptoc/download_item_cpptoc.cc
13379+++ b/cef/libcef_dll/cpptoc/download_item_cpptoc.cc
13380@@ -1,4 +1,4 @@
13381-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13382+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13383 // reserved. Use of this source code is governed by a BSD-style license that
13384 // can be found in the LICENSE file.
13385 //
13386@@ -9,7 +9,7 @@
13387 // implementations. See the translator.README.txt file in the tools directory
13388 // for more information.
13389 //
13390-// $hash=c8e0b5428ea91a7fc739e52e632d66b5a64c9b47$
13391+// $hash=64b3cee6b2de98140a1dc6f6aabff6b2c4ac7d78$
13392 //
13393
13394 #include "libcef_dll/cpptoc/download_item_cpptoc.h"
13395diff --git a/cef/libcef_dll/cpptoc/download_item_cpptoc.h b/cef/libcef_dll/cpptoc/download_item_cpptoc.h
13396index 38c0546f3d..559b6c8f2d 100644
13397--- a/cef/libcef_dll/cpptoc/download_item_cpptoc.h
13398+++ b/cef/libcef_dll/cpptoc/download_item_cpptoc.h
13399@@ -1,4 +1,4 @@
13400-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13401+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13402 // reserved. Use of this source code is governed by a BSD-style license that
13403 // can be found in the LICENSE file.
13404 //
13405@@ -9,7 +9,7 @@
13406 // implementations. See the translator.README.txt file in the tools directory
13407 // for more information.
13408 //
13409-// $hash=4daa4f692a70672c84ac6aa3131d94ef7db16769$
13410+// $hash=72609007d48530320ae4a0f210c4604108d896d9$
13411 //
13412
13413 #ifndef CEF_LIBCEF_DLL_CPPTOC_DOWNLOAD_ITEM_CPPTOC_H_
13414diff --git a/cef/libcef_dll/cpptoc/drag_data_cpptoc.cc b/cef/libcef_dll/cpptoc/drag_data_cpptoc.cc
13415index 3e4eaa50d8..6e682e5d89 100644
13416--- a/cef/libcef_dll/cpptoc/drag_data_cpptoc.cc
13417+++ b/cef/libcef_dll/cpptoc/drag_data_cpptoc.cc
13418@@ -1,4 +1,4 @@
13419-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13420+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13421 // reserved. Use of this source code is governed by a BSD-style license that
13422 // can be found in the LICENSE file.
13423 //
13424@@ -9,7 +9,7 @@
13425 // implementations. See the translator.README.txt file in the tools directory
13426 // for more information.
13427 //
13428-// $hash=da31b4510fabf162d7a456350d493511c7aa115b$
13429+// $hash=2a39ab30ca26c5c63ce557b31f86a5557cd96ebc$
13430 //
13431
13432 #include "libcef_dll/cpptoc/drag_data_cpptoc.h"
13433diff --git a/cef/libcef_dll/cpptoc/drag_data_cpptoc.h b/cef/libcef_dll/cpptoc/drag_data_cpptoc.h
13434index aea7ebbc2b..fbeafd0745 100644
13435--- a/cef/libcef_dll/cpptoc/drag_data_cpptoc.h
13436+++ b/cef/libcef_dll/cpptoc/drag_data_cpptoc.h
13437@@ -1,4 +1,4 @@
13438-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13439+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13440 // reserved. Use of this source code is governed by a BSD-style license that
13441 // can be found in the LICENSE file.
13442 //
13443@@ -9,7 +9,7 @@
13444 // implementations. See the translator.README.txt file in the tools directory
13445 // for more information.
13446 //
13447-// $hash=a09c182c6c031b3ab85700173d5597ef9667468e$
13448+// $hash=c267ab21bb2e49ecade7ba3c7545003d7e072373$
13449 //
13450
13451 #ifndef CEF_LIBCEF_DLL_CPPTOC_DRAG_DATA_CPPTOC_H_
13452diff --git a/cef/libcef_dll/cpptoc/drag_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/drag_handler_cpptoc.cc
13453index 21f5edf82a..833c0cbeef 100644
13454--- a/cef/libcef_dll/cpptoc/drag_handler_cpptoc.cc
13455+++ b/cef/libcef_dll/cpptoc/drag_handler_cpptoc.cc
13456@@ -1,4 +1,4 @@
13457-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13458+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13459 // reserved. Use of this source code is governed by a BSD-style license that
13460 // can be found in the LICENSE file.
13461 //
13462@@ -9,7 +9,7 @@
13463 // implementations. See the translator.README.txt file in the tools directory
13464 // for more information.
13465 //
13466-// $hash=ea86117d7727f8a72eb4d6bdd3abb39f6f986ddd$
13467+// $hash=53febc1355422739c9de942f67f52fb4de462571$
13468 //
13469
13470 #include "libcef_dll/cpptoc/drag_handler_cpptoc.h"
13471diff --git a/cef/libcef_dll/cpptoc/drag_handler_cpptoc.h b/cef/libcef_dll/cpptoc/drag_handler_cpptoc.h
13472index a1eb28ca6d..865b8c94a9 100644
13473--- a/cef/libcef_dll/cpptoc/drag_handler_cpptoc.h
13474+++ b/cef/libcef_dll/cpptoc/drag_handler_cpptoc.h
13475@@ -1,4 +1,4 @@
13476-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13477+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13478 // reserved. Use of this source code is governed by a BSD-style license that
13479 // can be found in the LICENSE file.
13480 //
13481@@ -9,7 +9,7 @@
13482 // implementations. See the translator.README.txt file in the tools directory
13483 // for more information.
13484 //
13485-// $hash=7ef7668148af4ad90257fe5e469ba360fb27cad2$
13486+// $hash=39ab6f4e1f88efb2d726995d7075c904e11091e6$
13487 //
13488
13489 #ifndef CEF_LIBCEF_DLL_CPPTOC_DRAG_HANDLER_CPPTOC_H_
13490diff --git a/cef/libcef_dll/cpptoc/end_tracing_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/end_tracing_callback_cpptoc.cc
13491index e2a1d75a8e..efc5b12922 100644
13492--- a/cef/libcef_dll/cpptoc/end_tracing_callback_cpptoc.cc
13493+++ b/cef/libcef_dll/cpptoc/end_tracing_callback_cpptoc.cc
13494@@ -1,4 +1,4 @@
13495-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13496+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13497 // reserved. Use of this source code is governed by a BSD-style license that
13498 // can be found in the LICENSE file.
13499 //
13500@@ -9,7 +9,7 @@
13501 // implementations. See the translator.README.txt file in the tools directory
13502 // for more information.
13503 //
13504-// $hash=27526065862cb1b69968994cea5258a59bfa9c30$
13505+// $hash=67836a9b2dfec98cab93231cb7e07ca2b9696123$
13506 //
13507
13508 #include "libcef_dll/cpptoc/end_tracing_callback_cpptoc.h"
13509diff --git a/cef/libcef_dll/cpptoc/end_tracing_callback_cpptoc.h b/cef/libcef_dll/cpptoc/end_tracing_callback_cpptoc.h
13510index 6f990429ba..89668d4d52 100644
13511--- a/cef/libcef_dll/cpptoc/end_tracing_callback_cpptoc.h
13512+++ b/cef/libcef_dll/cpptoc/end_tracing_callback_cpptoc.h
13513@@ -1,4 +1,4 @@
13514-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13515+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13516 // reserved. Use of this source code is governed by a BSD-style license that
13517 // can be found in the LICENSE file.
13518 //
13519@@ -9,7 +9,7 @@
13520 // implementations. See the translator.README.txt file in the tools directory
13521 // for more information.
13522 //
13523-// $hash=9c3325aa86df8f76a5e517c609a8560c1bc32ff1$
13524+// $hash=0769e0fec9a6f3c0e33d35b23ebf1bec4a205844$
13525 //
13526
13527 #ifndef CEF_LIBCEF_DLL_CPPTOC_END_TRACING_CALLBACK_CPPTOC_H_
13528diff --git a/cef/libcef_dll/cpptoc/extension_cpptoc.cc b/cef/libcef_dll/cpptoc/extension_cpptoc.cc
13529index 950a28a334..f601bb51c6 100644
13530--- a/cef/libcef_dll/cpptoc/extension_cpptoc.cc
13531+++ b/cef/libcef_dll/cpptoc/extension_cpptoc.cc
13532@@ -1,4 +1,4 @@
13533-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13534+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13535 // reserved. Use of this source code is governed by a BSD-style license that
13536 // can be found in the LICENSE file.
13537 //
13538@@ -9,7 +9,7 @@
13539 // implementations. See the translator.README.txt file in the tools directory
13540 // for more information.
13541 //
13542-// $hash=46f1330dc50f407b9d0048c0110fa03ef1496fb7$
13543+// $hash=5ae76b861609dc9f1b0d033dcebf514d8ef68a57$
13544 //
13545
13546 #include "libcef_dll/cpptoc/extension_cpptoc.h"
13547diff --git a/cef/libcef_dll/cpptoc/extension_cpptoc.h b/cef/libcef_dll/cpptoc/extension_cpptoc.h
13548index 4ff4075fda..f2c06267c0 100644
13549--- a/cef/libcef_dll/cpptoc/extension_cpptoc.h
13550+++ b/cef/libcef_dll/cpptoc/extension_cpptoc.h
13551@@ -1,4 +1,4 @@
13552-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13553+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13554 // reserved. Use of this source code is governed by a BSD-style license that
13555 // can be found in the LICENSE file.
13556 //
13557@@ -9,7 +9,7 @@
13558 // implementations. See the translator.README.txt file in the tools directory
13559 // for more information.
13560 //
13561-// $hash=53061b2630f0dbffa826ecd372ae6f8c911c3e16$
13562+// $hash=46725937bd7ba35ca8ea8fb2d1bbdeac0c53dc80$
13563 //
13564
13565 #ifndef CEF_LIBCEF_DLL_CPPTOC_EXTENSION_CPPTOC_H_
13566diff --git a/cef/libcef_dll/cpptoc/extension_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/extension_handler_cpptoc.cc
13567index 5878f1b499..2aaccfbc5a 100644
13568--- a/cef/libcef_dll/cpptoc/extension_handler_cpptoc.cc
13569+++ b/cef/libcef_dll/cpptoc/extension_handler_cpptoc.cc
13570@@ -1,4 +1,4 @@
13571-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13572+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13573 // reserved. Use of this source code is governed by a BSD-style license that
13574 // can be found in the LICENSE file.
13575 //
13576@@ -9,7 +9,7 @@
13577 // implementations. See the translator.README.txt file in the tools directory
13578 // for more information.
13579 //
13580-// $hash=5f749f292c2c8c39e7c1bb01b84a36ec8d182e2a$
13581+// $hash=7cdd0564d9b129bf9f068764d4d1588645445d5b$
13582 //
13583
13584 #include "libcef_dll/cpptoc/extension_handler_cpptoc.h"
13585diff --git a/cef/libcef_dll/cpptoc/extension_handler_cpptoc.h b/cef/libcef_dll/cpptoc/extension_handler_cpptoc.h
13586index 5ae40e2c4a..fc3ff5d6a6 100644
13587--- a/cef/libcef_dll/cpptoc/extension_handler_cpptoc.h
13588+++ b/cef/libcef_dll/cpptoc/extension_handler_cpptoc.h
13589@@ -1,4 +1,4 @@
13590-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13591+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13592 // reserved. Use of this source code is governed by a BSD-style license that
13593 // can be found in the LICENSE file.
13594 //
13595@@ -9,7 +9,7 @@
13596 // implementations. See the translator.README.txt file in the tools directory
13597 // for more information.
13598 //
13599-// $hash=5cac87c4d641ef2037416771a535c4cd3b9c2a0f$
13600+// $hash=b695266a9c10c4fc0b68f96b64a77cc5c0235827$
13601 //
13602
13603 #ifndef CEF_LIBCEF_DLL_CPPTOC_EXTENSION_HANDLER_CPPTOC_H_
13604diff --git a/cef/libcef_dll/cpptoc/file_dialog_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/file_dialog_callback_cpptoc.cc
13605index 5866e20267..7a4bdbcf8d 100644
13606--- a/cef/libcef_dll/cpptoc/file_dialog_callback_cpptoc.cc
13607+++ b/cef/libcef_dll/cpptoc/file_dialog_callback_cpptoc.cc
13608@@ -1,4 +1,4 @@
13609-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13610+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13611 // reserved. Use of this source code is governed by a BSD-style license that
13612 // can be found in the LICENSE file.
13613 //
13614@@ -9,7 +9,7 @@
13615 // implementations. See the translator.README.txt file in the tools directory
13616 // for more information.
13617 //
13618-// $hash=87cc07146ea03201324443a1abb7bc6fdb4dd472$
13619+// $hash=d334e579f498ad7727721dfe4e10ad810b81035a$
13620 //
13621
13622 #include "libcef_dll/cpptoc/file_dialog_callback_cpptoc.h"
13623diff --git a/cef/libcef_dll/cpptoc/file_dialog_callback_cpptoc.h b/cef/libcef_dll/cpptoc/file_dialog_callback_cpptoc.h
13624index 10bedbc839..046c02aa5f 100644
13625--- a/cef/libcef_dll/cpptoc/file_dialog_callback_cpptoc.h
13626+++ b/cef/libcef_dll/cpptoc/file_dialog_callback_cpptoc.h
13627@@ -1,4 +1,4 @@
13628-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13629+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13630 // reserved. Use of this source code is governed by a BSD-style license that
13631 // can be found in the LICENSE file.
13632 //
13633@@ -9,7 +9,7 @@
13634 // implementations. See the translator.README.txt file in the tools directory
13635 // for more information.
13636 //
13637-// $hash=2d6cfc2f723c4cb0afbe193fb540af66c3261715$
13638+// $hash=2b6c5e5bd0bb44f1c916b317bccb0e0794c28f91$
13639 //
13640
13641 #ifndef CEF_LIBCEF_DLL_CPPTOC_FILE_DIALOG_CALLBACK_CPPTOC_H_
13642diff --git a/cef/libcef_dll/cpptoc/find_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/find_handler_cpptoc.cc
13643index 897837f228..7130f8058d 100644
13644--- a/cef/libcef_dll/cpptoc/find_handler_cpptoc.cc
13645+++ b/cef/libcef_dll/cpptoc/find_handler_cpptoc.cc
13646@@ -1,4 +1,4 @@
13647-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13648+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13649 // reserved. Use of this source code is governed by a BSD-style license that
13650 // can be found in the LICENSE file.
13651 //
13652@@ -9,7 +9,7 @@
13653 // implementations. See the translator.README.txt file in the tools directory
13654 // for more information.
13655 //
13656-// $hash=0d144f7fa17062b3708f16a0232a9a0c7f0467d8$
13657+// $hash=022bd3d1f8fd0eb3de156647dd4f50d688747534$
13658 //
13659
13660 #include "libcef_dll/cpptoc/find_handler_cpptoc.h"
13661diff --git a/cef/libcef_dll/cpptoc/find_handler_cpptoc.h b/cef/libcef_dll/cpptoc/find_handler_cpptoc.h
13662index c7cc001343..0d2193718e 100644
13663--- a/cef/libcef_dll/cpptoc/find_handler_cpptoc.h
13664+++ b/cef/libcef_dll/cpptoc/find_handler_cpptoc.h
13665@@ -1,4 +1,4 @@
13666-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13667+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13668 // reserved. Use of this source code is governed by a BSD-style license that
13669 // can be found in the LICENSE file.
13670 //
13671@@ -9,7 +9,7 @@
13672 // implementations. See the translator.README.txt file in the tools directory
13673 // for more information.
13674 //
13675-// $hash=880a3e0dab84306fb5f44c6b2a28c62e149beda9$
13676+// $hash=c6408d6714984291379f0113e7806cac21aee934$
13677 //
13678
13679 #ifndef CEF_LIBCEF_DLL_CPPTOC_FIND_HANDLER_CPPTOC_H_
13680diff --git a/cef/libcef_dll/cpptoc/focus_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/focus_handler_cpptoc.cc
13681index a8f33a7c96..2549edd6d6 100644
13682--- a/cef/libcef_dll/cpptoc/focus_handler_cpptoc.cc
13683+++ b/cef/libcef_dll/cpptoc/focus_handler_cpptoc.cc
13684@@ -1,4 +1,4 @@
13685-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13686+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13687 // reserved. Use of this source code is governed by a BSD-style license that
13688 // can be found in the LICENSE file.
13689 //
13690@@ -9,7 +9,7 @@
13691 // implementations. See the translator.README.txt file in the tools directory
13692 // for more information.
13693 //
13694-// $hash=fb56495a48efa0319e4ed8789305c5106707e7b6$
13695+// $hash=6d554e767e9e5eea0d9caefba61e35fbe4fff231$
13696 //
13697
13698 #include "libcef_dll/cpptoc/focus_handler_cpptoc.h"
13699diff --git a/cef/libcef_dll/cpptoc/focus_handler_cpptoc.h b/cef/libcef_dll/cpptoc/focus_handler_cpptoc.h
13700index ab2a586449..d384176fe8 100644
13701--- a/cef/libcef_dll/cpptoc/focus_handler_cpptoc.h
13702+++ b/cef/libcef_dll/cpptoc/focus_handler_cpptoc.h
13703@@ -1,4 +1,4 @@
13704-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13705+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13706 // reserved. Use of this source code is governed by a BSD-style license that
13707 // can be found in the LICENSE file.
13708 //
13709@@ -9,7 +9,7 @@
13710 // implementations. See the translator.README.txt file in the tools directory
13711 // for more information.
13712 //
13713-// $hash=dd23aa5e43b06eb8d4975d17cd61c47b77998736$
13714+// $hash=def50c909d368ef1d03f1932f2b0283c3cbf8165$
13715 //
13716
13717 #ifndef CEF_LIBCEF_DLL_CPPTOC_FOCUS_HANDLER_CPPTOC_H_
13718diff --git a/cef/libcef_dll/cpptoc/frame_cpptoc.cc b/cef/libcef_dll/cpptoc/frame_cpptoc.cc
13719index 06db65ffc5..9c3a4a4fdd 100644
13720--- a/cef/libcef_dll/cpptoc/frame_cpptoc.cc
13721+++ b/cef/libcef_dll/cpptoc/frame_cpptoc.cc
13722@@ -1,4 +1,4 @@
13723-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13724+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13725 // reserved. Use of this source code is governed by a BSD-style license that
13726 // can be found in the LICENSE file.
13727 //
13728@@ -9,7 +9,7 @@
13729 // implementations. See the translator.README.txt file in the tools directory
13730 // for more information.
13731 //
13732-// $hash=d9b002e6ccad765d9a03d757e97e35cdc35c95b6$
13733+// $hash=e94035efbcc27884df78e43f4540ac38002c01e7$
13734 //
13735
13736 #include "libcef_dll/cpptoc/frame_cpptoc.h"
13737@@ -388,6 +388,24 @@ void CEF_CALLBACK frame_visit_dom(struct _cef_frame_t* self,
13738   CefFrameCppToC::Get(self)->VisitDOM(CefDOMVisitorCToCpp::Wrap(visitor));
13739 }
13740
13741+void CEF_CALLBACK
13742+frame_load_header_url(struct _cef_frame_t* self,
13743+                      const cef_string_t* url,
13744+                      const cef_string_t* additionalHttpHeaders) {
13745+  shutdown_checker::AssertNotShutdown();
13746+
13747+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
13748+
13749+  DCHECK(self);
13750+  if (!self)
13751+    return;
13752+  // Unverified params: url, additionalHttpHeaders
13753+
13754+  // Execute
13755+  CefFrameCppToC::Get(self)->LoadHeaderUrl(CefString(url),
13756+                                           CefString(additionalHttpHeaders));
13757+}
13758+
13759 struct _cef_urlrequest_t* CEF_CALLBACK
13760 frame_create_urlrequest(struct _cef_frame_t* self,
13761                         struct _cef_request_t* request,
13762@@ -467,6 +485,7 @@ CefFrameCppToC::CefFrameCppToC() {
13763   GetStruct()->get_browser = frame_get_browser;
13764   GetStruct()->get_v8context = frame_get_v8context;
13765   GetStruct()->visit_dom = frame_visit_dom;
13766+  GetStruct()->load_header_url = frame_load_header_url;
13767   GetStruct()->create_urlrequest = frame_create_urlrequest;
13768   GetStruct()->send_process_message = frame_send_process_message;
13769 }
13770diff --git a/cef/libcef_dll/cpptoc/frame_cpptoc.h b/cef/libcef_dll/cpptoc/frame_cpptoc.h
13771index 935e97f3f5..3e1e27fe92 100644
13772--- a/cef/libcef_dll/cpptoc/frame_cpptoc.h
13773+++ b/cef/libcef_dll/cpptoc/frame_cpptoc.h
13774@@ -1,4 +1,4 @@
13775-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13776+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13777 // reserved. Use of this source code is governed by a BSD-style license that
13778 // can be found in the LICENSE file.
13779 //
13780@@ -9,7 +9,7 @@
13781 // implementations. See the translator.README.txt file in the tools directory
13782 // for more information.
13783 //
13784-// $hash=2f4364d696c512ecbe2a16fe77bd1cf3b7c9a34b$
13785+// $hash=5154f627049509d38f098549ea08fb26a0712963$
13786 //
13787
13788 #ifndef CEF_LIBCEF_DLL_CPPTOC_FRAME_CPPTOC_H_
13789diff --git a/cef/libcef_dll/cpptoc/geolocation_acess_cpptoc.cc b/cef/libcef_dll/cpptoc/geolocation_acess_cpptoc.cc
13790new file mode 100644
13791index 0000000000..da6eb4aac5
13792--- /dev/null
13793+++ b/cef/libcef_dll/cpptoc/geolocation_acess_cpptoc.cc
13794@@ -0,0 +1,138 @@
13795+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13796+// reserved. Use of this source code is governed by a BSD-style license that
13797+// can be found in the LICENSE file.
13798+//
13799+// ---------------------------------------------------------------------------
13800+//
13801+// This file was generated by the CEF translator tool. If making changes by
13802+// hand only do so within the body of existing method and function
13803+// implementations. See the translator.README.txt file in the tools directory
13804+// for more information.
13805+//
13806+// $hash=a21b3afd08841726e90bdc044e0dd0d22b277264$
13807+//
13808+
13809+#include "libcef_dll/cpptoc/geolocation_acess_cpptoc.h"
13810+#include "libcef_dll/shutdown_checker.h"
13811+
13812+namespace {
13813+
13814+// MEMBER FUNCTIONS - Body may be edited by hand.
13815+
13816+int CEF_CALLBACK
13817+geolocation_acess_contain_origin(struct _cef_geolocation_acess_t* self,
13818+                                 const cef_string_t* origin) {
13819+  shutdown_checker::AssertNotShutdown();
13820+
13821+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
13822+
13823+  DCHECK(self);
13824+  if (!self)
13825+    return 0;
13826+  // Verify param: origin; type: string_byref_const
13827+  DCHECK(origin);
13828+  if (!origin)
13829+    return 0;
13830+
13831+  // Execute
13832+  bool _retval =
13833+      CefGeolocationAcessCppToC::Get(self)->ContainOrigin(CefString(origin));
13834+
13835+  // Return type: bool
13836+  return _retval;
13837+}
13838+
13839+int CEF_CALLBACK geolocation_acess_is_origin_access_enabled(
13840+    struct _cef_geolocation_acess_t* self,
13841+    const cef_string_t* origin) {
13842+  shutdown_checker::AssertNotShutdown();
13843+
13844+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
13845+
13846+  DCHECK(self);
13847+  if (!self)
13848+    return 0;
13849+  // Verify param: origin; type: string_byref_const
13850+  DCHECK(origin);
13851+  if (!origin)
13852+    return 0;
13853+
13854+  // Execute
13855+  bool _retval = CefGeolocationAcessCppToC::Get(self)->IsOriginAccessEnabled(
13856+      CefString(origin));
13857+
13858+  // Return type: bool
13859+  return _retval;
13860+}
13861+
13862+void CEF_CALLBACK
13863+geolocation_acess_enabled(struct _cef_geolocation_acess_t* self,
13864+                          const cef_string_t* origin) {
13865+  shutdown_checker::AssertNotShutdown();
13866+
13867+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
13868+
13869+  DCHECK(self);
13870+  if (!self)
13871+    return;
13872+  // Verify param: origin; type: string_byref_const
13873+  DCHECK(origin);
13874+  if (!origin)
13875+    return;
13876+
13877+  // Execute
13878+  CefGeolocationAcessCppToC::Get(self)->Enabled(CefString(origin));
13879+}
13880+
13881+void CEF_CALLBACK
13882+geolocation_acess_disabled(struct _cef_geolocation_acess_t* self,
13883+                           const cef_string_t* origin) {
13884+  shutdown_checker::AssertNotShutdown();
13885+
13886+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
13887+
13888+  DCHECK(self);
13889+  if (!self)
13890+    return;
13891+  // Verify param: origin; type: string_byref_const
13892+  DCHECK(origin);
13893+  if (!origin)
13894+    return;
13895+
13896+  // Execute
13897+  CefGeolocationAcessCppToC::Get(self)->Disabled(CefString(origin));
13898+}
13899+
13900+}  // namespace
13901+
13902+// CONSTRUCTOR - Do not edit by hand.
13903+
13904+CefGeolocationAcessCppToC::CefGeolocationAcessCppToC() {
13905+  GetStruct()->contain_origin = geolocation_acess_contain_origin;
13906+  GetStruct()->is_origin_access_enabled =
13907+      geolocation_acess_is_origin_access_enabled;
13908+  GetStruct()->enabled = geolocation_acess_enabled;
13909+  GetStruct()->disabled = geolocation_acess_disabled;
13910+}
13911+
13912+// DESTRUCTOR - Do not edit by hand.
13913+
13914+CefGeolocationAcessCppToC::~CefGeolocationAcessCppToC() {
13915+  shutdown_checker::AssertNotShutdown();
13916+}
13917+
13918+template <>
13919+CefRefPtr<CefGeolocationAcess> CefCppToCRefCounted<
13920+    CefGeolocationAcessCppToC,
13921+    CefGeolocationAcess,
13922+    cef_geolocation_acess_t>::UnwrapDerived(CefWrapperType type,
13923+                                            cef_geolocation_acess_t* s) {
13924+  NOTREACHED() << "Unexpected class type: " << type;
13925+  return nullptr;
13926+}
13927+
13928+template <>
13929+CefWrapperType CefCppToCRefCounted<CefGeolocationAcessCppToC,
13930+                                   CefGeolocationAcess,
13931+                                   cef_geolocation_acess_t>::kWrapperType =
13932+    WT_GEOLOCATION_ACESS;
13933diff --git a/cef/libcef_dll/cpptoc/geolocation_acess_cpptoc.h b/cef/libcef_dll/cpptoc/geolocation_acess_cpptoc.h
13934new file mode 100644
13935index 0000000000..97b335d034
13936--- /dev/null
13937+++ b/cef/libcef_dll/cpptoc/geolocation_acess_cpptoc.h
13938@@ -0,0 +1,38 @@
13939+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13940+// reserved. Use of this source code is governed by a BSD-style license that
13941+// can be found in the LICENSE file.
13942+//
13943+// ---------------------------------------------------------------------------
13944+//
13945+// This file was generated by the CEF translator tool. If making changes by
13946+// hand only do so within the body of existing method and function
13947+// implementations. See the translator.README.txt file in the tools directory
13948+// for more information.
13949+//
13950+// $hash=42966754a9927c84debb6edfd37f8c41873ee268$
13951+//
13952+
13953+#ifndef CEF_LIBCEF_DLL_CPPTOC_GEOLOCATION_ACESS_CPPTOC_H_
13954+#define CEF_LIBCEF_DLL_CPPTOC_GEOLOCATION_ACESS_CPPTOC_H_
13955+#pragma once
13956+
13957+#if !defined(BUILDING_CEF_SHARED)
13958+#error This file can be included DLL-side only
13959+#endif
13960+
13961+#include "include/capi/cef_permission_request_capi.h"
13962+#include "include/cef_permission_request.h"
13963+#include "libcef_dll/cpptoc/cpptoc_ref_counted.h"
13964+
13965+// Wrap a C++ class with a C structure.
13966+// This class may be instantiated and accessed DLL-side only.
13967+class CefGeolocationAcessCppToC
13968+    : public CefCppToCRefCounted<CefGeolocationAcessCppToC,
13969+                                 CefGeolocationAcess,
13970+                                 cef_geolocation_acess_t> {
13971+ public:
13972+  CefGeolocationAcessCppToC();
13973+  virtual ~CefGeolocationAcessCppToC();
13974+};
13975+
13976+#endif  // CEF_LIBCEF_DLL_CPPTOC_GEOLOCATION_ACESS_CPPTOC_H_
13977diff --git a/cef/libcef_dll/cpptoc/get_extension_resource_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/get_extension_resource_callback_cpptoc.cc
13978index f8c7687701..4aeb4e9714 100644
13979--- a/cef/libcef_dll/cpptoc/get_extension_resource_callback_cpptoc.cc
13980+++ b/cef/libcef_dll/cpptoc/get_extension_resource_callback_cpptoc.cc
13981@@ -1,4 +1,4 @@
13982-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
13983+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
13984 // reserved. Use of this source code is governed by a BSD-style license that
13985 // can be found in the LICENSE file.
13986 //
13987@@ -9,7 +9,7 @@
13988 // implementations. See the translator.README.txt file in the tools directory
13989 // for more information.
13990 //
13991-// $hash=569f3d8665058812dba8a4ea648d8f3fa224418a$
13992+// $hash=3f24789c79862889b5a0454c743bf70f71a98faf$
13993 //
13994
13995 #include "libcef_dll/cpptoc/get_extension_resource_callback_cpptoc.h"
13996diff --git a/cef/libcef_dll/cpptoc/get_extension_resource_callback_cpptoc.h b/cef/libcef_dll/cpptoc/get_extension_resource_callback_cpptoc.h
13997index 20b1dd05c6..3ed16a181a 100644
13998--- a/cef/libcef_dll/cpptoc/get_extension_resource_callback_cpptoc.h
13999+++ b/cef/libcef_dll/cpptoc/get_extension_resource_callback_cpptoc.h
14000@@ -1,4 +1,4 @@
14001-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14002+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14003 // reserved. Use of this source code is governed by a BSD-style license that
14004 // can be found in the LICENSE file.
14005 //
14006@@ -9,7 +9,7 @@
14007 // implementations. See the translator.README.txt file in the tools directory
14008 // for more information.
14009 //
14010-// $hash=e821ff90ff963596a694524c1cb7104d09d6fb41$
14011+// $hash=8e0f89043319ecad378af6125bd4fcdbd8bdd34e$
14012 //
14013
14014 #ifndef CEF_LIBCEF_DLL_CPPTOC_GET_EXTENSION_RESOURCE_CALLBACK_CPPTOC_H_
14015diff --git a/cef/libcef_dll/cpptoc/image_cpptoc.cc b/cef/libcef_dll/cpptoc/image_cpptoc.cc
14016index 970541d8a7..81dc865b26 100644
14017--- a/cef/libcef_dll/cpptoc/image_cpptoc.cc
14018+++ b/cef/libcef_dll/cpptoc/image_cpptoc.cc
14019@@ -1,4 +1,4 @@
14020-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14021+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14022 // reserved. Use of this source code is governed by a BSD-style license that
14023 // can be found in the LICENSE file.
14024 //
14025@@ -9,7 +9,7 @@
14026 // implementations. See the translator.README.txt file in the tools directory
14027 // for more information.
14028 //
14029-// $hash=8fbc29a756ba6dd4fa94ff1c886070c9e7feb1bc$
14030+// $hash=e9ee6df7e0e77e54dea7e2c1e4b24cdc88b79344$
14031 //
14032
14033 #include "libcef_dll/cpptoc/image_cpptoc.h"
14034diff --git a/cef/libcef_dll/cpptoc/image_cpptoc.h b/cef/libcef_dll/cpptoc/image_cpptoc.h
14035index 0a09903248..acd84570c2 100644
14036--- a/cef/libcef_dll/cpptoc/image_cpptoc.h
14037+++ b/cef/libcef_dll/cpptoc/image_cpptoc.h
14038@@ -1,4 +1,4 @@
14039-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14040+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14041 // reserved. Use of this source code is governed by a BSD-style license that
14042 // can be found in the LICENSE file.
14043 //
14044@@ -9,7 +9,7 @@
14045 // implementations. See the translator.README.txt file in the tools directory
14046 // for more information.
14047 //
14048-// $hash=b3e15b61b6e7e019575ccf32f374ab4666b1b7cb$
14049+// $hash=e82ca8d18a0367d4061f67afd33a8a486f338238$
14050 //
14051
14052 #ifndef CEF_LIBCEF_DLL_CPPTOC_IMAGE_CPPTOC_H_
14053diff --git a/cef/libcef_dll/cpptoc/java_script_result_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/java_script_result_callback_cpptoc.cc
14054new file mode 100644
14055index 0000000000..1a0adf8512
14056--- /dev/null
14057+++ b/cef/libcef_dll/cpptoc/java_script_result_callback_cpptoc.cc
14058@@ -0,0 +1,72 @@
14059+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14060+// reserved. Use of this source code is governed by a BSD-style license that
14061+// can be found in the LICENSE file.
14062+//
14063+// ---------------------------------------------------------------------------
14064+//
14065+// This file was generated by the CEF translator tool. If making changes by
14066+// hand only do so within the body of existing method and function
14067+// implementations. See the translator.README.txt file in the tools directory
14068+// for more information.
14069+//
14070+// $hash=b98959cda67200ef6a434297c5e9de53a2e948fb$
14071+//
14072+
14073+#include "libcef_dll/cpptoc/java_script_result_callback_cpptoc.h"
14074+#include "libcef_dll/shutdown_checker.h"
14075+
14076+namespace {
14077+
14078+// MEMBER FUNCTIONS - Body may be edited by hand.
14079+
14080+void CEF_CALLBACK java_script_result_callback_on_java_script_exe_result(
14081+    struct _cef_java_script_result_callback_t* self,
14082+    const cef_string_t* result) {
14083+  shutdown_checker::AssertNotShutdown();
14084+
14085+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
14086+
14087+  DCHECK(self);
14088+  if (!self)
14089+    return;
14090+  // Verify param: result; type: string_byref_const
14091+  DCHECK(result);
14092+  if (!result)
14093+    return;
14094+
14095+  // Execute
14096+  CefJavaScriptResultCallbackCppToC::Get(self)->OnJavaScriptExeResult(
14097+      CefString(result));
14098+}
14099+
14100+}  // namespace
14101+
14102+// CONSTRUCTOR - Do not edit by hand.
14103+
14104+CefJavaScriptResultCallbackCppToC::CefJavaScriptResultCallbackCppToC() {
14105+  GetStruct()->on_java_script_exe_result =
14106+      java_script_result_callback_on_java_script_exe_result;
14107+}
14108+
14109+// DESTRUCTOR - Do not edit by hand.
14110+
14111+CefJavaScriptResultCallbackCppToC::~CefJavaScriptResultCallbackCppToC() {
14112+  shutdown_checker::AssertNotShutdown();
14113+}
14114+
14115+template <>
14116+CefRefPtr<CefJavaScriptResultCallback>
14117+CefCppToCRefCounted<CefJavaScriptResultCallbackCppToC,
14118+                    CefJavaScriptResultCallback,
14119+                    cef_java_script_result_callback_t>::
14120+    UnwrapDerived(CefWrapperType type, cef_java_script_result_callback_t* s) {
14121+  NOTREACHED() << "Unexpected class type: " << type;
14122+  return nullptr;
14123+}
14124+
14125+template <>
14126+CefWrapperType
14127+    CefCppToCRefCounted<CefJavaScriptResultCallbackCppToC,
14128+                        CefJavaScriptResultCallback,
14129+                        cef_java_script_result_callback_t>::kWrapperType =
14130+        WT_JAVA_SCRIPT_RESULT_CALLBACK;
14131diff --git a/cef/libcef_dll/cpptoc/java_script_result_callback_cpptoc.h b/cef/libcef_dll/cpptoc/java_script_result_callback_cpptoc.h
14132new file mode 100644
14133index 0000000000..0f6e4290d3
14134--- /dev/null
14135+++ b/cef/libcef_dll/cpptoc/java_script_result_callback_cpptoc.h
14136@@ -0,0 +1,40 @@
14137+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14138+// reserved. Use of this source code is governed by a BSD-style license that
14139+// can be found in the LICENSE file.
14140+//
14141+// ---------------------------------------------------------------------------
14142+//
14143+// This file was generated by the CEF translator tool. If making changes by
14144+// hand only do so within the body of existing method and function
14145+// implementations. See the translator.README.txt file in the tools directory
14146+// for more information.
14147+//
14148+// $hash=fe951e9554ef1ba97fc78a2caac2f154497bde3f$
14149+//
14150+
14151+#ifndef CEF_LIBCEF_DLL_CPPTOC_JAVA_SCRIPT_RESULT_CALLBACK_CPPTOC_H_
14152+#define CEF_LIBCEF_DLL_CPPTOC_JAVA_SCRIPT_RESULT_CALLBACK_CPPTOC_H_
14153+#pragma once
14154+
14155+#if !defined(WRAPPING_CEF_SHARED)
14156+#error This file can be included wrapper-side only
14157+#endif
14158+
14159+#include "include/capi/cef_browser_capi.h"
14160+#include "include/capi/cef_client_capi.h"
14161+#include "include/cef_browser.h"
14162+#include "include/cef_client.h"
14163+#include "libcef_dll/cpptoc/cpptoc_ref_counted.h"
14164+
14165+// Wrap a C++ class with a C structure.
14166+// This class may be instantiated and accessed wrapper-side only.
14167+class CefJavaScriptResultCallbackCppToC
14168+    : public CefCppToCRefCounted<CefJavaScriptResultCallbackCppToC,
14169+                                 CefJavaScriptResultCallback,
14170+                                 cef_java_script_result_callback_t> {
14171+ public:
14172+  CefJavaScriptResultCallbackCppToC();
14173+  virtual ~CefJavaScriptResultCallbackCppToC();
14174+};
14175+
14176+#endif  // CEF_LIBCEF_DLL_CPPTOC_JAVA_SCRIPT_RESULT_CALLBACK_CPPTOC_H_
14177diff --git a/cef/libcef_dll/cpptoc/jsdialog_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/jsdialog_callback_cpptoc.cc
14178index 3df4c9bd61..7b6b2d8d60 100644
14179--- a/cef/libcef_dll/cpptoc/jsdialog_callback_cpptoc.cc
14180+++ b/cef/libcef_dll/cpptoc/jsdialog_callback_cpptoc.cc
14181@@ -1,4 +1,4 @@
14182-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14183+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14184 // reserved. Use of this source code is governed by a BSD-style license that
14185 // can be found in the LICENSE file.
14186 //
14187@@ -9,7 +9,7 @@
14188 // implementations. See the translator.README.txt file in the tools directory
14189 // for more information.
14190 //
14191-// $hash=6ffe0d2a76866636dbe932db3b5c264ff2ef1034$
14192+// $hash=8a66dc7024a4d368e8368b1be42deff60f4966dc$
14193 //
14194
14195 #include "libcef_dll/cpptoc/jsdialog_callback_cpptoc.h"
14196diff --git a/cef/libcef_dll/cpptoc/jsdialog_callback_cpptoc.h b/cef/libcef_dll/cpptoc/jsdialog_callback_cpptoc.h
14197index 5a514d6efb..1c6e3b5147 100644
14198--- a/cef/libcef_dll/cpptoc/jsdialog_callback_cpptoc.h
14199+++ b/cef/libcef_dll/cpptoc/jsdialog_callback_cpptoc.h
14200@@ -1,4 +1,4 @@
14201-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14202+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14203 // reserved. Use of this source code is governed by a BSD-style license that
14204 // can be found in the LICENSE file.
14205 //
14206@@ -9,7 +9,7 @@
14207 // implementations. See the translator.README.txt file in the tools directory
14208 // for more information.
14209 //
14210-// $hash=4cd0f7c3665c4adfba42d2a50a381ee94776913a$
14211+// $hash=5bc7b389cab53db3487532fbcae4ad156c814710$
14212 //
14213
14214 #ifndef CEF_LIBCEF_DLL_CPPTOC_JSDIALOG_CALLBACK_CPPTOC_H_
14215diff --git a/cef/libcef_dll/cpptoc/jsdialog_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/jsdialog_handler_cpptoc.cc
14216index 92b2215dfd..432323d8c3 100644
14217--- a/cef/libcef_dll/cpptoc/jsdialog_handler_cpptoc.cc
14218+++ b/cef/libcef_dll/cpptoc/jsdialog_handler_cpptoc.cc
14219@@ -1,4 +1,4 @@
14220-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14221+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14222 // reserved. Use of this source code is governed by a BSD-style license that
14223 // can be found in the LICENSE file.
14224 //
14225@@ -9,7 +9,7 @@
14226 // implementations. See the translator.README.txt file in the tools directory
14227 // for more information.
14228 //
14229-// $hash=94f71f6f646166bd1c1fe8db5e4e1c03ddcf6d75$
14230+// $hash=41c06df7feb0288f02c644bd633cce3f1754beba$
14231 //
14232
14233 #include "libcef_dll/cpptoc/jsdialog_handler_cpptoc.h"
14234diff --git a/cef/libcef_dll/cpptoc/jsdialog_handler_cpptoc.h b/cef/libcef_dll/cpptoc/jsdialog_handler_cpptoc.h
14235index ad74fb0150..d855c3a20e 100644
14236--- a/cef/libcef_dll/cpptoc/jsdialog_handler_cpptoc.h
14237+++ b/cef/libcef_dll/cpptoc/jsdialog_handler_cpptoc.h
14238@@ -1,4 +1,4 @@
14239-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14240+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14241 // reserved. Use of this source code is governed by a BSD-style license that
14242 // can be found in the LICENSE file.
14243 //
14244@@ -9,7 +9,7 @@
14245 // implementations. See the translator.README.txt file in the tools directory
14246 // for more information.
14247 //
14248-// $hash=40374c94c3d8f6e28a61dce0c1b0462b5abd8d5d$
14249+// $hash=507a9b3192b98d0fad632714a8a4a4f97e5c19a3$
14250 //
14251
14252 #ifndef CEF_LIBCEF_DLL_CPPTOC_JSDIALOG_HANDLER_CPPTOC_H_
14253diff --git a/cef/libcef_dll/cpptoc/keyboard_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/keyboard_handler_cpptoc.cc
14254index 65ddb2e91c..c9b7a0fa96 100644
14255--- a/cef/libcef_dll/cpptoc/keyboard_handler_cpptoc.cc
14256+++ b/cef/libcef_dll/cpptoc/keyboard_handler_cpptoc.cc
14257@@ -1,4 +1,4 @@
14258-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14259+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14260 // reserved. Use of this source code is governed by a BSD-style license that
14261 // can be found in the LICENSE file.
14262 //
14263@@ -9,7 +9,7 @@
14264 // implementations. See the translator.README.txt file in the tools directory
14265 // for more information.
14266 //
14267-// $hash=deae14bf0e2fcd80ba93ae9de3253443c1b1d9b6$
14268+// $hash=9f55775c0fcff5993efe9d8c9db75001d4335743$
14269 //
14270
14271 #include "libcef_dll/cpptoc/keyboard_handler_cpptoc.h"
14272diff --git a/cef/libcef_dll/cpptoc/keyboard_handler_cpptoc.h b/cef/libcef_dll/cpptoc/keyboard_handler_cpptoc.h
14273index f08777a24c..2d01998aa3 100644
14274--- a/cef/libcef_dll/cpptoc/keyboard_handler_cpptoc.h
14275+++ b/cef/libcef_dll/cpptoc/keyboard_handler_cpptoc.h
14276@@ -1,4 +1,4 @@
14277-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14278+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14279 // reserved. Use of this source code is governed by a BSD-style license that
14280 // can be found in the LICENSE file.
14281 //
14282@@ -9,7 +9,7 @@
14283 // implementations. See the translator.README.txt file in the tools directory
14284 // for more information.
14285 //
14286-// $hash=1c78a6ae6ed347871e4a97e854ef2f32c67dc493$
14287+// $hash=5d3509b80dac95b50b7d3c7053562169055ad361$
14288 //
14289
14290 #ifndef CEF_LIBCEF_DLL_CPPTOC_KEYBOARD_HANDLER_CPPTOC_H_
14291diff --git a/cef/libcef_dll/cpptoc/life_span_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/life_span_handler_cpptoc.cc
14292index 364d90e260..31b0867ab0 100644
14293--- a/cef/libcef_dll/cpptoc/life_span_handler_cpptoc.cc
14294+++ b/cef/libcef_dll/cpptoc/life_span_handler_cpptoc.cc
14295@@ -1,4 +1,4 @@
14296-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14297+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14298 // reserved. Use of this source code is governed by a BSD-style license that
14299 // can be found in the LICENSE file.
14300 //
14301@@ -9,7 +9,7 @@
14302 // implementations. See the translator.README.txt file in the tools directory
14303 // for more information.
14304 //
14305-// $hash=93afcd99785dd19d59f12b709d337fabba820c6b$
14306+// $hash=f9e1fa4fa79e3b66d9d147fd0cdb14da459de85b$
14307 //
14308
14309 #include "libcef_dll/cpptoc/life_span_handler_cpptoc.h"
14310diff --git a/cef/libcef_dll/cpptoc/life_span_handler_cpptoc.h b/cef/libcef_dll/cpptoc/life_span_handler_cpptoc.h
14311index 978850dbb5..94eca4fb27 100644
14312--- a/cef/libcef_dll/cpptoc/life_span_handler_cpptoc.h
14313+++ b/cef/libcef_dll/cpptoc/life_span_handler_cpptoc.h
14314@@ -1,4 +1,4 @@
14315-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14316+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14317 // reserved. Use of this source code is governed by a BSD-style license that
14318 // can be found in the LICENSE file.
14319 //
14320@@ -9,7 +9,7 @@
14321 // implementations. See the translator.README.txt file in the tools directory
14322 // for more information.
14323 //
14324-// $hash=74997d31acc32fc121746305fd2ba912272a6310$
14325+// $hash=85c8f684b4799cf1410174b0e29a41b192eaf7a4$
14326 //
14327
14328 #ifndef CEF_LIBCEF_DLL_CPPTOC_LIFE_SPAN_HANDLER_CPPTOC_H_
14329diff --git a/cef/libcef_dll/cpptoc/list_value_cpptoc.cc b/cef/libcef_dll/cpptoc/list_value_cpptoc.cc
14330index 815f318a44..db4fc4e9f1 100644
14331--- a/cef/libcef_dll/cpptoc/list_value_cpptoc.cc
14332+++ b/cef/libcef_dll/cpptoc/list_value_cpptoc.cc
14333@@ -1,4 +1,4 @@
14334-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14335+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14336 // reserved. Use of this source code is governed by a BSD-style license that
14337 // can be found in the LICENSE file.
14338 //
14339@@ -9,7 +9,7 @@
14340 // implementations. See the translator.README.txt file in the tools directory
14341 // for more information.
14342 //
14343-// $hash=c7bbc5ff79015ca4787974d652b7918b745dda71$
14344+// $hash=2d2041c7571bd613f92c2d80c100e92e7439df6e$
14345 //
14346
14347 #include "libcef_dll/cpptoc/list_value_cpptoc.h"
14348diff --git a/cef/libcef_dll/cpptoc/list_value_cpptoc.h b/cef/libcef_dll/cpptoc/list_value_cpptoc.h
14349index 742f542f52..4385aa5c0c 100644
14350--- a/cef/libcef_dll/cpptoc/list_value_cpptoc.h
14351+++ b/cef/libcef_dll/cpptoc/list_value_cpptoc.h
14352@@ -1,4 +1,4 @@
14353-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14354+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14355 // reserved. Use of this source code is governed by a BSD-style license that
14356 // can be found in the LICENSE file.
14357 //
14358@@ -9,7 +9,7 @@
14359 // implementations. See the translator.README.txt file in the tools directory
14360 // for more information.
14361 //
14362-// $hash=edd583b0f3513aacf19964855f67a4cd35cbe8d8$
14363+// $hash=85db2149d4c843eae2145e9015c2062d8ad45695$
14364 //
14365
14366 #ifndef CEF_LIBCEF_DLL_CPPTOC_LIST_VALUE_CPPTOC_H_
14367diff --git a/cef/libcef_dll/cpptoc/load_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/load_handler_cpptoc.cc
14368index cf0eab2b68..ced6a1faaf 100644
14369--- a/cef/libcef_dll/cpptoc/load_handler_cpptoc.cc
14370+++ b/cef/libcef_dll/cpptoc/load_handler_cpptoc.cc
14371@@ -1,4 +1,4 @@
14372-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14373+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14374 // reserved. Use of this source code is governed by a BSD-style license that
14375 // can be found in the LICENSE file.
14376 //
14377@@ -9,12 +9,14 @@
14378 // implementations. See the translator.README.txt file in the tools directory
14379 // for more information.
14380 //
14381-// $hash=7b4c1790884bfd1c7df2b912a6891523d1ce46a2$
14382+// $hash=b9eb6961bd51d881bd4b0aff6e1c2ad16de8bc93$
14383 //
14384
14385 #include "libcef_dll/cpptoc/load_handler_cpptoc.h"
14386 #include "libcef_dll/ctocpp/browser_ctocpp.h"
14387 #include "libcef_dll/ctocpp/frame_ctocpp.h"
14388+#include "libcef_dll/ctocpp/request_ctocpp.h"
14389+#include "libcef_dll/ctocpp/response_ctocpp.h"
14390 #include "libcef_dll/shutdown_checker.h"
14391
14392 namespace {
14393@@ -131,6 +133,62 @@ void CEF_CALLBACK load_handler_on_load_error(struct _cef_load_handler_t* self,
14394       CefString(errorText), CefString(failedUrl));
14395 }
14396
14397+void CEF_CALLBACK
14398+load_handler_on_load_error_with_request(struct _cef_load_handler_t* self,
14399+                                        struct _cef_request_t* request,
14400+                                        int is_main_frame,
14401+                                        int has_user_gesture,
14402+                                        int error_code,
14403+                                        const cef_string_t* error_text) {
14404+  shutdown_checker::AssertNotShutdown();
14405+
14406+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
14407+
14408+  DCHECK(self);
14409+  if (!self)
14410+    return;
14411+  // Verify param: request; type: refptr_diff
14412+  DCHECK(request);
14413+  if (!request)
14414+    return;
14415+  // Verify param: error_text; type: string_byref_const
14416+  DCHECK(error_text);
14417+  if (!error_text)
14418+    return;
14419+
14420+  // Execute
14421+  CefLoadHandlerCppToC::Get(self)->OnLoadErrorWithRequest(
14422+      CefRequestCToCpp::Wrap(request), is_main_frame ? true : false,
14423+      has_user_gesture ? true : false, error_code, CefString(error_text));
14424+}
14425+
14426+void CEF_CALLBACK load_handler_on_http_error(struct _cef_load_handler_t* self,
14427+                                             struct _cef_request_t* request,
14428+                                             int is_main_frame,
14429+                                             int has_user_gesture,
14430+                                             struct _cef_response_t* response) {
14431+  shutdown_checker::AssertNotShutdown();
14432+
14433+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
14434+
14435+  DCHECK(self);
14436+  if (!self)
14437+    return;
14438+  // Verify param: request; type: refptr_diff
14439+  DCHECK(request);
14440+  if (!request)
14441+    return;
14442+  // Verify param: response; type: refptr_diff
14443+  DCHECK(response);
14444+  if (!response)
14445+    return;
14446+
14447+  // Execute
14448+  CefLoadHandlerCppToC::Get(self)->OnHttpError(
14449+      CefRequestCToCpp::Wrap(request), is_main_frame ? true : false,
14450+      has_user_gesture ? true : false, CefResponseCToCpp::Wrap(response));
14451+}
14452+
14453 }  // namespace
14454
14455 // CONSTRUCTOR - Do not edit by hand.
14456@@ -140,6 +198,9 @@ CefLoadHandlerCppToC::CefLoadHandlerCppToC() {
14457   GetStruct()->on_load_start = load_handler_on_load_start;
14458   GetStruct()->on_load_end = load_handler_on_load_end;
14459   GetStruct()->on_load_error = load_handler_on_load_error;
14460+  GetStruct()->on_load_error_with_request =
14461+      load_handler_on_load_error_with_request;
14462+  GetStruct()->on_http_error = load_handler_on_http_error;
14463 }
14464
14465 // DESTRUCTOR - Do not edit by hand.
14466diff --git a/cef/libcef_dll/cpptoc/load_handler_cpptoc.h b/cef/libcef_dll/cpptoc/load_handler_cpptoc.h
14467index 7acadc696d..31ed258d8b 100644
14468--- a/cef/libcef_dll/cpptoc/load_handler_cpptoc.h
14469+++ b/cef/libcef_dll/cpptoc/load_handler_cpptoc.h
14470@@ -1,4 +1,4 @@
14471-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14472+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14473 // reserved. Use of this source code is governed by a BSD-style license that
14474 // can be found in the LICENSE file.
14475 //
14476@@ -9,7 +9,7 @@
14477 // implementations. See the translator.README.txt file in the tools directory
14478 // for more information.
14479 //
14480-// $hash=818e0839f6db5135dcc902d0498d69d6006458a2$
14481+// $hash=67a49693f79a526ebb12c8352c13de8bf7c64784$
14482 //
14483
14484 #ifndef CEF_LIBCEF_DLL_CPPTOC_LOAD_HANDLER_CPPTOC_H_
14485diff --git a/cef/libcef_dll/cpptoc/media_observer_cpptoc.cc b/cef/libcef_dll/cpptoc/media_observer_cpptoc.cc
14486index 9c5858a42d..bc6e8dde4a 100644
14487--- a/cef/libcef_dll/cpptoc/media_observer_cpptoc.cc
14488+++ b/cef/libcef_dll/cpptoc/media_observer_cpptoc.cc
14489@@ -1,4 +1,4 @@
14490-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14491+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14492 // reserved. Use of this source code is governed by a BSD-style license that
14493 // can be found in the LICENSE file.
14494 //
14495@@ -9,7 +9,7 @@
14496 // implementations. See the translator.README.txt file in the tools directory
14497 // for more information.
14498 //
14499-// $hash=bde209e2a39bc62b9b1b75be9c2f9129d7cecef5$
14500+// $hash=2e7db3a335f170dad7a1793f5695593b8c75d853$
14501 //
14502
14503 #include "libcef_dll/cpptoc/media_observer_cpptoc.h"
14504diff --git a/cef/libcef_dll/cpptoc/media_observer_cpptoc.h b/cef/libcef_dll/cpptoc/media_observer_cpptoc.h
14505index d1091c12a1..efcedd1945 100644
14506--- a/cef/libcef_dll/cpptoc/media_observer_cpptoc.h
14507+++ b/cef/libcef_dll/cpptoc/media_observer_cpptoc.h
14508@@ -1,4 +1,4 @@
14509-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14510+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14511 // reserved. Use of this source code is governed by a BSD-style license that
14512 // can be found in the LICENSE file.
14513 //
14514@@ -9,7 +9,7 @@
14515 // implementations. See the translator.README.txt file in the tools directory
14516 // for more information.
14517 //
14518-// $hash=a070750660b9f972e0433f55de75a536a39a6bb8$
14519+// $hash=c3191e4923e9708b864d6cb5c21bd5da2fe41645$
14520 //
14521
14522 #ifndef CEF_LIBCEF_DLL_CPPTOC_MEDIA_OBSERVER_CPPTOC_H_
14523diff --git a/cef/libcef_dll/cpptoc/media_route_cpptoc.cc b/cef/libcef_dll/cpptoc/media_route_cpptoc.cc
14524index 86d39da6dd..d591021eaa 100644
14525--- a/cef/libcef_dll/cpptoc/media_route_cpptoc.cc
14526+++ b/cef/libcef_dll/cpptoc/media_route_cpptoc.cc
14527@@ -1,4 +1,4 @@
14528-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14529+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14530 // reserved. Use of this source code is governed by a BSD-style license that
14531 // can be found in the LICENSE file.
14532 //
14533@@ -9,7 +9,7 @@
14534 // implementations. See the translator.README.txt file in the tools directory
14535 // for more information.
14536 //
14537-// $hash=623b9c69c53f0839f3aaa619ac734955909e46a9$
14538+// $hash=2c4dc1026a21a2712fc84c1393d4c69c0335f484$
14539 //
14540
14541 #include "libcef_dll/cpptoc/media_route_cpptoc.h"
14542diff --git a/cef/libcef_dll/cpptoc/media_route_cpptoc.h b/cef/libcef_dll/cpptoc/media_route_cpptoc.h
14543index a074bac443..bacd9e11ae 100644
14544--- a/cef/libcef_dll/cpptoc/media_route_cpptoc.h
14545+++ b/cef/libcef_dll/cpptoc/media_route_cpptoc.h
14546@@ -1,4 +1,4 @@
14547-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14548+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14549 // reserved. Use of this source code is governed by a BSD-style license that
14550 // can be found in the LICENSE file.
14551 //
14552@@ -9,7 +9,7 @@
14553 // implementations. See the translator.README.txt file in the tools directory
14554 // for more information.
14555 //
14556-// $hash=b547199c709e2c5b6d4435a80cc8bb3303f5cbc6$
14557+// $hash=d1a941bd47da6a5d5da6f4ce72f48d480351621f$
14558 //
14559
14560 #ifndef CEF_LIBCEF_DLL_CPPTOC_MEDIA_ROUTE_CPPTOC_H_
14561diff --git a/cef/libcef_dll/cpptoc/media_route_create_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/media_route_create_callback_cpptoc.cc
14562index 2c7ef896b8..151338582f 100644
14563--- a/cef/libcef_dll/cpptoc/media_route_create_callback_cpptoc.cc
14564+++ b/cef/libcef_dll/cpptoc/media_route_create_callback_cpptoc.cc
14565@@ -1,4 +1,4 @@
14566-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14567+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14568 // reserved. Use of this source code is governed by a BSD-style license that
14569 // can be found in the LICENSE file.
14570 //
14571@@ -9,7 +9,7 @@
14572 // implementations. See the translator.README.txt file in the tools directory
14573 // for more information.
14574 //
14575-// $hash=e051d7ed2be481b7686aada8a7977b8aefd459fc$
14576+// $hash=1f70badd10a66ed36402c4227f30d45e6696981d$
14577 //
14578
14579 #include "libcef_dll/cpptoc/media_route_create_callback_cpptoc.h"
14580diff --git a/cef/libcef_dll/cpptoc/media_route_create_callback_cpptoc.h b/cef/libcef_dll/cpptoc/media_route_create_callback_cpptoc.h
14581index 3f9bf4540e..49b6de2b22 100644
14582--- a/cef/libcef_dll/cpptoc/media_route_create_callback_cpptoc.h
14583+++ b/cef/libcef_dll/cpptoc/media_route_create_callback_cpptoc.h
14584@@ -1,4 +1,4 @@
14585-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14586+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14587 // reserved. Use of this source code is governed by a BSD-style license that
14588 // can be found in the LICENSE file.
14589 //
14590@@ -9,7 +9,7 @@
14591 // implementations. See the translator.README.txt file in the tools directory
14592 // for more information.
14593 //
14594-// $hash=02a902b8d31e4a9b72a6278911ee6ea21ce6ce5f$
14595+// $hash=0f872bf3a0c0c80e6c5c34b66d877f982005a436$
14596 //
14597
14598 #ifndef CEF_LIBCEF_DLL_CPPTOC_MEDIA_ROUTE_CREATE_CALLBACK_CPPTOC_H_
14599diff --git a/cef/libcef_dll/cpptoc/media_router_cpptoc.cc b/cef/libcef_dll/cpptoc/media_router_cpptoc.cc
14600index bacf732ebd..8b4825cf21 100644
14601--- a/cef/libcef_dll/cpptoc/media_router_cpptoc.cc
14602+++ b/cef/libcef_dll/cpptoc/media_router_cpptoc.cc
14603@@ -1,4 +1,4 @@
14604-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14605+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14606 // reserved. Use of this source code is governed by a BSD-style license that
14607 // can be found in the LICENSE file.
14608 //
14609@@ -9,7 +9,7 @@
14610 // implementations. See the translator.README.txt file in the tools directory
14611 // for more information.
14612 //
14613-// $hash=f60f51701b15100a8ad9463adfe0deb37c2d6b4f$
14614+// $hash=55a817af6b8dc3408785410b47e5d01313ebc9dd$
14615 //
14616
14617 #include "libcef_dll/cpptoc/media_router_cpptoc.h"
14618diff --git a/cef/libcef_dll/cpptoc/media_router_cpptoc.h b/cef/libcef_dll/cpptoc/media_router_cpptoc.h
14619index b3418a8cac..1814ebf023 100644
14620--- a/cef/libcef_dll/cpptoc/media_router_cpptoc.h
14621+++ b/cef/libcef_dll/cpptoc/media_router_cpptoc.h
14622@@ -1,4 +1,4 @@
14623-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14624+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14625 // reserved. Use of this source code is governed by a BSD-style license that
14626 // can be found in the LICENSE file.
14627 //
14628@@ -9,7 +9,7 @@
14629 // implementations. See the translator.README.txt file in the tools directory
14630 // for more information.
14631 //
14632-// $hash=e07704cc1fb37383b5b00f5ac323983f9c552b6c$
14633+// $hash=5e358f83742bcd0fb129a1471791cfa899c81cd1$
14634 //
14635
14636 #ifndef CEF_LIBCEF_DLL_CPPTOC_MEDIA_ROUTER_CPPTOC_H_
14637diff --git a/cef/libcef_dll/cpptoc/media_sink_cpptoc.cc b/cef/libcef_dll/cpptoc/media_sink_cpptoc.cc
14638index f109680b4a..15621f1f0a 100644
14639--- a/cef/libcef_dll/cpptoc/media_sink_cpptoc.cc
14640+++ b/cef/libcef_dll/cpptoc/media_sink_cpptoc.cc
14641@@ -1,4 +1,4 @@
14642-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14643+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14644 // reserved. Use of this source code is governed by a BSD-style license that
14645 // can be found in the LICENSE file.
14646 //
14647@@ -9,7 +9,7 @@
14648 // implementations. See the translator.README.txt file in the tools directory
14649 // for more information.
14650 //
14651-// $hash=59bdc13468b5e75d07e67e6efae44ebfbdb5b632$
14652+// $hash=59c15e457142b252222f01e36ea626bed5ed2b7a$
14653 //
14654
14655 #include "libcef_dll/cpptoc/media_sink_cpptoc.h"
14656diff --git a/cef/libcef_dll/cpptoc/media_sink_cpptoc.h b/cef/libcef_dll/cpptoc/media_sink_cpptoc.h
14657index 23a4f48ffc..50ea41f6b6 100644
14658--- a/cef/libcef_dll/cpptoc/media_sink_cpptoc.h
14659+++ b/cef/libcef_dll/cpptoc/media_sink_cpptoc.h
14660@@ -1,4 +1,4 @@
14661-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14662+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14663 // reserved. Use of this source code is governed by a BSD-style license that
14664 // can be found in the LICENSE file.
14665 //
14666@@ -9,7 +9,7 @@
14667 // implementations. See the translator.README.txt file in the tools directory
14668 // for more information.
14669 //
14670-// $hash=7e39b2f13f61bc0b9d71ddf631107260a9e1f52d$
14671+// $hash=23e239facf0fd4194647f916443cda73fee1d0bc$
14672 //
14673
14674 #ifndef CEF_LIBCEF_DLL_CPPTOC_MEDIA_SINK_CPPTOC_H_
14675diff --git a/cef/libcef_dll/cpptoc/media_sink_device_info_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/media_sink_device_info_callback_cpptoc.cc
14676index dd5f56c4c1..b6b99a14b6 100644
14677--- a/cef/libcef_dll/cpptoc/media_sink_device_info_callback_cpptoc.cc
14678+++ b/cef/libcef_dll/cpptoc/media_sink_device_info_callback_cpptoc.cc
14679@@ -1,4 +1,4 @@
14680-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14681+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14682 // reserved. Use of this source code is governed by a BSD-style license that
14683 // can be found in the LICENSE file.
14684 //
14685@@ -9,7 +9,7 @@
14686 // implementations. See the translator.README.txt file in the tools directory
14687 // for more information.
14688 //
14689-// $hash=f72f4f67e71c6e6a6a2d7d25ad2f5972bbb8eee0$
14690+// $hash=159abfe9b788acf428465451ee232ee1675ea1a5$
14691 //
14692
14693 #include "libcef_dll/cpptoc/media_sink_device_info_callback_cpptoc.h"
14694diff --git a/cef/libcef_dll/cpptoc/media_sink_device_info_callback_cpptoc.h b/cef/libcef_dll/cpptoc/media_sink_device_info_callback_cpptoc.h
14695index 24b82059d9..1de9a0b39b 100644
14696--- a/cef/libcef_dll/cpptoc/media_sink_device_info_callback_cpptoc.h
14697+++ b/cef/libcef_dll/cpptoc/media_sink_device_info_callback_cpptoc.h
14698@@ -1,4 +1,4 @@
14699-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14700+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14701 // reserved. Use of this source code is governed by a BSD-style license that
14702 // can be found in the LICENSE file.
14703 //
14704@@ -9,7 +9,7 @@
14705 // implementations. See the translator.README.txt file in the tools directory
14706 // for more information.
14707 //
14708-// $hash=aafa509263c356c67b39ba0b5ad3fde290799853$
14709+// $hash=4244b2b416ab896697de189d6c14d49df41d8dd5$
14710 //
14711
14712 #ifndef CEF_LIBCEF_DLL_CPPTOC_MEDIA_SINK_DEVICE_INFO_CALLBACK_CPPTOC_H_
14713diff --git a/cef/libcef_dll/cpptoc/media_source_cpptoc.cc b/cef/libcef_dll/cpptoc/media_source_cpptoc.cc
14714index 2909de2974..4697d0682b 100644
14715--- a/cef/libcef_dll/cpptoc/media_source_cpptoc.cc
14716+++ b/cef/libcef_dll/cpptoc/media_source_cpptoc.cc
14717@@ -1,4 +1,4 @@
14718-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14719+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14720 // reserved. Use of this source code is governed by a BSD-style license that
14721 // can be found in the LICENSE file.
14722 //
14723@@ -9,7 +9,7 @@
14724 // implementations. See the translator.README.txt file in the tools directory
14725 // for more information.
14726 //
14727-// $hash=ea934494226ae5a1bb4cbeb26d212b7efabf3e50$
14728+// $hash=91e3e2f2fb4914cbe8df7a30938f728a3f147fed$
14729 //
14730
14731 #include "libcef_dll/cpptoc/media_source_cpptoc.h"
14732diff --git a/cef/libcef_dll/cpptoc/media_source_cpptoc.h b/cef/libcef_dll/cpptoc/media_source_cpptoc.h
14733index 6a5bc61dcc..903e7cc593 100644
14734--- a/cef/libcef_dll/cpptoc/media_source_cpptoc.h
14735+++ b/cef/libcef_dll/cpptoc/media_source_cpptoc.h
14736@@ -1,4 +1,4 @@
14737-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14738+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14739 // reserved. Use of this source code is governed by a BSD-style license that
14740 // can be found in the LICENSE file.
14741 //
14742@@ -9,7 +9,7 @@
14743 // implementations. See the translator.README.txt file in the tools directory
14744 // for more information.
14745 //
14746-// $hash=62fa6ace7c43ac1a9fe6bf9dd62788c55ceb90f2$
14747+// $hash=4188fa2250ae3351fc7779cb35dfef4eabbf500e$
14748 //
14749
14750 #ifndef CEF_LIBCEF_DLL_CPPTOC_MEDIA_SOURCE_CPPTOC_H_
14751diff --git a/cef/libcef_dll/cpptoc/menu_model_cpptoc.cc b/cef/libcef_dll/cpptoc/menu_model_cpptoc.cc
14752index 6011e8ebca..809b218473 100644
14753--- a/cef/libcef_dll/cpptoc/menu_model_cpptoc.cc
14754+++ b/cef/libcef_dll/cpptoc/menu_model_cpptoc.cc
14755@@ -1,4 +1,4 @@
14756-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14757+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14758 // reserved. Use of this source code is governed by a BSD-style license that
14759 // can be found in the LICENSE file.
14760 //
14761@@ -9,7 +9,7 @@
14762 // implementations. See the translator.README.txt file in the tools directory
14763 // for more information.
14764 //
14765-// $hash=b07972813a8b9cc4388e5695ce42be1bd426b201$
14766+// $hash=587be50ef3aefc00fadcf6fec431ebecc305b3eb$
14767 //
14768
14769 #include "libcef_dll/cpptoc/menu_model_cpptoc.h"
14770diff --git a/cef/libcef_dll/cpptoc/menu_model_cpptoc.h b/cef/libcef_dll/cpptoc/menu_model_cpptoc.h
14771index 2c96aa31b9..f8882f06df 100644
14772--- a/cef/libcef_dll/cpptoc/menu_model_cpptoc.h
14773+++ b/cef/libcef_dll/cpptoc/menu_model_cpptoc.h
14774@@ -1,4 +1,4 @@
14775-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14776+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14777 // reserved. Use of this source code is governed by a BSD-style license that
14778 // can be found in the LICENSE file.
14779 //
14780@@ -9,7 +9,7 @@
14781 // implementations. See the translator.README.txt file in the tools directory
14782 // for more information.
14783 //
14784-// $hash=f6d8870cf5c1b9754833f07f8af3a8eb27272bbc$
14785+// $hash=8c46e7f774742f9834a61bc7657fdc03a0ed580c$
14786 //
14787
14788 #ifndef CEF_LIBCEF_DLL_CPPTOC_MENU_MODEL_CPPTOC_H_
14789diff --git a/cef/libcef_dll/cpptoc/menu_model_delegate_cpptoc.cc b/cef/libcef_dll/cpptoc/menu_model_delegate_cpptoc.cc
14790index 895a97bf0b..ecc7682476 100644
14791--- a/cef/libcef_dll/cpptoc/menu_model_delegate_cpptoc.cc
14792+++ b/cef/libcef_dll/cpptoc/menu_model_delegate_cpptoc.cc
14793@@ -1,4 +1,4 @@
14794-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14795+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14796 // reserved. Use of this source code is governed by a BSD-style license that
14797 // can be found in the LICENSE file.
14798 //
14799@@ -9,7 +9,7 @@
14800 // implementations. See the translator.README.txt file in the tools directory
14801 // for more information.
14802 //
14803-// $hash=a933c4e3784f03b6cd290387ae2c8377ac74c8b6$
14804+// $hash=d46082f24a6ad01677700ac68ad424cc4951efed$
14805 //
14806
14807 #include "libcef_dll/cpptoc/menu_model_delegate_cpptoc.h"
14808diff --git a/cef/libcef_dll/cpptoc/menu_model_delegate_cpptoc.h b/cef/libcef_dll/cpptoc/menu_model_delegate_cpptoc.h
14809index 42db61797e..4f4a4e749f 100644
14810--- a/cef/libcef_dll/cpptoc/menu_model_delegate_cpptoc.h
14811+++ b/cef/libcef_dll/cpptoc/menu_model_delegate_cpptoc.h
14812@@ -1,4 +1,4 @@
14813-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14814+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14815 // reserved. Use of this source code is governed by a BSD-style license that
14816 // can be found in the LICENSE file.
14817 //
14818@@ -9,7 +9,7 @@
14819 // implementations. See the translator.README.txt file in the tools directory
14820 // for more information.
14821 //
14822-// $hash=49e74e666689969a5accd5ab3a99e2f0341a9664$
14823+// $hash=c48cb7ff4b3e506b4e1ca8b1442bfe91d260ec67$
14824 //
14825
14826 #ifndef CEF_LIBCEF_DLL_CPPTOC_MENU_MODEL_DELEGATE_CPPTOC_H_
14827diff --git a/cef/libcef_dll/cpptoc/navigation_entry_cpptoc.cc b/cef/libcef_dll/cpptoc/navigation_entry_cpptoc.cc
14828index d251cdd398..9db40c38fa 100644
14829--- a/cef/libcef_dll/cpptoc/navigation_entry_cpptoc.cc
14830+++ b/cef/libcef_dll/cpptoc/navigation_entry_cpptoc.cc
14831@@ -1,4 +1,4 @@
14832-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14833+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14834 // reserved. Use of this source code is governed by a BSD-style license that
14835 // can be found in the LICENSE file.
14836 //
14837@@ -9,7 +9,7 @@
14838 // implementations. See the translator.README.txt file in the tools directory
14839 // for more information.
14840 //
14841-// $hash=87427c3e4da420f7735c6932d287234b30647293$
14842+// $hash=081579d10d7dd1ad8906d54350c2b63f97930fd2$
14843 //
14844
14845 #include "libcef_dll/cpptoc/navigation_entry_cpptoc.h"
14846diff --git a/cef/libcef_dll/cpptoc/navigation_entry_cpptoc.h b/cef/libcef_dll/cpptoc/navigation_entry_cpptoc.h
14847index 8d4a6845a5..f4857ed61e 100644
14848--- a/cef/libcef_dll/cpptoc/navigation_entry_cpptoc.h
14849+++ b/cef/libcef_dll/cpptoc/navigation_entry_cpptoc.h
14850@@ -1,4 +1,4 @@
14851-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14852+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14853 // reserved. Use of this source code is governed by a BSD-style license that
14854 // can be found in the LICENSE file.
14855 //
14856@@ -9,7 +9,7 @@
14857 // implementations. See the translator.README.txt file in the tools directory
14858 // for more information.
14859 //
14860-// $hash=d346b124edf760018dc1f8cb852e20684a5a9223$
14861+// $hash=888591dac662cceb022bc320c159fcba58fc6e24$
14862 //
14863
14864 #ifndef CEF_LIBCEF_DLL_CPPTOC_NAVIGATION_ENTRY_CPPTOC_H_
14865diff --git a/cef/libcef_dll/cpptoc/navigation_entry_visitor_cpptoc.cc b/cef/libcef_dll/cpptoc/navigation_entry_visitor_cpptoc.cc
14866index a048660853..3fe2dba37c 100644
14867--- a/cef/libcef_dll/cpptoc/navigation_entry_visitor_cpptoc.cc
14868+++ b/cef/libcef_dll/cpptoc/navigation_entry_visitor_cpptoc.cc
14869@@ -1,4 +1,4 @@
14870-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14871+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14872 // reserved. Use of this source code is governed by a BSD-style license that
14873 // can be found in the LICENSE file.
14874 //
14875@@ -9,7 +9,7 @@
14876 // implementations. See the translator.README.txt file in the tools directory
14877 // for more information.
14878 //
14879-// $hash=c27e2f2b230edc452cd99942da0d93f6fd8e36ac$
14880+// $hash=dc5e1a5dece19a5168915d1a6816ac4a52c1078f$
14881 //
14882
14883 #include "libcef_dll/cpptoc/navigation_entry_visitor_cpptoc.h"
14884diff --git a/cef/libcef_dll/cpptoc/navigation_entry_visitor_cpptoc.h b/cef/libcef_dll/cpptoc/navigation_entry_visitor_cpptoc.h
14885index 267885b31b..30c02d6f87 100644
14886--- a/cef/libcef_dll/cpptoc/navigation_entry_visitor_cpptoc.h
14887+++ b/cef/libcef_dll/cpptoc/navigation_entry_visitor_cpptoc.h
14888@@ -1,4 +1,4 @@
14889-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14890+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14891 // reserved. Use of this source code is governed by a BSD-style license that
14892 // can be found in the LICENSE file.
14893 //
14894@@ -9,7 +9,7 @@
14895 // implementations. See the translator.README.txt file in the tools directory
14896 // for more information.
14897 //
14898-// $hash=5137a6b5ed8f29153a81a4768e3f06b6a64131c4$
14899+// $hash=112f7c12c88d09e4d300cd3d8bf1f72b1be54596$
14900 //
14901
14902 #ifndef CEF_LIBCEF_DLL_CPPTOC_NAVIGATION_ENTRY_VISITOR_CPPTOC_H_
14903diff --git a/cef/libcef_dll/cpptoc/pdf_print_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/pdf_print_callback_cpptoc.cc
14904index 8bfafc9cd1..5a5d810c4f 100644
14905--- a/cef/libcef_dll/cpptoc/pdf_print_callback_cpptoc.cc
14906+++ b/cef/libcef_dll/cpptoc/pdf_print_callback_cpptoc.cc
14907@@ -1,4 +1,4 @@
14908-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14909+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14910 // reserved. Use of this source code is governed by a BSD-style license that
14911 // can be found in the LICENSE file.
14912 //
14913@@ -9,7 +9,7 @@
14914 // implementations. See the translator.README.txt file in the tools directory
14915 // for more information.
14916 //
14917-// $hash=367b1db695ac57bee59fa23d156b363e0ca37800$
14918+// $hash=388a87f728a292dc4e2101724656ac09b8fdaa1d$
14919 //
14920
14921 #include "libcef_dll/cpptoc/pdf_print_callback_cpptoc.h"
14922diff --git a/cef/libcef_dll/cpptoc/pdf_print_callback_cpptoc.h b/cef/libcef_dll/cpptoc/pdf_print_callback_cpptoc.h
14923index 4e6581b4de..df0c88723c 100644
14924--- a/cef/libcef_dll/cpptoc/pdf_print_callback_cpptoc.h
14925+++ b/cef/libcef_dll/cpptoc/pdf_print_callback_cpptoc.h
14926@@ -1,4 +1,4 @@
14927-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
14928+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14929 // reserved. Use of this source code is governed by a BSD-style license that
14930 // can be found in the LICENSE file.
14931 //
14932@@ -9,7 +9,7 @@
14933 // implementations. See the translator.README.txt file in the tools directory
14934 // for more information.
14935 //
14936-// $hash=22d6219fd55dd3b6c2f46d45d456e8f39fe32d2b$
14937+// $hash=0dfa6d58ed63c1e3be9992486e404a642df6e32a$
14938 //
14939
14940 #ifndef CEF_LIBCEF_DLL_CPPTOC_PDF_PRINT_CALLBACK_CPPTOC_H_
14941diff --git a/cef/libcef_dll/cpptoc/permission_request_cpptoc.cc b/cef/libcef_dll/cpptoc/permission_request_cpptoc.cc
14942new file mode 100644
14943index 0000000000..4038e2c5cf
14944--- /dev/null
14945+++ b/cef/libcef_dll/cpptoc/permission_request_cpptoc.cc
14946@@ -0,0 +1,117 @@
14947+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
14948+// reserved. Use of this source code is governed by a BSD-style license that
14949+// can be found in the LICENSE file.
14950+//
14951+// ---------------------------------------------------------------------------
14952+//
14953+// This file was generated by the CEF translator tool. If making changes by
14954+// hand only do so within the body of existing method and function
14955+// implementations. See the translator.README.txt file in the tools directory
14956+// for more information.
14957+//
14958+// $hash=a0c1e9d26c0b0129b85719532cd7312019c2d5f3$
14959+//
14960+
14961+#include "libcef_dll/cpptoc/permission_request_cpptoc.h"
14962+#include "libcef_dll/ctocpp/access_request_ctocpp.h"
14963+
14964+namespace {
14965+
14966+// MEMBER FUNCTIONS - Body may be edited by hand.
14967+
14968+void CEF_CALLBACK
14969+permission_request_on_geolocation_show(struct _cef_permission_request_t* self,
14970+                                       const cef_string_t* origin) {
14971+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
14972+
14973+  DCHECK(self);
14974+  if (!self)
14975+    return;
14976+  // Verify param: origin; type: string_byref_const
14977+  DCHECK(origin);
14978+  if (!origin)
14979+    return;
14980+
14981+  // Execute
14982+  CefPermissionRequestCppToC::Get(self)->OnGeolocationShow(CefString(origin));
14983+}
14984+
14985+void CEF_CALLBACK
14986+permission_request_on_geolocation_hide(struct _cef_permission_request_t* self) {
14987+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
14988+
14989+  DCHECK(self);
14990+  if (!self)
14991+    return;
14992+
14993+  // Execute
14994+  CefPermissionRequestCppToC::Get(self)->OnGeolocationHide();
14995+}
14996+
14997+void CEF_CALLBACK
14998+permission_request_on_permission_request(struct _cef_permission_request_t* self,
14999+                                         cef_access_request_t* request) {
15000+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
15001+
15002+  DCHECK(self);
15003+  if (!self)
15004+    return;
15005+  // Verify param: request; type: refptr_diff
15006+  DCHECK(request);
15007+  if (!request)
15008+    return;
15009+
15010+  // Execute
15011+  CefPermissionRequestCppToC::Get(self)->OnPermissionRequest(
15012+      CefAccessRequestCToCpp::Wrap(request));
15013+}
15014+
15015+void CEF_CALLBACK permission_request_on_permission_request_canceled(
15016+    struct _cef_permission_request_t* self,
15017+    cef_access_request_t* request) {
15018+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
15019+
15020+  DCHECK(self);
15021+  if (!self)
15022+    return;
15023+  // Verify param: request; type: refptr_diff
15024+  DCHECK(request);
15025+  if (!request)
15026+    return;
15027+
15028+  // Execute
15029+  CefPermissionRequestCppToC::Get(self)->OnPermissionRequestCanceled(
15030+      CefAccessRequestCToCpp::Wrap(request));
15031+}
15032+
15033+}  // namespace
15034+
15035+// CONSTRUCTOR - Do not edit by hand.
15036+
15037+CefPermissionRequestCppToC::CefPermissionRequestCppToC() {
15038+  GetStruct()->on_geolocation_show = permission_request_on_geolocation_show;
15039+  GetStruct()->on_geolocation_hide = permission_request_on_geolocation_hide;
15040+  GetStruct()->on_permission_request = permission_request_on_permission_request;
15041+  GetStruct()->on_permission_request_canceled =
15042+      permission_request_on_permission_request_canceled;
15043+}
15044+
15045+// DESTRUCTOR - Do not edit by hand.
15046+
15047+CefPermissionRequestCppToC::~CefPermissionRequestCppToC() {}
15048+
15049+template <>
15050+CefRefPtr<CefPermissionRequest> CefCppToCRefCounted<
15051+    CefPermissionRequestCppToC,
15052+    CefPermissionRequest,
15053+    cef_permission_request_t>::UnwrapDerived(CefWrapperType type,
15054+                                             cef_permission_request_t* s) {
15055+  NOTREACHED() << "Unexpected class type: " << type;
15056+  return nullptr;
15057+}
15058+
15059+template <>
15060+CefWrapperType CefCppToCRefCounted<CefPermissionRequestCppToC,
15061+                                   CefPermissionRequest,
15062+                                   cef_permission_request_t>::kWrapperType =
15063+    WT_PERMISSION_REQUEST;
15064diff --git a/cef/libcef_dll/cpptoc/permission_request_cpptoc.h b/cef/libcef_dll/cpptoc/permission_request_cpptoc.h
15065new file mode 100644
15066index 0000000000..fc597ec736
15067--- /dev/null
15068+++ b/cef/libcef_dll/cpptoc/permission_request_cpptoc.h
15069@@ -0,0 +1,38 @@
15070+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15071+// reserved. Use of this source code is governed by a BSD-style license that
15072+// can be found in the LICENSE file.
15073+//
15074+// ---------------------------------------------------------------------------
15075+//
15076+// This file was generated by the CEF translator tool. If making changes by
15077+// hand only do so within the body of existing method and function
15078+// implementations. See the translator.README.txt file in the tools directory
15079+// for more information.
15080+//
15081+// $hash=b4bca43d1905283a291f6df6cf1a15bccf569618$
15082+//
15083+
15084+#ifndef CEF_LIBCEF_DLL_CPPTOC_PERMISSION_REQUEST_CPPTOC_H_
15085+#define CEF_LIBCEF_DLL_CPPTOC_PERMISSION_REQUEST_CPPTOC_H_
15086+#pragma once
15087+
15088+#if !defined(WRAPPING_CEF_SHARED)
15089+#error This file can be included wrapper-side only
15090+#endif
15091+
15092+#include "include/capi/cef_permission_request_capi.h"
15093+#include "include/cef_permission_request.h"
15094+#include "libcef_dll/cpptoc/cpptoc_ref_counted.h"
15095+
15096+// Wrap a C++ class with a C structure.
15097+// This class may be instantiated and accessed wrapper-side only.
15098+class CefPermissionRequestCppToC
15099+    : public CefCppToCRefCounted<CefPermissionRequestCppToC,
15100+                                 CefPermissionRequest,
15101+                                 cef_permission_request_t> {
15102+ public:
15103+  CefPermissionRequestCppToC();
15104+  virtual ~CefPermissionRequestCppToC();
15105+};
15106+
15107+#endif  // CEF_LIBCEF_DLL_CPPTOC_PERMISSION_REQUEST_CPPTOC_H_
15108diff --git a/cef/libcef_dll/cpptoc/post_data_cpptoc.cc b/cef/libcef_dll/cpptoc/post_data_cpptoc.cc
15109index 947a330cf6..2b1d0e145f 100644
15110--- a/cef/libcef_dll/cpptoc/post_data_cpptoc.cc
15111+++ b/cef/libcef_dll/cpptoc/post_data_cpptoc.cc
15112@@ -1,4 +1,4 @@
15113-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15114+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15115 // reserved. Use of this source code is governed by a BSD-style license that
15116 // can be found in the LICENSE file.
15117 //
15118@@ -9,7 +9,7 @@
15119 // implementations. See the translator.README.txt file in the tools directory
15120 // for more information.
15121 //
15122-// $hash=67abcc878fdc07aa0b582231112579ca6ebe8b8a$
15123+// $hash=935efc8f333c6df95b783e1e80bb84aa26d55b9b$
15124 //
15125
15126 #include "libcef_dll/cpptoc/post_data_cpptoc.h"
15127diff --git a/cef/libcef_dll/cpptoc/post_data_cpptoc.h b/cef/libcef_dll/cpptoc/post_data_cpptoc.h
15128index 9fd2970c2f..ff139f20d0 100644
15129--- a/cef/libcef_dll/cpptoc/post_data_cpptoc.h
15130+++ b/cef/libcef_dll/cpptoc/post_data_cpptoc.h
15131@@ -1,4 +1,4 @@
15132-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15133+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15134 // reserved. Use of this source code is governed by a BSD-style license that
15135 // can be found in the LICENSE file.
15136 //
15137@@ -9,7 +9,7 @@
15138 // implementations. See the translator.README.txt file in the tools directory
15139 // for more information.
15140 //
15141-// $hash=79c5dd393effb0d41ce765318f01806c3cd60689$
15142+// $hash=c73c8a6c74113ead0251ca0afb007d2baa02030b$
15143 //
15144
15145 #ifndef CEF_LIBCEF_DLL_CPPTOC_POST_DATA_CPPTOC_H_
15146diff --git a/cef/libcef_dll/cpptoc/post_data_element_cpptoc.cc b/cef/libcef_dll/cpptoc/post_data_element_cpptoc.cc
15147index 2c69cc2516..1dff9418b3 100644
15148--- a/cef/libcef_dll/cpptoc/post_data_element_cpptoc.cc
15149+++ b/cef/libcef_dll/cpptoc/post_data_element_cpptoc.cc
15150@@ -1,4 +1,4 @@
15151-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15152+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15153 // reserved. Use of this source code is governed by a BSD-style license that
15154 // can be found in the LICENSE file.
15155 //
15156@@ -9,7 +9,7 @@
15157 // implementations. See the translator.README.txt file in the tools directory
15158 // for more information.
15159 //
15160-// $hash=e1a562a85bb9c9e50f44c027549f6c62d7d8cc4c$
15161+// $hash=6148547c3504062984362b43db9e95ee68ef1358$
15162 //
15163
15164 #include "libcef_dll/cpptoc/post_data_element_cpptoc.h"
15165diff --git a/cef/libcef_dll/cpptoc/post_data_element_cpptoc.h b/cef/libcef_dll/cpptoc/post_data_element_cpptoc.h
15166index 8a258ef95a..176e3081bf 100644
15167--- a/cef/libcef_dll/cpptoc/post_data_element_cpptoc.h
15168+++ b/cef/libcef_dll/cpptoc/post_data_element_cpptoc.h
15169@@ -1,4 +1,4 @@
15170-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15171+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15172 // reserved. Use of this source code is governed by a BSD-style license that
15173 // can be found in the LICENSE file.
15174 //
15175@@ -9,7 +9,7 @@
15176 // implementations. See the translator.README.txt file in the tools directory
15177 // for more information.
15178 //
15179-// $hash=ad5cfd1bc723af050b7592fdce1b552075700503$
15180+// $hash=e29b5318c16ccbffa354d79176698d1709048e32$
15181 //
15182
15183 #ifndef CEF_LIBCEF_DLL_CPPTOC_POST_DATA_ELEMENT_CPPTOC_H_
15184diff --git a/cef/libcef_dll/cpptoc/print_dialog_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/print_dialog_callback_cpptoc.cc
15185index c5f1dfb92f..ac4a1fbd24 100644
15186--- a/cef/libcef_dll/cpptoc/print_dialog_callback_cpptoc.cc
15187+++ b/cef/libcef_dll/cpptoc/print_dialog_callback_cpptoc.cc
15188@@ -1,4 +1,4 @@
15189-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15190+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15191 // reserved. Use of this source code is governed by a BSD-style license that
15192 // can be found in the LICENSE file.
15193 //
15194@@ -9,7 +9,7 @@
15195 // implementations. See the translator.README.txt file in the tools directory
15196 // for more information.
15197 //
15198-// $hash=3667aba62287be7ba66687ab5ffb17c6de3dce5a$
15199+// $hash=5332b8cb609fa0f5b98e607878678808d21da3a4$
15200 //
15201
15202 #include "libcef_dll/cpptoc/print_dialog_callback_cpptoc.h"
15203diff --git a/cef/libcef_dll/cpptoc/print_dialog_callback_cpptoc.h b/cef/libcef_dll/cpptoc/print_dialog_callback_cpptoc.h
15204index 46bf5c6b9a..f16cff04f2 100644
15205--- a/cef/libcef_dll/cpptoc/print_dialog_callback_cpptoc.h
15206+++ b/cef/libcef_dll/cpptoc/print_dialog_callback_cpptoc.h
15207@@ -1,4 +1,4 @@
15208-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15209+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15210 // reserved. Use of this source code is governed by a BSD-style license that
15211 // can be found in the LICENSE file.
15212 //
15213@@ -9,7 +9,7 @@
15214 // implementations. See the translator.README.txt file in the tools directory
15215 // for more information.
15216 //
15217-// $hash=b289d0263d8851dcca9cb4c786e7a1c3802670ce$
15218+// $hash=88e44e22bb56d51ba9a60f38f59b89bb3e372748$
15219 //
15220
15221 #ifndef CEF_LIBCEF_DLL_CPPTOC_PRINT_DIALOG_CALLBACK_CPPTOC_H_
15222diff --git a/cef/libcef_dll/cpptoc/print_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/print_handler_cpptoc.cc
15223index ebfdcd5127..dd6c36379e 100644
15224--- a/cef/libcef_dll/cpptoc/print_handler_cpptoc.cc
15225+++ b/cef/libcef_dll/cpptoc/print_handler_cpptoc.cc
15226@@ -1,4 +1,4 @@
15227-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15228+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15229 // reserved. Use of this source code is governed by a BSD-style license that
15230 // can be found in the LICENSE file.
15231 //
15232@@ -9,7 +9,7 @@
15233 // implementations. See the translator.README.txt file in the tools directory
15234 // for more information.
15235 //
15236-// $hash=15d1e044a5bc40ca25c72f070a9b996907c4c0cb$
15237+// $hash=9c26e4bf9952a26541915f64dad82080f09dfd58$
15238 //
15239
15240 #include "libcef_dll/cpptoc/print_handler_cpptoc.h"
15241diff --git a/cef/libcef_dll/cpptoc/print_handler_cpptoc.h b/cef/libcef_dll/cpptoc/print_handler_cpptoc.h
15242index 068178739d..da73686680 100644
15243--- a/cef/libcef_dll/cpptoc/print_handler_cpptoc.h
15244+++ b/cef/libcef_dll/cpptoc/print_handler_cpptoc.h
15245@@ -1,4 +1,4 @@
15246-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15247+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15248 // reserved. Use of this source code is governed by a BSD-style license that
15249 // can be found in the LICENSE file.
15250 //
15251@@ -9,7 +9,7 @@
15252 // implementations. See the translator.README.txt file in the tools directory
15253 // for more information.
15254 //
15255-// $hash=525179c2c2bf4727855e0fa8610fba5ec050b19d$
15256+// $hash=49bb73be2c56a31fff2e88875360591dd31bdd8c$
15257 //
15258
15259 #ifndef CEF_LIBCEF_DLL_CPPTOC_PRINT_HANDLER_CPPTOC_H_
15260diff --git a/cef/libcef_dll/cpptoc/print_job_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/print_job_callback_cpptoc.cc
15261index 76fa51739f..45ec93c715 100644
15262--- a/cef/libcef_dll/cpptoc/print_job_callback_cpptoc.cc
15263+++ b/cef/libcef_dll/cpptoc/print_job_callback_cpptoc.cc
15264@@ -1,4 +1,4 @@
15265-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15266+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15267 // reserved. Use of this source code is governed by a BSD-style license that
15268 // can be found in the LICENSE file.
15269 //
15270@@ -9,7 +9,7 @@
15271 // implementations. See the translator.README.txt file in the tools directory
15272 // for more information.
15273 //
15274-// $hash=0917dcc9b47dd275751465207eb18b8858ca5f08$
15275+// $hash=3becd112f5c17b36328e77fcdcd296cdf73291a3$
15276 //
15277
15278 #include "libcef_dll/cpptoc/print_job_callback_cpptoc.h"
15279diff --git a/cef/libcef_dll/cpptoc/print_job_callback_cpptoc.h b/cef/libcef_dll/cpptoc/print_job_callback_cpptoc.h
15280index 9a87766e6c..ec169ba4a0 100644
15281--- a/cef/libcef_dll/cpptoc/print_job_callback_cpptoc.h
15282+++ b/cef/libcef_dll/cpptoc/print_job_callback_cpptoc.h
15283@@ -1,4 +1,4 @@
15284-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15285+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15286 // reserved. Use of this source code is governed by a BSD-style license that
15287 // can be found in the LICENSE file.
15288 //
15289@@ -9,7 +9,7 @@
15290 // implementations. See the translator.README.txt file in the tools directory
15291 // for more information.
15292 //
15293-// $hash=f25c991aa9f03e084f4e8765049c77479fae971f$
15294+// $hash=d3c680caf88e14fa8cd3c846fe44870900f82ea1$
15295 //
15296
15297 #ifndef CEF_LIBCEF_DLL_CPPTOC_PRINT_JOB_CALLBACK_CPPTOC_H_
15298diff --git a/cef/libcef_dll/cpptoc/print_settings_cpptoc.cc b/cef/libcef_dll/cpptoc/print_settings_cpptoc.cc
15299index 61d355b240..4138aaf281 100644
15300--- a/cef/libcef_dll/cpptoc/print_settings_cpptoc.cc
15301+++ b/cef/libcef_dll/cpptoc/print_settings_cpptoc.cc
15302@@ -1,4 +1,4 @@
15303-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15304+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15305 // reserved. Use of this source code is governed by a BSD-style license that
15306 // can be found in the LICENSE file.
15307 //
15308@@ -9,7 +9,7 @@
15309 // implementations. See the translator.README.txt file in the tools directory
15310 // for more information.
15311 //
15312-// $hash=d091416dceb419a83f57451aa8681bdf130fc477$
15313+// $hash=8840518039eff950764302105148c5da0b0c996a$
15314 //
15315
15316 #include "libcef_dll/cpptoc/print_settings_cpptoc.h"
15317diff --git a/cef/libcef_dll/cpptoc/print_settings_cpptoc.h b/cef/libcef_dll/cpptoc/print_settings_cpptoc.h
15318index eda0806a9e..6e6eea2140 100644
15319--- a/cef/libcef_dll/cpptoc/print_settings_cpptoc.h
15320+++ b/cef/libcef_dll/cpptoc/print_settings_cpptoc.h
15321@@ -1,4 +1,4 @@
15322-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15323+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15324 // reserved. Use of this source code is governed by a BSD-style license that
15325 // can be found in the LICENSE file.
15326 //
15327@@ -9,7 +9,7 @@
15328 // implementations. See the translator.README.txt file in the tools directory
15329 // for more information.
15330 //
15331-// $hash=5b1890f35e0a8f01c5c9bac48f8c2e42861d57cf$
15332+// $hash=ab8680da4bc909d2c1a6cf723fafc1a561bfeb44$
15333 //
15334
15335 #ifndef CEF_LIBCEF_DLL_CPPTOC_PRINT_SETTINGS_CPPTOC_H_
15336diff --git a/cef/libcef_dll/cpptoc/process_message_cpptoc.cc b/cef/libcef_dll/cpptoc/process_message_cpptoc.cc
15337index 835700840a..f6473634e0 100644
15338--- a/cef/libcef_dll/cpptoc/process_message_cpptoc.cc
15339+++ b/cef/libcef_dll/cpptoc/process_message_cpptoc.cc
15340@@ -1,4 +1,4 @@
15341-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15342+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15343 // reserved. Use of this source code is governed by a BSD-style license that
15344 // can be found in the LICENSE file.
15345 //
15346@@ -9,7 +9,7 @@
15347 // implementations. See the translator.README.txt file in the tools directory
15348 // for more information.
15349 //
15350-// $hash=b3ab263fc6c8dc30dc97b56bbc8d32cc35dc3847$
15351+// $hash=b63f665e68e4dc6269c3e88b81068190ea90abb3$
15352 //
15353
15354 #include "libcef_dll/cpptoc/process_message_cpptoc.h"
15355diff --git a/cef/libcef_dll/cpptoc/process_message_cpptoc.h b/cef/libcef_dll/cpptoc/process_message_cpptoc.h
15356index 583a61bb44..76f2c5d97b 100644
15357--- a/cef/libcef_dll/cpptoc/process_message_cpptoc.h
15358+++ b/cef/libcef_dll/cpptoc/process_message_cpptoc.h
15359@@ -1,4 +1,4 @@
15360-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15361+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15362 // reserved. Use of this source code is governed by a BSD-style license that
15363 // can be found in the LICENSE file.
15364 //
15365@@ -9,7 +9,7 @@
15366 // implementations. See the translator.README.txt file in the tools directory
15367 // for more information.
15368 //
15369-// $hash=fefd94ebe8945a74e786c9b904f23b376ddb9f50$
15370+// $hash=e70a96835042a2ebf0a60f2130f31d24f1ca59fd$
15371 //
15372
15373 #ifndef CEF_LIBCEF_DLL_CPPTOC_PROCESS_MESSAGE_CPPTOC_H_
15374diff --git a/cef/libcef_dll/cpptoc/read_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/read_handler_cpptoc.cc
15375index 4616c5827b..ca8ec58e35 100644
15376--- a/cef/libcef_dll/cpptoc/read_handler_cpptoc.cc
15377+++ b/cef/libcef_dll/cpptoc/read_handler_cpptoc.cc
15378@@ -1,4 +1,4 @@
15379-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15380+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15381 // reserved. Use of this source code is governed by a BSD-style license that
15382 // can be found in the LICENSE file.
15383 //
15384@@ -9,7 +9,7 @@
15385 // implementations. See the translator.README.txt file in the tools directory
15386 // for more information.
15387 //
15388-// $hash=468a8a6d744062b47fc004adeb279e6beb2bbb54$
15389+// $hash=a0976edc09e822700d8f402b2dae7af4c434d86f$
15390 //
15391
15392 #include "libcef_dll/cpptoc/read_handler_cpptoc.h"
15393diff --git a/cef/libcef_dll/cpptoc/read_handler_cpptoc.h b/cef/libcef_dll/cpptoc/read_handler_cpptoc.h
15394index 64799edc97..eda92ed97c 100644
15395--- a/cef/libcef_dll/cpptoc/read_handler_cpptoc.h
15396+++ b/cef/libcef_dll/cpptoc/read_handler_cpptoc.h
15397@@ -1,4 +1,4 @@
15398-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15399+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15400 // reserved. Use of this source code is governed by a BSD-style license that
15401 // can be found in the LICENSE file.
15402 //
15403@@ -9,7 +9,7 @@
15404 // implementations. See the translator.README.txt file in the tools directory
15405 // for more information.
15406 //
15407-// $hash=e68ee258e8059cc525294b21556ea97751c35d1f$
15408+// $hash=3c16def2c698c26a175b1087db819d3894a264fa$
15409 //
15410
15411 #ifndef CEF_LIBCEF_DLL_CPPTOC_READ_HANDLER_CPPTOC_H_
15412diff --git a/cef/libcef_dll/cpptoc/register_cdm_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/register_cdm_callback_cpptoc.cc
15413index ee783c953c..d93b0ba0a9 100644
15414--- a/cef/libcef_dll/cpptoc/register_cdm_callback_cpptoc.cc
15415+++ b/cef/libcef_dll/cpptoc/register_cdm_callback_cpptoc.cc
15416@@ -1,4 +1,4 @@
15417-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15418+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15419 // reserved. Use of this source code is governed by a BSD-style license that
15420 // can be found in the LICENSE file.
15421 //
15422@@ -9,7 +9,7 @@
15423 // implementations. See the translator.README.txt file in the tools directory
15424 // for more information.
15425 //
15426-// $hash=5f7db6dda8ac868e8ec94b93e3ae7d2dd7d0cf64$
15427+// $hash=4c77ff49deadd30ff0af3ead43a916848931fb1b$
15428 //
15429
15430 #include "libcef_dll/cpptoc/register_cdm_callback_cpptoc.h"
15431diff --git a/cef/libcef_dll/cpptoc/register_cdm_callback_cpptoc.h b/cef/libcef_dll/cpptoc/register_cdm_callback_cpptoc.h
15432index 7c9bbced6f..a121545126 100644
15433--- a/cef/libcef_dll/cpptoc/register_cdm_callback_cpptoc.h
15434+++ b/cef/libcef_dll/cpptoc/register_cdm_callback_cpptoc.h
15435@@ -1,4 +1,4 @@
15436-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15437+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15438 // reserved. Use of this source code is governed by a BSD-style license that
15439 // can be found in the LICENSE file.
15440 //
15441@@ -9,7 +9,7 @@
15442 // implementations. See the translator.README.txt file in the tools directory
15443 // for more information.
15444 //
15445-// $hash=9817a192fb9476a843c3ccd0467e781adf426b91$
15446+// $hash=a5d158768dd2928b13a86e1023ce218db69e8dd9$
15447 //
15448
15449 #ifndef CEF_LIBCEF_DLL_CPPTOC_REGISTER_CDM_CALLBACK_CPPTOC_H_
15450diff --git a/cef/libcef_dll/cpptoc/registration_cpptoc.cc b/cef/libcef_dll/cpptoc/registration_cpptoc.cc
15451index 78c8fe6579..5d959db487 100644
15452--- a/cef/libcef_dll/cpptoc/registration_cpptoc.cc
15453+++ b/cef/libcef_dll/cpptoc/registration_cpptoc.cc
15454@@ -1,4 +1,4 @@
15455-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15456+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15457 // reserved. Use of this source code is governed by a BSD-style license that
15458 // can be found in the LICENSE file.
15459 //
15460@@ -9,7 +9,7 @@
15461 // implementations. See the translator.README.txt file in the tools directory
15462 // for more information.
15463 //
15464-// $hash=ec2642c7c8adb8df19ecc2a8a4ae1e8be5c203a0$
15465+// $hash=bfa5ab4142b6fe56939a45241a39bb74f3a84acb$
15466 //
15467
15468 #include "libcef_dll/cpptoc/registration_cpptoc.h"
15469diff --git a/cef/libcef_dll/cpptoc/registration_cpptoc.h b/cef/libcef_dll/cpptoc/registration_cpptoc.h
15470index 0943ae4344..e623e5f7d4 100644
15471--- a/cef/libcef_dll/cpptoc/registration_cpptoc.h
15472+++ b/cef/libcef_dll/cpptoc/registration_cpptoc.h
15473@@ -1,4 +1,4 @@
15474-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15475+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15476 // reserved. Use of this source code is governed by a BSD-style license that
15477 // can be found in the LICENSE file.
15478 //
15479@@ -9,7 +9,7 @@
15480 // implementations. See the translator.README.txt file in the tools directory
15481 // for more information.
15482 //
15483-// $hash=e417a268c700c6ba91f9b00484a11d105d884dd0$
15484+// $hash=edd002ac63a0564820617ad44c5c30f9674b8122$
15485 //
15486
15487 #ifndef CEF_LIBCEF_DLL_CPPTOC_REGISTRATION_CPPTOC_H_
15488diff --git a/cef/libcef_dll/cpptoc/render_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/render_handler_cpptoc.cc
15489index ebe577ee5d..424040a880 100644
15490--- a/cef/libcef_dll/cpptoc/render_handler_cpptoc.cc
15491+++ b/cef/libcef_dll/cpptoc/render_handler_cpptoc.cc
15492@@ -1,4 +1,4 @@
15493-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15494+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15495 // reserved. Use of this source code is governed by a BSD-style license that
15496 // can be found in the LICENSE file.
15497 //
15498@@ -9,7 +9,7 @@
15499 // implementations. See the translator.README.txt file in the tools directory
15500 // for more information.
15501 //
15502-// $hash=f6410f1d692fb2ccbd0cae2e388db6ee8b22cc1e$
15503+// $hash=f2d63ae1b93668305c70a02fec40da44f9a0ffcd$
15504 //
15505
15506 #include "libcef_dll/cpptoc/render_handler_cpptoc.h"
15507@@ -399,6 +399,28 @@ render_handler_on_scroll_offset_changed(struct _cef_render_handler_t* self,
15508       CefBrowserCToCpp::Wrap(browser), x, y);
15509 }
15510
15511+void CEF_CALLBACK
15512+render_handler_on_root_layer_changed(struct _cef_render_handler_t* self,
15513+                                     cef_browser_t* browser,
15514+                                     int height,
15515+                                     int width) {
15516+  shutdown_checker::AssertNotShutdown();
15517+
15518+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
15519+
15520+  DCHECK(self);
15521+  if (!self)
15522+    return;
15523+  // Verify param: browser; type: refptr_diff
15524+  DCHECK(browser);
15525+  if (!browser)
15526+    return;
15527+
15528+  // Execute
15529+  CefRenderHandlerCppToC::Get(self)->OnRootLayerChanged(
15530+      CefBrowserCToCpp::Wrap(browser), height, width);
15531+}
15532+
15533 void CEF_CALLBACK render_handler_on_ime_composition_range_changed(
15534     struct _cef_render_handler_t* self,
15535     cef_browser_t* browser,
15536@@ -508,6 +530,7 @@ CefRenderHandlerCppToC::CefRenderHandlerCppToC() {
15537   GetStruct()->update_drag_cursor = render_handler_update_drag_cursor;
15538   GetStruct()->on_scroll_offset_changed =
15539       render_handler_on_scroll_offset_changed;
15540+  GetStruct()->on_root_layer_changed = render_handler_on_root_layer_changed;
15541   GetStruct()->on_ime_composition_range_changed =
15542       render_handler_on_ime_composition_range_changed;
15543   GetStruct()->on_text_selection_changed =
15544diff --git a/cef/libcef_dll/cpptoc/render_handler_cpptoc.h b/cef/libcef_dll/cpptoc/render_handler_cpptoc.h
15545index 70ea47d510..c213ddf908 100644
15546--- a/cef/libcef_dll/cpptoc/render_handler_cpptoc.h
15547+++ b/cef/libcef_dll/cpptoc/render_handler_cpptoc.h
15548@@ -1,4 +1,4 @@
15549-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15550+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15551 // reserved. Use of this source code is governed by a BSD-style license that
15552 // can be found in the LICENSE file.
15553 //
15554@@ -9,7 +9,7 @@
15555 // implementations. See the translator.README.txt file in the tools directory
15556 // for more information.
15557 //
15558-// $hash=9f3f5fdcfa22ae564d435713479c2cb1b0b17e94$
15559+// $hash=18b7f5398b817f5d20f26aa4e139faa4f91cfe0b$
15560 //
15561
15562 #ifndef CEF_LIBCEF_DLL_CPPTOC_RENDER_HANDLER_CPPTOC_H_
15563diff --git a/cef/libcef_dll/cpptoc/render_process_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/render_process_handler_cpptoc.cc
15564index f9f1aa6c51..b675c9d38e 100644
15565--- a/cef/libcef_dll/cpptoc/render_process_handler_cpptoc.cc
15566+++ b/cef/libcef_dll/cpptoc/render_process_handler_cpptoc.cc
15567@@ -1,4 +1,4 @@
15568-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15569+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15570 // reserved. Use of this source code is governed by a BSD-style license that
15571 // can be found in the LICENSE file.
15572 //
15573@@ -9,7 +9,7 @@
15574 // implementations. See the translator.README.txt file in the tools directory
15575 // for more information.
15576 //
15577-// $hash=4fc8972b57ed97feef5f00dcfa77e32b8d63cb9a$
15578+// $hash=59a7b8ee629ec03f3079c92ebd4feb6e711ec0f2$
15579 //
15580
15581 #include "libcef_dll/cpptoc/render_process_handler_cpptoc.h"
15582diff --git a/cef/libcef_dll/cpptoc/render_process_handler_cpptoc.h b/cef/libcef_dll/cpptoc/render_process_handler_cpptoc.h
15583index 1911161bf3..599203043e 100644
15584--- a/cef/libcef_dll/cpptoc/render_process_handler_cpptoc.h
15585+++ b/cef/libcef_dll/cpptoc/render_process_handler_cpptoc.h
15586@@ -1,4 +1,4 @@
15587-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15588+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15589 // reserved. Use of this source code is governed by a BSD-style license that
15590 // can be found in the LICENSE file.
15591 //
15592@@ -9,7 +9,7 @@
15593 // implementations. See the translator.README.txt file in the tools directory
15594 // for more information.
15595 //
15596-// $hash=9d0edd7e100abdfe53bf0b84a58fbd681d83fe0d$
15597+// $hash=8d832edacd5ccc0baac1314aaa9424ba2ab4837c$
15598 //
15599
15600 #ifndef CEF_LIBCEF_DLL_CPPTOC_RENDER_PROCESS_HANDLER_CPPTOC_H_
15601diff --git a/cef/libcef_dll/cpptoc/request_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/request_callback_cpptoc.cc
15602index 37a7359c21..9e7a0462f8 100644
15603--- a/cef/libcef_dll/cpptoc/request_callback_cpptoc.cc
15604+++ b/cef/libcef_dll/cpptoc/request_callback_cpptoc.cc
15605@@ -1,4 +1,4 @@
15606-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15607+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15608 // reserved. Use of this source code is governed by a BSD-style license that
15609 // can be found in the LICENSE file.
15610 //
15611@@ -9,7 +9,7 @@
15612 // implementations. See the translator.README.txt file in the tools directory
15613 // for more information.
15614 //
15615-// $hash=bee998a59050e372ea10d1ce146532c074b1a3ec$
15616+// $hash=b19244d48f2b415a9a71b27ba76b4986677899d5$
15617 //
15618
15619 #include "libcef_dll/cpptoc/request_callback_cpptoc.h"
15620diff --git a/cef/libcef_dll/cpptoc/request_callback_cpptoc.h b/cef/libcef_dll/cpptoc/request_callback_cpptoc.h
15621index 5c145aeb38..17c35211fb 100644
15622--- a/cef/libcef_dll/cpptoc/request_callback_cpptoc.h
15623+++ b/cef/libcef_dll/cpptoc/request_callback_cpptoc.h
15624@@ -1,4 +1,4 @@
15625-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15626+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15627 // reserved. Use of this source code is governed by a BSD-style license that
15628 // can be found in the LICENSE file.
15629 //
15630@@ -9,7 +9,7 @@
15631 // implementations. See the translator.README.txt file in the tools directory
15632 // for more information.
15633 //
15634-// $hash=bd2b56bd152e80651c9a3de4472891d7cf65b130$
15635+// $hash=29146c480878ee0e015ab1f4bdf87299ffc95a06$
15636 //
15637
15638 #ifndef CEF_LIBCEF_DLL_CPPTOC_REQUEST_CALLBACK_CPPTOC_H_
15639diff --git a/cef/libcef_dll/cpptoc/request_context_cpptoc.cc b/cef/libcef_dll/cpptoc/request_context_cpptoc.cc
15640index fd3d1af8bf..cd3e0f9bb6 100644
15641--- a/cef/libcef_dll/cpptoc/request_context_cpptoc.cc
15642+++ b/cef/libcef_dll/cpptoc/request_context_cpptoc.cc
15643@@ -1,4 +1,4 @@
15644-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15645+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15646 // reserved. Use of this source code is governed by a BSD-style license that
15647 // can be found in the LICENSE file.
15648 //
15649@@ -9,7 +9,7 @@
15650 // implementations. See the translator.README.txt file in the tools directory
15651 // for more information.
15652 //
15653-// $hash=38ae668703b71d27d2bcd7cd9230817edd5b8f41$
15654+// $hash=69c5dc4e787496678696a7aa0f1f5eea80355ea8$
15655 //
15656
15657 #include "libcef_dll/cpptoc/request_context_cpptoc.h"
15658diff --git a/cef/libcef_dll/cpptoc/request_context_cpptoc.h b/cef/libcef_dll/cpptoc/request_context_cpptoc.h
15659index b74c4f0f37..bf9847b8d1 100644
15660--- a/cef/libcef_dll/cpptoc/request_context_cpptoc.h
15661+++ b/cef/libcef_dll/cpptoc/request_context_cpptoc.h
15662@@ -1,4 +1,4 @@
15663-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15664+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15665 // reserved. Use of this source code is governed by a BSD-style license that
15666 // can be found in the LICENSE file.
15667 //
15668@@ -9,7 +9,7 @@
15669 // implementations. See the translator.README.txt file in the tools directory
15670 // for more information.
15671 //
15672-// $hash=f0b104243778fce7d1ada4de1a80311443ba37d4$
15673+// $hash=7350e36d25125a3560d0e0da5b46daa60295c7a7$
15674 //
15675
15676 #ifndef CEF_LIBCEF_DLL_CPPTOC_REQUEST_CONTEXT_CPPTOC_H_
15677diff --git a/cef/libcef_dll/cpptoc/request_context_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/request_context_handler_cpptoc.cc
15678index fe68610a3b..844db087e0 100644
15679--- a/cef/libcef_dll/cpptoc/request_context_handler_cpptoc.cc
15680+++ b/cef/libcef_dll/cpptoc/request_context_handler_cpptoc.cc
15681@@ -1,4 +1,4 @@
15682-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15683+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15684 // reserved. Use of this source code is governed by a BSD-style license that
15685 // can be found in the LICENSE file.
15686 //
15687@@ -9,7 +9,7 @@
15688 // implementations. See the translator.README.txt file in the tools directory
15689 // for more information.
15690 //
15691-// $hash=9172186519dc33742d7c302e7276c5ce8536a95b$
15692+// $hash=1789068218bd055e77d1699cf733cc2769612569$
15693 //
15694
15695 #include "libcef_dll/cpptoc/request_context_handler_cpptoc.h"
15696diff --git a/cef/libcef_dll/cpptoc/request_context_handler_cpptoc.h b/cef/libcef_dll/cpptoc/request_context_handler_cpptoc.h
15697index 3e7fa58fcb..aaa029d91b 100644
15698--- a/cef/libcef_dll/cpptoc/request_context_handler_cpptoc.h
15699+++ b/cef/libcef_dll/cpptoc/request_context_handler_cpptoc.h
15700@@ -1,4 +1,4 @@
15701-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15702+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15703 // reserved. Use of this source code is governed by a BSD-style license that
15704 // can be found in the LICENSE file.
15705 //
15706@@ -9,7 +9,7 @@
15707 // implementations. See the translator.README.txt file in the tools directory
15708 // for more information.
15709 //
15710-// $hash=eee4c56e63dbec7ee8fa2b515b53d274b90c0366$
15711+// $hash=e1cebce8a08c570f02235a53bab5f6aa0b13699c$
15712 //
15713
15714 #ifndef CEF_LIBCEF_DLL_CPPTOC_REQUEST_CONTEXT_HANDLER_CPPTOC_H_
15715diff --git a/cef/libcef_dll/cpptoc/request_cpptoc.cc b/cef/libcef_dll/cpptoc/request_cpptoc.cc
15716index 302afa5ce6..ee7cd8b9be 100644
15717--- a/cef/libcef_dll/cpptoc/request_cpptoc.cc
15718+++ b/cef/libcef_dll/cpptoc/request_cpptoc.cc
15719@@ -1,4 +1,4 @@
15720-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15721+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15722 // reserved. Use of this source code is governed by a BSD-style license that
15723 // can be found in the LICENSE file.
15724 //
15725@@ -9,7 +9,7 @@
15726 // implementations. See the translator.README.txt file in the tools directory
15727 // for more information.
15728 //
15729-// $hash=7c8a996b228efdb02dd4d3d88fc12b58a1f74558$
15730+// $hash=b1a7f857e453a625325a1a2847e60990eecc61ea$
15731 //
15732
15733 #include "libcef_dll/cpptoc/request_cpptoc.h"
15734diff --git a/cef/libcef_dll/cpptoc/request_cpptoc.h b/cef/libcef_dll/cpptoc/request_cpptoc.h
15735index f404dfc140..b93e0ba163 100644
15736--- a/cef/libcef_dll/cpptoc/request_cpptoc.h
15737+++ b/cef/libcef_dll/cpptoc/request_cpptoc.h
15738@@ -1,4 +1,4 @@
15739-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15740+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15741 // reserved. Use of this source code is governed by a BSD-style license that
15742 // can be found in the LICENSE file.
15743 //
15744@@ -9,7 +9,7 @@
15745 // implementations. See the translator.README.txt file in the tools directory
15746 // for more information.
15747 //
15748-// $hash=f090904a66e29e8638eb9868724a4c02e5102594$
15749+// $hash=25a489e9a54195be43325a811956c66f578fbeb0$
15750 //
15751
15752 #ifndef CEF_LIBCEF_DLL_CPPTOC_REQUEST_CPPTOC_H_
15753diff --git a/cef/libcef_dll/cpptoc/request_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/request_handler_cpptoc.cc
15754index 9f4b313f64..001faf062d 100644
15755--- a/cef/libcef_dll/cpptoc/request_handler_cpptoc.cc
15756+++ b/cef/libcef_dll/cpptoc/request_handler_cpptoc.cc
15757@@ -1,4 +1,4 @@
15758-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15759+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15760 // reserved. Use of this source code is governed by a BSD-style license that
15761 // can be found in the LICENSE file.
15762 //
15763@@ -9,7 +9,7 @@
15764 // implementations. See the translator.README.txt file in the tools directory
15765 // for more information.
15766 //
15767-// $hash=baa4e92404f1c0b975c3724e649afb4ef04250f0$
15768+// $hash=d737e87912d409f23e7b078a6c7d56bed2a5df95$
15769 //
15770
15771 #include "libcef_dll/cpptoc/request_handler_cpptoc.h"
15772diff --git a/cef/libcef_dll/cpptoc/request_handler_cpptoc.h b/cef/libcef_dll/cpptoc/request_handler_cpptoc.h
15773index b211145a45..70c502128e 100644
15774--- a/cef/libcef_dll/cpptoc/request_handler_cpptoc.h
15775+++ b/cef/libcef_dll/cpptoc/request_handler_cpptoc.h
15776@@ -1,4 +1,4 @@
15777-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15778+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15779 // reserved. Use of this source code is governed by a BSD-style license that
15780 // can be found in the LICENSE file.
15781 //
15782@@ -9,7 +9,7 @@
15783 // implementations. See the translator.README.txt file in the tools directory
15784 // for more information.
15785 //
15786-// $hash=18317612a895e22529b31aadd74c40698f482a7a$
15787+// $hash=4cda9dc12a20ead4f6889fd26a176da22ca67c50$
15788 //
15789
15790 #ifndef CEF_LIBCEF_DLL_CPPTOC_REQUEST_HANDLER_CPPTOC_H_
15791diff --git a/cef/libcef_dll/cpptoc/resolve_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/resolve_callback_cpptoc.cc
15792index bf3074c637..6ec72fcf3a 100644
15793--- a/cef/libcef_dll/cpptoc/resolve_callback_cpptoc.cc
15794+++ b/cef/libcef_dll/cpptoc/resolve_callback_cpptoc.cc
15795@@ -1,4 +1,4 @@
15796-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15797+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15798 // reserved. Use of this source code is governed by a BSD-style license that
15799 // can be found in the LICENSE file.
15800 //
15801@@ -9,7 +9,7 @@
15802 // implementations. See the translator.README.txt file in the tools directory
15803 // for more information.
15804 //
15805-// $hash=52c60d1a07505b36d99272e58c1b362b03a2af45$
15806+// $hash=d6f5224414a15d32a42ed2862b30c0076d0b5d95$
15807 //
15808
15809 #include "libcef_dll/cpptoc/resolve_callback_cpptoc.h"
15810diff --git a/cef/libcef_dll/cpptoc/resolve_callback_cpptoc.h b/cef/libcef_dll/cpptoc/resolve_callback_cpptoc.h
15811index 46cb01e0df..76e790de03 100644
15812--- a/cef/libcef_dll/cpptoc/resolve_callback_cpptoc.h
15813+++ b/cef/libcef_dll/cpptoc/resolve_callback_cpptoc.h
15814@@ -1,4 +1,4 @@
15815-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15816+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15817 // reserved. Use of this source code is governed by a BSD-style license that
15818 // can be found in the LICENSE file.
15819 //
15820@@ -9,7 +9,7 @@
15821 // implementations. See the translator.README.txt file in the tools directory
15822 // for more information.
15823 //
15824-// $hash=6ea24a272a8125c550aea82b66715d92613312d7$
15825+// $hash=659df5decaf5cab4624f6f15b8bceeed0bd2d228$
15826 //
15827
15828 #ifndef CEF_LIBCEF_DLL_CPPTOC_RESOLVE_CALLBACK_CPPTOC_H_
15829diff --git a/cef/libcef_dll/cpptoc/resource_bundle_cpptoc.cc b/cef/libcef_dll/cpptoc/resource_bundle_cpptoc.cc
15830index 94f794d9de..97ad75f998 100644
15831--- a/cef/libcef_dll/cpptoc/resource_bundle_cpptoc.cc
15832+++ b/cef/libcef_dll/cpptoc/resource_bundle_cpptoc.cc
15833@@ -1,4 +1,4 @@
15834-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15835+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15836 // reserved. Use of this source code is governed by a BSD-style license that
15837 // can be found in the LICENSE file.
15838 //
15839@@ -9,7 +9,7 @@
15840 // implementations. See the translator.README.txt file in the tools directory
15841 // for more information.
15842 //
15843-// $hash=5512a41467d67fd269e9486f48b83febc2700feb$
15844+// $hash=5081aa41e87ea1a44df19f1df060a478b3b902d8$
15845 //
15846
15847 #include "libcef_dll/cpptoc/resource_bundle_cpptoc.h"
15848diff --git a/cef/libcef_dll/cpptoc/resource_bundle_cpptoc.h b/cef/libcef_dll/cpptoc/resource_bundle_cpptoc.h
15849index 5163c4c1e8..429418a493 100644
15850--- a/cef/libcef_dll/cpptoc/resource_bundle_cpptoc.h
15851+++ b/cef/libcef_dll/cpptoc/resource_bundle_cpptoc.h
15852@@ -1,4 +1,4 @@
15853-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15854+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15855 // reserved. Use of this source code is governed by a BSD-style license that
15856 // can be found in the LICENSE file.
15857 //
15858@@ -9,7 +9,7 @@
15859 // implementations. See the translator.README.txt file in the tools directory
15860 // for more information.
15861 //
15862-// $hash=50333b23ddd95f3e6650e517455e0d4245a458dd$
15863+// $hash=808eba3682873dd7b948ed9f572d9960df9a1b2d$
15864 //
15865
15866 #ifndef CEF_LIBCEF_DLL_CPPTOC_RESOURCE_BUNDLE_CPPTOC_H_
15867diff --git a/cef/libcef_dll/cpptoc/resource_bundle_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/resource_bundle_handler_cpptoc.cc
15868index 3648ba1413..8e9a45951a 100644
15869--- a/cef/libcef_dll/cpptoc/resource_bundle_handler_cpptoc.cc
15870+++ b/cef/libcef_dll/cpptoc/resource_bundle_handler_cpptoc.cc
15871@@ -1,4 +1,4 @@
15872-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15873+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15874 // reserved. Use of this source code is governed by a BSD-style license that
15875 // can be found in the LICENSE file.
15876 //
15877@@ -9,7 +9,7 @@
15878 // implementations. See the translator.README.txt file in the tools directory
15879 // for more information.
15880 //
15881-// $hash=7395ebd664ffbbba2b7e4f427159e50c60689cb4$
15882+// $hash=486d1b31ccfd53e10dec622d3ae024c23b50e2c2$
15883 //
15884
15885 #include "libcef_dll/cpptoc/resource_bundle_handler_cpptoc.h"
15886diff --git a/cef/libcef_dll/cpptoc/resource_bundle_handler_cpptoc.h b/cef/libcef_dll/cpptoc/resource_bundle_handler_cpptoc.h
15887index cf2fd6db6d..12d1d945c5 100644
15888--- a/cef/libcef_dll/cpptoc/resource_bundle_handler_cpptoc.h
15889+++ b/cef/libcef_dll/cpptoc/resource_bundle_handler_cpptoc.h
15890@@ -1,4 +1,4 @@
15891-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15892+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15893 // reserved. Use of this source code is governed by a BSD-style license that
15894 // can be found in the LICENSE file.
15895 //
15896@@ -9,7 +9,7 @@
15897 // implementations. See the translator.README.txt file in the tools directory
15898 // for more information.
15899 //
15900-// $hash=58f37dffaf226ab0203e485545ffb8a1a477447c$
15901+// $hash=26b5dfed49b7182c1bdf52f50547ccb26c4850fe$
15902 //
15903
15904 #ifndef CEF_LIBCEF_DLL_CPPTOC_RESOURCE_BUNDLE_HANDLER_CPPTOC_H_
15905diff --git a/cef/libcef_dll/cpptoc/resource_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/resource_handler_cpptoc.cc
15906index 6271aa467d..078bd359c9 100644
15907--- a/cef/libcef_dll/cpptoc/resource_handler_cpptoc.cc
15908+++ b/cef/libcef_dll/cpptoc/resource_handler_cpptoc.cc
15909@@ -1,4 +1,4 @@
15910-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15911+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15912 // reserved. Use of this source code is governed by a BSD-style license that
15913 // can be found in the LICENSE file.
15914 //
15915@@ -9,7 +9,7 @@
15916 // implementations. See the translator.README.txt file in the tools directory
15917 // for more information.
15918 //
15919-// $hash=9d03ddc3b4f887626177014127f9280966904ae2$
15920+// $hash=72d9dc0e438de96161f262353c153c11b76f8ad0$
15921 //
15922
15923 #include "libcef_dll/cpptoc/resource_handler_cpptoc.h"
15924diff --git a/cef/libcef_dll/cpptoc/resource_handler_cpptoc.h b/cef/libcef_dll/cpptoc/resource_handler_cpptoc.h
15925index fb4819f0d3..c3ed893b8d 100644
15926--- a/cef/libcef_dll/cpptoc/resource_handler_cpptoc.h
15927+++ b/cef/libcef_dll/cpptoc/resource_handler_cpptoc.h
15928@@ -1,4 +1,4 @@
15929-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15930+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15931 // reserved. Use of this source code is governed by a BSD-style license that
15932 // can be found in the LICENSE file.
15933 //
15934@@ -9,7 +9,7 @@
15935 // implementations. See the translator.README.txt file in the tools directory
15936 // for more information.
15937 //
15938-// $hash=ca46bb20cee655f78932b73a336a27e49d1dcbee$
15939+// $hash=a2b9dcc0ff22bd3f1b0ecb70a3e10b6c1c7a0ed7$
15940 //
15941
15942 #ifndef CEF_LIBCEF_DLL_CPPTOC_RESOURCE_HANDLER_CPPTOC_H_
15943diff --git a/cef/libcef_dll/cpptoc/resource_read_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/resource_read_callback_cpptoc.cc
15944index ed15b7de69..baffa65472 100644
15945--- a/cef/libcef_dll/cpptoc/resource_read_callback_cpptoc.cc
15946+++ b/cef/libcef_dll/cpptoc/resource_read_callback_cpptoc.cc
15947@@ -1,4 +1,4 @@
15948-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15949+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15950 // reserved. Use of this source code is governed by a BSD-style license that
15951 // can be found in the LICENSE file.
15952 //
15953@@ -9,7 +9,7 @@
15954 // implementations. See the translator.README.txt file in the tools directory
15955 // for more information.
15956 //
15957-// $hash=646cdf4de0b0ae6bbf28c229a2eec6f1b56f5455$
15958+// $hash=9d07f53404d3b90d1e386e37b0ed4535afb57b39$
15959 //
15960
15961 #include "libcef_dll/cpptoc/resource_read_callback_cpptoc.h"
15962diff --git a/cef/libcef_dll/cpptoc/resource_read_callback_cpptoc.h b/cef/libcef_dll/cpptoc/resource_read_callback_cpptoc.h
15963index 3ed745b852..c1b4d1a597 100644
15964--- a/cef/libcef_dll/cpptoc/resource_read_callback_cpptoc.h
15965+++ b/cef/libcef_dll/cpptoc/resource_read_callback_cpptoc.h
15966@@ -1,4 +1,4 @@
15967-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15968+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15969 // reserved. Use of this source code is governed by a BSD-style license that
15970 // can be found in the LICENSE file.
15971 //
15972@@ -9,7 +9,7 @@
15973 // implementations. See the translator.README.txt file in the tools directory
15974 // for more information.
15975 //
15976-// $hash=8218cb5006c7b8e2e793135c32a3f88d525f218b$
15977+// $hash=7cd5016181dd61511cb1c1d3176d8aff5e5fba82$
15978 //
15979
15980 #ifndef CEF_LIBCEF_DLL_CPPTOC_RESOURCE_READ_CALLBACK_CPPTOC_H_
15981diff --git a/cef/libcef_dll/cpptoc/resource_request_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/resource_request_handler_cpptoc.cc
15982index 5c758bb417..3ffa101a39 100644
15983--- a/cef/libcef_dll/cpptoc/resource_request_handler_cpptoc.cc
15984+++ b/cef/libcef_dll/cpptoc/resource_request_handler_cpptoc.cc
15985@@ -1,4 +1,4 @@
15986-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
15987+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
15988 // reserved. Use of this source code is governed by a BSD-style license that
15989 // can be found in the LICENSE file.
15990 //
15991@@ -9,7 +9,7 @@
15992 // implementations. See the translator.README.txt file in the tools directory
15993 // for more information.
15994 //
15995-// $hash=1009f2ed21a03d2a6e47372def61b0696055d4e1$
15996+// $hash=5ad46295870e861e60d7097341aeac4f7a279076$
15997 //
15998
15999 #include "libcef_dll/cpptoc/resource_request_handler_cpptoc.h"
16000diff --git a/cef/libcef_dll/cpptoc/resource_request_handler_cpptoc.h b/cef/libcef_dll/cpptoc/resource_request_handler_cpptoc.h
16001index bbfffde4e7..813e38e8d4 100644
16002--- a/cef/libcef_dll/cpptoc/resource_request_handler_cpptoc.h
16003+++ b/cef/libcef_dll/cpptoc/resource_request_handler_cpptoc.h
16004@@ -1,4 +1,4 @@
16005-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16006+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16007 // reserved. Use of this source code is governed by a BSD-style license that
16008 // can be found in the LICENSE file.
16009 //
16010@@ -9,7 +9,7 @@
16011 // implementations. See the translator.README.txt file in the tools directory
16012 // for more information.
16013 //
16014-// $hash=f48fef57eb0141917d0ba9243a1d9962fbcffc9e$
16015+// $hash=a8c2b0d3df6a4c6b336084598084d14f62860a53$
16016 //
16017
16018 #ifndef CEF_LIBCEF_DLL_CPPTOC_RESOURCE_REQUEST_HANDLER_CPPTOC_H_
16019diff --git a/cef/libcef_dll/cpptoc/resource_skip_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/resource_skip_callback_cpptoc.cc
16020index 7288e19baa..41bbad0322 100644
16021--- a/cef/libcef_dll/cpptoc/resource_skip_callback_cpptoc.cc
16022+++ b/cef/libcef_dll/cpptoc/resource_skip_callback_cpptoc.cc
16023@@ -1,4 +1,4 @@
16024-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16025+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16026 // reserved. Use of this source code is governed by a BSD-style license that
16027 // can be found in the LICENSE file.
16028 //
16029@@ -9,7 +9,7 @@
16030 // implementations. See the translator.README.txt file in the tools directory
16031 // for more information.
16032 //
16033-// $hash=f9bc0556a97ff271f7f8275f2c7572c3cdeb728c$
16034+// $hash=3b4968443aafd1ee42fcc9a5e7b466b38fb98d28$
16035 //
16036
16037 #include "libcef_dll/cpptoc/resource_skip_callback_cpptoc.h"
16038diff --git a/cef/libcef_dll/cpptoc/resource_skip_callback_cpptoc.h b/cef/libcef_dll/cpptoc/resource_skip_callback_cpptoc.h
16039index 40ef7a0dc8..c173a16715 100644
16040--- a/cef/libcef_dll/cpptoc/resource_skip_callback_cpptoc.h
16041+++ b/cef/libcef_dll/cpptoc/resource_skip_callback_cpptoc.h
16042@@ -1,4 +1,4 @@
16043-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16044+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16045 // reserved. Use of this source code is governed by a BSD-style license that
16046 // can be found in the LICENSE file.
16047 //
16048@@ -9,7 +9,7 @@
16049 // implementations. See the translator.README.txt file in the tools directory
16050 // for more information.
16051 //
16052-// $hash=1f294352ecdbb87074f531745e7f57e814fdc0b9$
16053+// $hash=decf49c2d8a337c353d149e9b9392065740eb06d$
16054 //
16055
16056 #ifndef CEF_LIBCEF_DLL_CPPTOC_RESOURCE_SKIP_CALLBACK_CPPTOC_H_
16057diff --git a/cef/libcef_dll/cpptoc/response_cpptoc.cc b/cef/libcef_dll/cpptoc/response_cpptoc.cc
16058index 369c11779a..1cb1db789f 100644
16059--- a/cef/libcef_dll/cpptoc/response_cpptoc.cc
16060+++ b/cef/libcef_dll/cpptoc/response_cpptoc.cc
16061@@ -1,4 +1,4 @@
16062-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16063+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16064 // reserved. Use of this source code is governed by a BSD-style license that
16065 // can be found in the LICENSE file.
16066 //
16067@@ -9,7 +9,7 @@
16068 // implementations. See the translator.README.txt file in the tools directory
16069 // for more information.
16070 //
16071-// $hash=7740b26377fd4a31c265028286cbbd209b04fcd9$
16072+// $hash=1dc0f59d37e6979ba3f431463671f0feefc45c31$
16073 //
16074
16075 #include "libcef_dll/cpptoc/response_cpptoc.h"
16076diff --git a/cef/libcef_dll/cpptoc/response_cpptoc.h b/cef/libcef_dll/cpptoc/response_cpptoc.h
16077index 00066017f4..209f550a13 100644
16078--- a/cef/libcef_dll/cpptoc/response_cpptoc.h
16079+++ b/cef/libcef_dll/cpptoc/response_cpptoc.h
16080@@ -1,4 +1,4 @@
16081-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16082+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16083 // reserved. Use of this source code is governed by a BSD-style license that
16084 // can be found in the LICENSE file.
16085 //
16086@@ -9,7 +9,7 @@
16087 // implementations. See the translator.README.txt file in the tools directory
16088 // for more information.
16089 //
16090-// $hash=5ad7427f99c87d5835595d8a5640abc3013fd914$
16091+// $hash=9bd9fdb8fe353f1af3ac543074cb74b12cdab0c5$
16092 //
16093
16094 #ifndef CEF_LIBCEF_DLL_CPPTOC_RESPONSE_CPPTOC_H_
16095diff --git a/cef/libcef_dll/cpptoc/response_filter_cpptoc.cc b/cef/libcef_dll/cpptoc/response_filter_cpptoc.cc
16096index 2f3b88d276..1bc437f06f 100644
16097--- a/cef/libcef_dll/cpptoc/response_filter_cpptoc.cc
16098+++ b/cef/libcef_dll/cpptoc/response_filter_cpptoc.cc
16099@@ -1,4 +1,4 @@
16100-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16101+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16102 // reserved. Use of this source code is governed by a BSD-style license that
16103 // can be found in the LICENSE file.
16104 //
16105@@ -9,7 +9,7 @@
16106 // implementations. See the translator.README.txt file in the tools directory
16107 // for more information.
16108 //
16109-// $hash=003bbf99e94890b125932370463f311e7c4a7c7f$
16110+// $hash=b6721a12a6b018187b3ccc87557beb29be130100$
16111 //
16112
16113 #include "libcef_dll/cpptoc/response_filter_cpptoc.h"
16114diff --git a/cef/libcef_dll/cpptoc/response_filter_cpptoc.h b/cef/libcef_dll/cpptoc/response_filter_cpptoc.h
16115index f97e49b403..b79d579543 100644
16116--- a/cef/libcef_dll/cpptoc/response_filter_cpptoc.h
16117+++ b/cef/libcef_dll/cpptoc/response_filter_cpptoc.h
16118@@ -1,4 +1,4 @@
16119-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16120+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16121 // reserved. Use of this source code is governed by a BSD-style license that
16122 // can be found in the LICENSE file.
16123 //
16124@@ -9,7 +9,7 @@
16125 // implementations. See the translator.README.txt file in the tools directory
16126 // for more information.
16127 //
16128-// $hash=23d91cdc83bb3c1178929374ffaad52afa34ecf6$
16129+// $hash=6ef35ca53f2bd4523397d3f56b02ca9b40a811f9$
16130 //
16131
16132 #ifndef CEF_LIBCEF_DLL_CPPTOC_RESPONSE_FILTER_CPPTOC_H_
16133diff --git a/cef/libcef_dll/cpptoc/run_context_menu_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/run_context_menu_callback_cpptoc.cc
16134index 4d24d798de..8cf46c8366 100644
16135--- a/cef/libcef_dll/cpptoc/run_context_menu_callback_cpptoc.cc
16136+++ b/cef/libcef_dll/cpptoc/run_context_menu_callback_cpptoc.cc
16137@@ -1,4 +1,4 @@
16138-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16139+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16140 // reserved. Use of this source code is governed by a BSD-style license that
16141 // can be found in the LICENSE file.
16142 //
16143@@ -9,7 +9,7 @@
16144 // implementations. See the translator.README.txt file in the tools directory
16145 // for more information.
16146 //
16147-// $hash=ac442dda0212dff044db09ad7494390a0f958321$
16148+// $hash=d76ba7de3a561c71b88250340676e56dc7a9f84a$
16149 //
16150
16151 #include "libcef_dll/cpptoc/run_context_menu_callback_cpptoc.h"
16152diff --git a/cef/libcef_dll/cpptoc/run_context_menu_callback_cpptoc.h b/cef/libcef_dll/cpptoc/run_context_menu_callback_cpptoc.h
16153index 1c300fa470..20124e44f3 100644
16154--- a/cef/libcef_dll/cpptoc/run_context_menu_callback_cpptoc.h
16155+++ b/cef/libcef_dll/cpptoc/run_context_menu_callback_cpptoc.h
16156@@ -1,4 +1,4 @@
16157-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16158+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16159 // reserved. Use of this source code is governed by a BSD-style license that
16160 // can be found in the LICENSE file.
16161 //
16162@@ -9,7 +9,7 @@
16163 // implementations. See the translator.README.txt file in the tools directory
16164 // for more information.
16165 //
16166-// $hash=ede8ce9ad59f1ea741c9452efeb265e5526ffd91$
16167+// $hash=d8003b6de1b89c64b2d5b53ea1665dda982effb9$
16168 //
16169
16170 #ifndef CEF_LIBCEF_DLL_CPPTOC_RUN_CONTEXT_MENU_CALLBACK_CPPTOC_H_
16171diff --git a/cef/libcef_dll/cpptoc/run_file_dialog_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/run_file_dialog_callback_cpptoc.cc
16172index 4c37484a8a..33705ecbbf 100644
16173--- a/cef/libcef_dll/cpptoc/run_file_dialog_callback_cpptoc.cc
16174+++ b/cef/libcef_dll/cpptoc/run_file_dialog_callback_cpptoc.cc
16175@@ -1,4 +1,4 @@
16176-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16177+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16178 // reserved. Use of this source code is governed by a BSD-style license that
16179 // can be found in the LICENSE file.
16180 //
16181@@ -9,7 +9,7 @@
16182 // implementations. See the translator.README.txt file in the tools directory
16183 // for more information.
16184 //
16185-// $hash=3ba417ae0dbb742d60ca1c951b0f7ddb10b6de0f$
16186+// $hash=2e6aa9015192a3704df073f7dad0c6fa3b05f76c$
16187 //
16188
16189 #include "libcef_dll/cpptoc/run_file_dialog_callback_cpptoc.h"
16190diff --git a/cef/libcef_dll/cpptoc/run_file_dialog_callback_cpptoc.h b/cef/libcef_dll/cpptoc/run_file_dialog_callback_cpptoc.h
16191index b3daf4e72f..50dc062cb0 100644
16192--- a/cef/libcef_dll/cpptoc/run_file_dialog_callback_cpptoc.h
16193+++ b/cef/libcef_dll/cpptoc/run_file_dialog_callback_cpptoc.h
16194@@ -1,4 +1,4 @@
16195-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16196+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16197 // reserved. Use of this source code is governed by a BSD-style license that
16198 // can be found in the LICENSE file.
16199 //
16200@@ -9,7 +9,7 @@
16201 // implementations. See the translator.README.txt file in the tools directory
16202 // for more information.
16203 //
16204-// $hash=8ebd2d542077939621bfe048c6bedc20bf3a27dd$
16205+// $hash=6542e83e5f1a6694575c89e628ee11da17bb6624$
16206 //
16207
16208 #ifndef CEF_LIBCEF_DLL_CPPTOC_RUN_FILE_DIALOG_CALLBACK_CPPTOC_H_
16209diff --git a/cef/libcef_dll/cpptoc/scheme_handler_factory_cpptoc.cc b/cef/libcef_dll/cpptoc/scheme_handler_factory_cpptoc.cc
16210index 620197b95c..759f5f9dc1 100644
16211--- a/cef/libcef_dll/cpptoc/scheme_handler_factory_cpptoc.cc
16212+++ b/cef/libcef_dll/cpptoc/scheme_handler_factory_cpptoc.cc
16213@@ -1,4 +1,4 @@
16214-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16215+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16216 // reserved. Use of this source code is governed by a BSD-style license that
16217 // can be found in the LICENSE file.
16218 //
16219@@ -9,7 +9,7 @@
16220 // implementations. See the translator.README.txt file in the tools directory
16221 // for more information.
16222 //
16223-// $hash=b3509f4fb5121ac3039512c2130c3ca183a16225$
16224+// $hash=abd81866575f873556b4ae40313ea65c89219756$
16225 //
16226
16227 #include "libcef_dll/cpptoc/scheme_handler_factory_cpptoc.h"
16228diff --git a/cef/libcef_dll/cpptoc/scheme_handler_factory_cpptoc.h b/cef/libcef_dll/cpptoc/scheme_handler_factory_cpptoc.h
16229index d5be9fd2af..1c442fae76 100644
16230--- a/cef/libcef_dll/cpptoc/scheme_handler_factory_cpptoc.h
16231+++ b/cef/libcef_dll/cpptoc/scheme_handler_factory_cpptoc.h
16232@@ -1,4 +1,4 @@
16233-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16234+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16235 // reserved. Use of this source code is governed by a BSD-style license that
16236 // can be found in the LICENSE file.
16237 //
16238@@ -9,7 +9,7 @@
16239 // implementations. See the translator.README.txt file in the tools directory
16240 // for more information.
16241 //
16242-// $hash=50876172d9b7287097ba325cabd3376a2ae2c516$
16243+// $hash=b119c6e375aee04bc83623c73f61b7eb39af16f5$
16244 //
16245
16246 #ifndef CEF_LIBCEF_DLL_CPPTOC_SCHEME_HANDLER_FACTORY_CPPTOC_H_
16247diff --git a/cef/libcef_dll/cpptoc/scheme_registrar_cpptoc.cc b/cef/libcef_dll/cpptoc/scheme_registrar_cpptoc.cc
16248index 027ccb45c9..aee5e11789 100644
16249--- a/cef/libcef_dll/cpptoc/scheme_registrar_cpptoc.cc
16250+++ b/cef/libcef_dll/cpptoc/scheme_registrar_cpptoc.cc
16251@@ -1,4 +1,4 @@
16252-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16253+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16254 // reserved. Use of this source code is governed by a BSD-style license that
16255 // can be found in the LICENSE file.
16256 //
16257@@ -9,7 +9,7 @@
16258 // implementations. See the translator.README.txt file in the tools directory
16259 // for more information.
16260 //
16261-// $hash=fb064c5b9b4ceaecf90c62a1a7e4611564102e0a$
16262+// $hash=c028de29ae5b48ed41d4e8b8ae3df9a0ee765e14$
16263 //
16264
16265 #include "libcef_dll/cpptoc/scheme_registrar_cpptoc.h"
16266diff --git a/cef/libcef_dll/cpptoc/scheme_registrar_cpptoc.h b/cef/libcef_dll/cpptoc/scheme_registrar_cpptoc.h
16267index b2c9fcb77a..6f0265be6a 100644
16268--- a/cef/libcef_dll/cpptoc/scheme_registrar_cpptoc.h
16269+++ b/cef/libcef_dll/cpptoc/scheme_registrar_cpptoc.h
16270@@ -1,4 +1,4 @@
16271-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16272+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16273 // reserved. Use of this source code is governed by a BSD-style license that
16274 // can be found in the LICENSE file.
16275 //
16276@@ -9,7 +9,7 @@
16277 // implementations. See the translator.README.txt file in the tools directory
16278 // for more information.
16279 //
16280-// $hash=6552a6d6837ccb887c480f2843aa1c9293e97908$
16281+// $hash=f14ceae023fe1f52e53b26edb60667203b919178$
16282 //
16283
16284 #ifndef CEF_LIBCEF_DLL_CPPTOC_SCHEME_REGISTRAR_CPPTOC_H_
16285diff --git a/cef/libcef_dll/cpptoc/select_client_certificate_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/select_client_certificate_callback_cpptoc.cc
16286index 7349ed7cc2..d14d94523a 100644
16287--- a/cef/libcef_dll/cpptoc/select_client_certificate_callback_cpptoc.cc
16288+++ b/cef/libcef_dll/cpptoc/select_client_certificate_callback_cpptoc.cc
16289@@ -1,4 +1,4 @@
16290-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16291+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16292 // reserved. Use of this source code is governed by a BSD-style license that
16293 // can be found in the LICENSE file.
16294 //
16295@@ -9,7 +9,7 @@
16296 // implementations. See the translator.README.txt file in the tools directory
16297 // for more information.
16298 //
16299-// $hash=cad8f1d219443b418638ccd23ebbd67ccb3b8d26$
16300+// $hash=5017f5bece20966b0972418228301ef32e05f740$
16301 //
16302
16303 #include "libcef_dll/cpptoc/select_client_certificate_callback_cpptoc.h"
16304diff --git a/cef/libcef_dll/cpptoc/select_client_certificate_callback_cpptoc.h b/cef/libcef_dll/cpptoc/select_client_certificate_callback_cpptoc.h
16305index 912e835923..9905463d3e 100644
16306--- a/cef/libcef_dll/cpptoc/select_client_certificate_callback_cpptoc.h
16307+++ b/cef/libcef_dll/cpptoc/select_client_certificate_callback_cpptoc.h
16308@@ -1,4 +1,4 @@
16309-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16310+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16311 // reserved. Use of this source code is governed by a BSD-style license that
16312 // can be found in the LICENSE file.
16313 //
16314@@ -9,7 +9,7 @@
16315 // implementations. See the translator.README.txt file in the tools directory
16316 // for more information.
16317 //
16318-// $hash=44e43ff76e1aab77f8cd07fe1e6368adc98e3fbc$
16319+// $hash=e397708024c85cf066c0b7b76f1fae74b3a3e4d6$
16320 //
16321
16322 #ifndef CEF_LIBCEF_DLL_CPPTOC_SELECT_CLIENT_CERTIFICATE_CALLBACK_CPPTOC_H_
16323diff --git a/cef/libcef_dll/cpptoc/server_cpptoc.cc b/cef/libcef_dll/cpptoc/server_cpptoc.cc
16324index 7ddae1814e..f6be3490c7 100644
16325--- a/cef/libcef_dll/cpptoc/server_cpptoc.cc
16326+++ b/cef/libcef_dll/cpptoc/server_cpptoc.cc
16327@@ -1,4 +1,4 @@
16328-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16329+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16330 // reserved. Use of this source code is governed by a BSD-style license that
16331 // can be found in the LICENSE file.
16332 //
16333@@ -9,7 +9,7 @@
16334 // implementations. See the translator.README.txt file in the tools directory
16335 // for more information.
16336 //
16337-// $hash=ced96d5bbb943e808ada67499a45f9804e14266f$
16338+// $hash=d0cfc5e4c052a2d1fe43d1c0ae264642db03c04c$
16339 //
16340
16341 #include "libcef_dll/cpptoc/server_cpptoc.h"
16342diff --git a/cef/libcef_dll/cpptoc/server_cpptoc.h b/cef/libcef_dll/cpptoc/server_cpptoc.h
16343index f3b1745730..fb99d54f7e 100644
16344--- a/cef/libcef_dll/cpptoc/server_cpptoc.h
16345+++ b/cef/libcef_dll/cpptoc/server_cpptoc.h
16346@@ -1,4 +1,4 @@
16347-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16348+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16349 // reserved. Use of this source code is governed by a BSD-style license that
16350 // can be found in the LICENSE file.
16351 //
16352@@ -9,7 +9,7 @@
16353 // implementations. See the translator.README.txt file in the tools directory
16354 // for more information.
16355 //
16356-// $hash=a9a800064a03237d1656b23f808496eed8027c7b$
16357+// $hash=a36274939df284287ac49a8ec9321f8188d4fddb$
16358 //
16359
16360 #ifndef CEF_LIBCEF_DLL_CPPTOC_SERVER_CPPTOC_H_
16361diff --git a/cef/libcef_dll/cpptoc/server_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/server_handler_cpptoc.cc
16362index e40d14a1d2..2688d1cc03 100644
16363--- a/cef/libcef_dll/cpptoc/server_handler_cpptoc.cc
16364+++ b/cef/libcef_dll/cpptoc/server_handler_cpptoc.cc
16365@@ -1,4 +1,4 @@
16366-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16367+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16368 // reserved. Use of this source code is governed by a BSD-style license that
16369 // can be found in the LICENSE file.
16370 //
16371@@ -9,7 +9,7 @@
16372 // implementations. See the translator.README.txt file in the tools directory
16373 // for more information.
16374 //
16375-// $hash=db2d9db129a9cb038550aaed5b369fd5966efcff$
16376+// $hash=2ef239c7779477feb8808f2198e7d2063ab74156$
16377 //
16378
16379 #include "libcef_dll/cpptoc/server_handler_cpptoc.h"
16380diff --git a/cef/libcef_dll/cpptoc/server_handler_cpptoc.h b/cef/libcef_dll/cpptoc/server_handler_cpptoc.h
16381index 364e2cdf18..a4c951c65a 100644
16382--- a/cef/libcef_dll/cpptoc/server_handler_cpptoc.h
16383+++ b/cef/libcef_dll/cpptoc/server_handler_cpptoc.h
16384@@ -1,4 +1,4 @@
16385-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16386+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16387 // reserved. Use of this source code is governed by a BSD-style license that
16388 // can be found in the LICENSE file.
16389 //
16390@@ -9,7 +9,7 @@
16391 // implementations. See the translator.README.txt file in the tools directory
16392 // for more information.
16393 //
16394-// $hash=1b89d52363b81a035b7461d182da854d6ffbf8b5$
16395+// $hash=754575fa090b971fc9105fecda97a407ef0d2484$
16396 //
16397
16398 #ifndef CEF_LIBCEF_DLL_CPPTOC_SERVER_HANDLER_CPPTOC_H_
16399diff --git a/cef/libcef_dll/cpptoc/set_cookie_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/set_cookie_callback_cpptoc.cc
16400index 4dfc728fd5..b4beccccd3 100644
16401--- a/cef/libcef_dll/cpptoc/set_cookie_callback_cpptoc.cc
16402+++ b/cef/libcef_dll/cpptoc/set_cookie_callback_cpptoc.cc
16403@@ -1,4 +1,4 @@
16404-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16405+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16406 // reserved. Use of this source code is governed by a BSD-style license that
16407 // can be found in the LICENSE file.
16408 //
16409@@ -9,7 +9,7 @@
16410 // implementations. See the translator.README.txt file in the tools directory
16411 // for more information.
16412 //
16413-// $hash=6d1a19f985de02d3f1dbefaec252104a308dcdde$
16414+// $hash=99f02c8911b913161cfd3834e19bbdc0ba542409$
16415 //
16416
16417 #include "libcef_dll/cpptoc/set_cookie_callback_cpptoc.h"
16418diff --git a/cef/libcef_dll/cpptoc/set_cookie_callback_cpptoc.h b/cef/libcef_dll/cpptoc/set_cookie_callback_cpptoc.h
16419index 645dc7b00d..72e2112499 100644
16420--- a/cef/libcef_dll/cpptoc/set_cookie_callback_cpptoc.h
16421+++ b/cef/libcef_dll/cpptoc/set_cookie_callback_cpptoc.h
16422@@ -1,4 +1,4 @@
16423-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16424+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16425 // reserved. Use of this source code is governed by a BSD-style license that
16426 // can be found in the LICENSE file.
16427 //
16428@@ -9,7 +9,7 @@
16429 // implementations. See the translator.README.txt file in the tools directory
16430 // for more information.
16431 //
16432-// $hash=f896cf1503ab99f6aead1377eb6b5db0c9d806a2$
16433+// $hash=3e86bf9e36a3ef63e6777dcafee8847bd4965a60$
16434 //
16435
16436 #ifndef CEF_LIBCEF_DLL_CPPTOC_SET_COOKIE_CALLBACK_CPPTOC_H_
16437diff --git a/cef/libcef_dll/cpptoc/sslinfo_cpptoc.cc b/cef/libcef_dll/cpptoc/sslinfo_cpptoc.cc
16438index 275e5ad51e..7251adfda8 100644
16439--- a/cef/libcef_dll/cpptoc/sslinfo_cpptoc.cc
16440+++ b/cef/libcef_dll/cpptoc/sslinfo_cpptoc.cc
16441@@ -1,4 +1,4 @@
16442-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16443+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16444 // reserved. Use of this source code is governed by a BSD-style license that
16445 // can be found in the LICENSE file.
16446 //
16447@@ -9,7 +9,7 @@
16448 // implementations. See the translator.README.txt file in the tools directory
16449 // for more information.
16450 //
16451-// $hash=22fbf97fe6b133eac83b7bdbd929a9ce04fa0a64$
16452+// $hash=78b529fc88b9701f7cf8d40097576704b0ef35fc$
16453 //
16454
16455 #include "libcef_dll/cpptoc/sslinfo_cpptoc.h"
16456diff --git a/cef/libcef_dll/cpptoc/sslinfo_cpptoc.h b/cef/libcef_dll/cpptoc/sslinfo_cpptoc.h
16457index 0fb1b9568b..3dc2625904 100644
16458--- a/cef/libcef_dll/cpptoc/sslinfo_cpptoc.h
16459+++ b/cef/libcef_dll/cpptoc/sslinfo_cpptoc.h
16460@@ -1,4 +1,4 @@
16461-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16462+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16463 // reserved. Use of this source code is governed by a BSD-style license that
16464 // can be found in the LICENSE file.
16465 //
16466@@ -9,7 +9,7 @@
16467 // implementations. See the translator.README.txt file in the tools directory
16468 // for more information.
16469 //
16470-// $hash=45f9e1bcce252fdb368f20aec89ec3d23c7211a6$
16471+// $hash=00ab5a37c56c5bd5f14ae97f72338a32615214b7$
16472 //
16473
16474 #ifndef CEF_LIBCEF_DLL_CPPTOC_SSLINFO_CPPTOC_H_
16475diff --git a/cef/libcef_dll/cpptoc/sslstatus_cpptoc.cc b/cef/libcef_dll/cpptoc/sslstatus_cpptoc.cc
16476index 69bb8a7cef..92073dfc08 100644
16477--- a/cef/libcef_dll/cpptoc/sslstatus_cpptoc.cc
16478+++ b/cef/libcef_dll/cpptoc/sslstatus_cpptoc.cc
16479@@ -1,4 +1,4 @@
16480-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16481+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16482 // reserved. Use of this source code is governed by a BSD-style license that
16483 // can be found in the LICENSE file.
16484 //
16485@@ -9,7 +9,7 @@
16486 // implementations. See the translator.README.txt file in the tools directory
16487 // for more information.
16488 //
16489-// $hash=bc0333234bd952d5896be62cb562f2ac92516abc$
16490+// $hash=8596e5de45842c1e1de8e6377c2b7d932218c370$
16491 //
16492
16493 #include "libcef_dll/cpptoc/sslstatus_cpptoc.h"
16494diff --git a/cef/libcef_dll/cpptoc/sslstatus_cpptoc.h b/cef/libcef_dll/cpptoc/sslstatus_cpptoc.h
16495index 0ae88ae66a..2d45ad4280 100644
16496--- a/cef/libcef_dll/cpptoc/sslstatus_cpptoc.h
16497+++ b/cef/libcef_dll/cpptoc/sslstatus_cpptoc.h
16498@@ -1,4 +1,4 @@
16499-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16500+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16501 // reserved. Use of this source code is governed by a BSD-style license that
16502 // can be found in the LICENSE file.
16503 //
16504@@ -9,7 +9,7 @@
16505 // implementations. See the translator.README.txt file in the tools directory
16506 // for more information.
16507 //
16508-// $hash=762fba67b4bb4e4f5a303821bf8a98339afcd502$
16509+// $hash=8f0a00c305a6defdcbf4caa2ea437cefe49a191f$
16510 //
16511
16512 #ifndef CEF_LIBCEF_DLL_CPPTOC_SSLSTATUS_CPPTOC_H_
16513diff --git a/cef/libcef_dll/cpptoc/stream_reader_cpptoc.cc b/cef/libcef_dll/cpptoc/stream_reader_cpptoc.cc
16514index cd68fcd463..3d6b7f7378 100644
16515--- a/cef/libcef_dll/cpptoc/stream_reader_cpptoc.cc
16516+++ b/cef/libcef_dll/cpptoc/stream_reader_cpptoc.cc
16517@@ -1,4 +1,4 @@
16518-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16519+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16520 // reserved. Use of this source code is governed by a BSD-style license that
16521 // can be found in the LICENSE file.
16522 //
16523@@ -9,7 +9,7 @@
16524 // implementations. See the translator.README.txt file in the tools directory
16525 // for more information.
16526 //
16527-// $hash=b53dc925c532a604ca8b8cf416de165c54a94fc1$
16528+// $hash=fcbdc299c4f34868f817a9b77777a9b88f3cf07b$
16529 //
16530
16531 #include "libcef_dll/cpptoc/stream_reader_cpptoc.h"
16532diff --git a/cef/libcef_dll/cpptoc/stream_reader_cpptoc.h b/cef/libcef_dll/cpptoc/stream_reader_cpptoc.h
16533index bc07d1c4dc..df8cc7fd6f 100644
16534--- a/cef/libcef_dll/cpptoc/stream_reader_cpptoc.h
16535+++ b/cef/libcef_dll/cpptoc/stream_reader_cpptoc.h
16536@@ -1,4 +1,4 @@
16537-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16538+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16539 // reserved. Use of this source code is governed by a BSD-style license that
16540 // can be found in the LICENSE file.
16541 //
16542@@ -9,7 +9,7 @@
16543 // implementations. See the translator.README.txt file in the tools directory
16544 // for more information.
16545 //
16546-// $hash=b1240c638e3fad11bcd2c87d8fc1ca39aee94d3d$
16547+// $hash=c98bd38e350a4b24d11039a326e8df7fb86bfc75$
16548 //
16549
16550 #ifndef CEF_LIBCEF_DLL_CPPTOC_STREAM_READER_CPPTOC_H_
16551diff --git a/cef/libcef_dll/cpptoc/stream_writer_cpptoc.cc b/cef/libcef_dll/cpptoc/stream_writer_cpptoc.cc
16552index 3b0bf72342..d402161f2d 100644
16553--- a/cef/libcef_dll/cpptoc/stream_writer_cpptoc.cc
16554+++ b/cef/libcef_dll/cpptoc/stream_writer_cpptoc.cc
16555@@ -1,4 +1,4 @@
16556-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16557+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16558 // reserved. Use of this source code is governed by a BSD-style license that
16559 // can be found in the LICENSE file.
16560 //
16561@@ -9,7 +9,7 @@
16562 // implementations. See the translator.README.txt file in the tools directory
16563 // for more information.
16564 //
16565-// $hash=2f0e3b13ebf81334c1fb402c7939b34e4a068969$
16566+// $hash=ac20659d83a6efb764f3b55756dbc8c686fc5363$
16567 //
16568
16569 #include "libcef_dll/cpptoc/stream_writer_cpptoc.h"
16570diff --git a/cef/libcef_dll/cpptoc/stream_writer_cpptoc.h b/cef/libcef_dll/cpptoc/stream_writer_cpptoc.h
16571index fbaaf0e987..815bc3feba 100644
16572--- a/cef/libcef_dll/cpptoc/stream_writer_cpptoc.h
16573+++ b/cef/libcef_dll/cpptoc/stream_writer_cpptoc.h
16574@@ -1,4 +1,4 @@
16575-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16576+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16577 // reserved. Use of this source code is governed by a BSD-style license that
16578 // can be found in the LICENSE file.
16579 //
16580@@ -9,7 +9,7 @@
16581 // implementations. See the translator.README.txt file in the tools directory
16582 // for more information.
16583 //
16584-// $hash=4589904bcfef73d0616a59b9df2745ef29dc70a2$
16585+// $hash=9204925136614f1d4e4f4609ea6ee30dad0c2782$
16586 //
16587
16588 #ifndef CEF_LIBCEF_DLL_CPPTOC_STREAM_WRITER_CPPTOC_H_
16589diff --git a/cef/libcef_dll/cpptoc/string_visitor_cpptoc.cc b/cef/libcef_dll/cpptoc/string_visitor_cpptoc.cc
16590index 9226d3224b..34e6a844d3 100644
16591--- a/cef/libcef_dll/cpptoc/string_visitor_cpptoc.cc
16592+++ b/cef/libcef_dll/cpptoc/string_visitor_cpptoc.cc
16593@@ -1,4 +1,4 @@
16594-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16595+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16596 // reserved. Use of this source code is governed by a BSD-style license that
16597 // can be found in the LICENSE file.
16598 //
16599@@ -9,7 +9,7 @@
16600 // implementations. See the translator.README.txt file in the tools directory
16601 // for more information.
16602 //
16603-// $hash=b800f03ccea29e0ba32523580a275d272f6c19c3$
16604+// $hash=cad58a7370ef2b36aacb2fdf527fe1c061f4a868$
16605 //
16606
16607 #include "libcef_dll/cpptoc/string_visitor_cpptoc.h"
16608diff --git a/cef/libcef_dll/cpptoc/string_visitor_cpptoc.h b/cef/libcef_dll/cpptoc/string_visitor_cpptoc.h
16609index 67562b50ae..672cf3dab8 100644
16610--- a/cef/libcef_dll/cpptoc/string_visitor_cpptoc.h
16611+++ b/cef/libcef_dll/cpptoc/string_visitor_cpptoc.h
16612@@ -1,4 +1,4 @@
16613-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16614+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16615 // reserved. Use of this source code is governed by a BSD-style license that
16616 // can be found in the LICENSE file.
16617 //
16618@@ -9,7 +9,7 @@
16619 // implementations. See the translator.README.txt file in the tools directory
16620 // for more information.
16621 //
16622-// $hash=57b8950e457e10dfad601f860c417c6d0ad6f17e$
16623+// $hash=4cf29c1d2d715dee4855acda840ca47d5f1fabbf$
16624 //
16625
16626 #ifndef CEF_LIBCEF_DLL_CPPTOC_STRING_VISITOR_CPPTOC_H_
16627diff --git a/cef/libcef_dll/cpptoc/task_cpptoc.cc b/cef/libcef_dll/cpptoc/task_cpptoc.cc
16628index a146568676..ef51cfac7b 100644
16629--- a/cef/libcef_dll/cpptoc/task_cpptoc.cc
16630+++ b/cef/libcef_dll/cpptoc/task_cpptoc.cc
16631@@ -1,4 +1,4 @@
16632-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16633+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16634 // reserved. Use of this source code is governed by a BSD-style license that
16635 // can be found in the LICENSE file.
16636 //
16637@@ -9,7 +9,7 @@
16638 // implementations. See the translator.README.txt file in the tools directory
16639 // for more information.
16640 //
16641-// $hash=25bdf4853f83cad4c6a52f9c71b1adb844037237$
16642+// $hash=47bacb389bbb262f0be39b49c5d6251b8bf1c507$
16643 //
16644
16645 #include "libcef_dll/cpptoc/task_cpptoc.h"
16646diff --git a/cef/libcef_dll/cpptoc/task_cpptoc.h b/cef/libcef_dll/cpptoc/task_cpptoc.h
16647index 41800478e4..cdf9aab98e 100644
16648--- a/cef/libcef_dll/cpptoc/task_cpptoc.h
16649+++ b/cef/libcef_dll/cpptoc/task_cpptoc.h
16650@@ -1,4 +1,4 @@
16651-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16652+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16653 // reserved. Use of this source code is governed by a BSD-style license that
16654 // can be found in the LICENSE file.
16655 //
16656@@ -9,7 +9,7 @@
16657 // implementations. See the translator.README.txt file in the tools directory
16658 // for more information.
16659 //
16660-// $hash=dc0807d059995b4a761f7a004d5e8b47d065beb7$
16661+// $hash=a22ba7af43964082c9e8570da140389ca9953a12$
16662 //
16663
16664 #ifndef CEF_LIBCEF_DLL_CPPTOC_TASK_CPPTOC_H_
16665diff --git a/cef/libcef_dll/cpptoc/task_runner_cpptoc.cc b/cef/libcef_dll/cpptoc/task_runner_cpptoc.cc
16666index 148cd2b962..435cada85f 100644
16667--- a/cef/libcef_dll/cpptoc/task_runner_cpptoc.cc
16668+++ b/cef/libcef_dll/cpptoc/task_runner_cpptoc.cc
16669@@ -1,4 +1,4 @@
16670-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16671+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16672 // reserved. Use of this source code is governed by a BSD-style license that
16673 // can be found in the LICENSE file.
16674 //
16675@@ -9,7 +9,7 @@
16676 // implementations. See the translator.README.txt file in the tools directory
16677 // for more information.
16678 //
16679-// $hash=f5eaf3c559833f8ce78d113dda78b190914df6fa$
16680+// $hash=7c1bd7fe9f9c91bc488299a2278f83a0850befe7$
16681 //
16682
16683 #include "libcef_dll/cpptoc/task_runner_cpptoc.h"
16684diff --git a/cef/libcef_dll/cpptoc/task_runner_cpptoc.h b/cef/libcef_dll/cpptoc/task_runner_cpptoc.h
16685index 0841ff8cd7..9a8f6ded34 100644
16686--- a/cef/libcef_dll/cpptoc/task_runner_cpptoc.h
16687+++ b/cef/libcef_dll/cpptoc/task_runner_cpptoc.h
16688@@ -1,4 +1,4 @@
16689-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16690+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16691 // reserved. Use of this source code is governed by a BSD-style license that
16692 // can be found in the LICENSE file.
16693 //
16694@@ -9,7 +9,7 @@
16695 // implementations. See the translator.README.txt file in the tools directory
16696 // for more information.
16697 //
16698-// $hash=1f82d9405dee6f40bc5fe99869e353255948fa66$
16699+// $hash=3422c7340cee9aaf51c62fa1868b3e665ef34b2f$
16700 //
16701
16702 #ifndef CEF_LIBCEF_DLL_CPPTOC_TASK_RUNNER_CPPTOC_H_
16703diff --git a/cef/libcef_dll/cpptoc/test/translator_test_cpptoc.cc b/cef/libcef_dll/cpptoc/test/translator_test_cpptoc.cc
16704index d516caaf6d..8cee6f13d9 100644
16705--- a/cef/libcef_dll/cpptoc/test/translator_test_cpptoc.cc
16706+++ b/cef/libcef_dll/cpptoc/test/translator_test_cpptoc.cc
16707@@ -1,4 +1,4 @@
16708-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16709+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16710 // reserved. Use of this source code is governed by a BSD-style license that
16711 // can be found in the LICENSE file.
16712 //
16713@@ -9,7 +9,7 @@
16714 // implementations. See the translator.README.txt file in the tools directory
16715 // for more information.
16716 //
16717-// $hash=a102f383e3ecac5237310b2e5aa5b2fd37474188$
16718+// $hash=63050d13fb457d0d986bb29fe3256158d1e4aac5$
16719 //
16720
16721 #include "libcef_dll/cpptoc/test/translator_test_cpptoc.h"
16722diff --git a/cef/libcef_dll/cpptoc/test/translator_test_cpptoc.h b/cef/libcef_dll/cpptoc/test/translator_test_cpptoc.h
16723index 0bbf096a1a..60be8a4191 100644
16724--- a/cef/libcef_dll/cpptoc/test/translator_test_cpptoc.h
16725+++ b/cef/libcef_dll/cpptoc/test/translator_test_cpptoc.h
16726@@ -1,4 +1,4 @@
16727-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16728+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16729 // reserved. Use of this source code is governed by a BSD-style license that
16730 // can be found in the LICENSE file.
16731 //
16732@@ -9,7 +9,7 @@
16733 // implementations. See the translator.README.txt file in the tools directory
16734 // for more information.
16735 //
16736-// $hash=06ab26befdae74cbd76ccd42a03fe8bd081ac526$
16737+// $hash=aeae16842d711fd6e5d54cd14333d27cbc06c400$
16738 //
16739
16740 #ifndef CEF_LIBCEF_DLL_CPPTOC_TEST_TRANSLATOR_TEST_CPPTOC_H_
16741diff --git a/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_client_child_cpptoc.cc b/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_client_child_cpptoc.cc
16742index 2feff7fa5e..d3ac64f498 100644
16743--- a/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_client_child_cpptoc.cc
16744+++ b/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_client_child_cpptoc.cc
16745@@ -1,4 +1,4 @@
16746-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16747+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16748 // reserved. Use of this source code is governed by a BSD-style license that
16749 // can be found in the LICENSE file.
16750 //
16751@@ -9,7 +9,7 @@
16752 // implementations. See the translator.README.txt file in the tools directory
16753 // for more information.
16754 //
16755-// $hash=9352a58297b965828c846e704f7beded7b214103$
16756+// $hash=5eb9ef23f60f99db031e0e3da6cdfc81c979f5ff$
16757 //
16758
16759 #include "libcef_dll/cpptoc/test/translator_test_ref_ptr_client_child_cpptoc.h"
16760diff --git a/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_client_child_cpptoc.h b/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_client_child_cpptoc.h
16761index a32cfbce07..e32aee6a7f 100644
16762--- a/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_client_child_cpptoc.h
16763+++ b/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_client_child_cpptoc.h
16764@@ -1,4 +1,4 @@
16765-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16766+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16767 // reserved. Use of this source code is governed by a BSD-style license that
16768 // can be found in the LICENSE file.
16769 //
16770@@ -9,7 +9,7 @@
16771 // implementations. See the translator.README.txt file in the tools directory
16772 // for more information.
16773 //
16774-// $hash=715c153a19458d1f8b6995f6d73b31a8c713f221$
16775+// $hash=f84f12aa3e444b6ae98c620147bdacf6c32af8df$
16776 //
16777
16778 #ifndef CEF_LIBCEF_DLL_CPPTOC_TEST_TRANSLATOR_TEST_REF_PTR_CLIENT_CHILD_CPPTOC_H_
16779diff --git a/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_client_cpptoc.cc b/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_client_cpptoc.cc
16780index 7128c7a5bd..22ddee2c75 100644
16781--- a/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_client_cpptoc.cc
16782+++ b/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_client_cpptoc.cc
16783@@ -1,4 +1,4 @@
16784-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16785+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16786 // reserved. Use of this source code is governed by a BSD-style license that
16787 // can be found in the LICENSE file.
16788 //
16789@@ -9,7 +9,7 @@
16790 // implementations. See the translator.README.txt file in the tools directory
16791 // for more information.
16792 //
16793-// $hash=abf78d6b770cfcdba9a00a7b678a25cae7fcf2c3$
16794+// $hash=f331b4d8e20683281cee5cf873950c236fc6cffd$
16795 //
16796
16797 #include "libcef_dll/cpptoc/test/translator_test_ref_ptr_client_cpptoc.h"
16798diff --git a/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_client_cpptoc.h b/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_client_cpptoc.h
16799index 1622b3311e..2f752aed77 100644
16800--- a/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_client_cpptoc.h
16801+++ b/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_client_cpptoc.h
16802@@ -1,4 +1,4 @@
16803-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16804+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16805 // reserved. Use of this source code is governed by a BSD-style license that
16806 // can be found in the LICENSE file.
16807 //
16808@@ -9,7 +9,7 @@
16809 // implementations. See the translator.README.txt file in the tools directory
16810 // for more information.
16811 //
16812-// $hash=fc78ce1822a50d514a9de65ff76bc9d7784fb73c$
16813+// $hash=abcdf3e219cfeac25ddf87a82c173189d0707bbd$
16814 //
16815
16816 #ifndef CEF_LIBCEF_DLL_CPPTOC_TEST_TRANSLATOR_TEST_REF_PTR_CLIENT_CPPTOC_H_
16817diff --git a/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_child_child_cpptoc.cc b/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_child_child_cpptoc.cc
16818index 35d051454e..2709126202 100644
16819--- a/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_child_child_cpptoc.cc
16820+++ b/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_child_child_cpptoc.cc
16821@@ -1,4 +1,4 @@
16822-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16823+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16824 // reserved. Use of this source code is governed by a BSD-style license that
16825 // can be found in the LICENSE file.
16826 //
16827@@ -9,7 +9,7 @@
16828 // implementations. See the translator.README.txt file in the tools directory
16829 // for more information.
16830 //
16831-// $hash=18a2293805270394a2f06cdef8506f35ce7fff80$
16832+// $hash=693175fcf035e056074e56a8a5e39e3f5d1c218d$
16833 //
16834
16835 #include "libcef_dll/cpptoc/test/translator_test_ref_ptr_library_child_child_cpptoc.h"
16836diff --git a/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_child_child_cpptoc.h b/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_child_child_cpptoc.h
16837index 417db8ed74..f9c3a09381 100644
16838--- a/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_child_child_cpptoc.h
16839+++ b/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_child_child_cpptoc.h
16840@@ -1,4 +1,4 @@
16841-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16842+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16843 // reserved. Use of this source code is governed by a BSD-style license that
16844 // can be found in the LICENSE file.
16845 //
16846@@ -9,7 +9,7 @@
16847 // implementations. See the translator.README.txt file in the tools directory
16848 // for more information.
16849 //
16850-// $hash=c2b113097543bc9deab538235114a6b3e8aa4d9c$
16851+// $hash=602040c56e366821ec632f5675d22d5b1787d046$
16852 //
16853
16854 #ifndef CEF_LIBCEF_DLL_CPPTOC_TEST_TRANSLATOR_TEST_REF_PTR_LIBRARY_CHILD_CHILD_CPPTOC_H_
16855diff --git a/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_child_cpptoc.cc b/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_child_cpptoc.cc
16856index 524a7654e8..b807842346 100644
16857--- a/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_child_cpptoc.cc
16858+++ b/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_child_cpptoc.cc
16859@@ -1,4 +1,4 @@
16860-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16861+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16862 // reserved. Use of this source code is governed by a BSD-style license that
16863 // can be found in the LICENSE file.
16864 //
16865@@ -9,7 +9,7 @@
16866 // implementations. See the translator.README.txt file in the tools directory
16867 // for more information.
16868 //
16869-// $hash=3e59ef1f14df516b26d02d1e01e9866a5028480f$
16870+// $hash=8331f68f4339fbe375428550af8c793d455ef432$
16871 //
16872
16873 #include "libcef_dll/cpptoc/test/translator_test_ref_ptr_library_child_cpptoc.h"
16874diff --git a/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_child_cpptoc.h b/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_child_cpptoc.h
16875index ad18fc52fd..a95b9af96f 100644
16876--- a/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_child_cpptoc.h
16877+++ b/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_child_cpptoc.h
16878@@ -1,4 +1,4 @@
16879-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16880+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16881 // reserved. Use of this source code is governed by a BSD-style license that
16882 // can be found in the LICENSE file.
16883 //
16884@@ -9,7 +9,7 @@
16885 // implementations. See the translator.README.txt file in the tools directory
16886 // for more information.
16887 //
16888-// $hash=e85638774b8efd48be23c487a32360017b6525a5$
16889+// $hash=80d99f15db9d7a39f51b24769104d2daeb100ef7$
16890 //
16891
16892 #ifndef CEF_LIBCEF_DLL_CPPTOC_TEST_TRANSLATOR_TEST_REF_PTR_LIBRARY_CHILD_CPPTOC_H_
16893diff --git a/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_cpptoc.cc b/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_cpptoc.cc
16894index 0b3e3fca07..b0a9754827 100644
16895--- a/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_cpptoc.cc
16896+++ b/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_cpptoc.cc
16897@@ -1,4 +1,4 @@
16898-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16899+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16900 // reserved. Use of this source code is governed by a BSD-style license that
16901 // can be found in the LICENSE file.
16902 //
16903@@ -9,7 +9,7 @@
16904 // implementations. See the translator.README.txt file in the tools directory
16905 // for more information.
16906 //
16907-// $hash=9f1aa8c20ec6f5e8a9805a101de3105ae9482013$
16908+// $hash=215ecf50a38a26a660ebd9c9784ddba9ef9ac336$
16909 //
16910
16911 #include "libcef_dll/cpptoc/test/translator_test_ref_ptr_library_cpptoc.h"
16912diff --git a/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_cpptoc.h b/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_cpptoc.h
16913index 9b725cf852..c0011d3ce7 100644
16914--- a/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_cpptoc.h
16915+++ b/cef/libcef_dll/cpptoc/test/translator_test_ref_ptr_library_cpptoc.h
16916@@ -1,4 +1,4 @@
16917-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16918+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16919 // reserved. Use of this source code is governed by a BSD-style license that
16920 // can be found in the LICENSE file.
16921 //
16922@@ -9,7 +9,7 @@
16923 // implementations. See the translator.README.txt file in the tools directory
16924 // for more information.
16925 //
16926-// $hash=56ebac8344629561284cf0eb12fe32faaec5e015$
16927+// $hash=cf13344b75658fdc4d727598a1ca9cf1d2d9aebe$
16928 //
16929
16930 #ifndef CEF_LIBCEF_DLL_CPPTOC_TEST_TRANSLATOR_TEST_REF_PTR_LIBRARY_CPPTOC_H_
16931diff --git a/cef/libcef_dll/cpptoc/test/translator_test_scoped_client_child_cpptoc.cc b/cef/libcef_dll/cpptoc/test/translator_test_scoped_client_child_cpptoc.cc
16932index 5222856249..6912405ebf 100644
16933--- a/cef/libcef_dll/cpptoc/test/translator_test_scoped_client_child_cpptoc.cc
16934+++ b/cef/libcef_dll/cpptoc/test/translator_test_scoped_client_child_cpptoc.cc
16935@@ -1,4 +1,4 @@
16936-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16937+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16938 // reserved. Use of this source code is governed by a BSD-style license that
16939 // can be found in the LICENSE file.
16940 //
16941@@ -9,7 +9,7 @@
16942 // implementations. See the translator.README.txt file in the tools directory
16943 // for more information.
16944 //
16945-// $hash=6ad6a0fbc8d5de1c2cb88d782387091957306c09$
16946+// $hash=ba3de8f4ffca578355877eb66e19a61e337fab63$
16947 //
16948
16949 #include "libcef_dll/cpptoc/test/translator_test_scoped_client_child_cpptoc.h"
16950diff --git a/cef/libcef_dll/cpptoc/test/translator_test_scoped_client_child_cpptoc.h b/cef/libcef_dll/cpptoc/test/translator_test_scoped_client_child_cpptoc.h
16951index f90aea1ae5..afb925f57f 100644
16952--- a/cef/libcef_dll/cpptoc/test/translator_test_scoped_client_child_cpptoc.h
16953+++ b/cef/libcef_dll/cpptoc/test/translator_test_scoped_client_child_cpptoc.h
16954@@ -1,4 +1,4 @@
16955-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16956+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16957 // reserved. Use of this source code is governed by a BSD-style license that
16958 // can be found in the LICENSE file.
16959 //
16960@@ -9,7 +9,7 @@
16961 // implementations. See the translator.README.txt file in the tools directory
16962 // for more information.
16963 //
16964-// $hash=f581abe3c376579f1a5ad8ca89ea30b31bc47e04$
16965+// $hash=3a46ac0b98d0a79f8506ffc09a5c3cdcca353f29$
16966 //
16967
16968 #ifndef CEF_LIBCEF_DLL_CPPTOC_TEST_TRANSLATOR_TEST_SCOPED_CLIENT_CHILD_CPPTOC_H_
16969diff --git a/cef/libcef_dll/cpptoc/test/translator_test_scoped_client_cpptoc.cc b/cef/libcef_dll/cpptoc/test/translator_test_scoped_client_cpptoc.cc
16970index b1f60a6486..ca2550d5e7 100644
16971--- a/cef/libcef_dll/cpptoc/test/translator_test_scoped_client_cpptoc.cc
16972+++ b/cef/libcef_dll/cpptoc/test/translator_test_scoped_client_cpptoc.cc
16973@@ -1,4 +1,4 @@
16974-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16975+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16976 // reserved. Use of this source code is governed by a BSD-style license that
16977 // can be found in the LICENSE file.
16978 //
16979@@ -9,7 +9,7 @@
16980 // implementations. See the translator.README.txt file in the tools directory
16981 // for more information.
16982 //
16983-// $hash=7fbfdb7d8fd3b7e41ba55f2138e9752f301a2438$
16984+// $hash=e3323b5409f3d5e9832687e6a248cf62423c3f61$
16985 //
16986
16987 #include "libcef_dll/cpptoc/test/translator_test_scoped_client_cpptoc.h"
16988diff --git a/cef/libcef_dll/cpptoc/test/translator_test_scoped_client_cpptoc.h b/cef/libcef_dll/cpptoc/test/translator_test_scoped_client_cpptoc.h
16989index b54885e5d7..591e1c7c41 100644
16990--- a/cef/libcef_dll/cpptoc/test/translator_test_scoped_client_cpptoc.h
16991+++ b/cef/libcef_dll/cpptoc/test/translator_test_scoped_client_cpptoc.h
16992@@ -1,4 +1,4 @@
16993-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
16994+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
16995 // reserved. Use of this source code is governed by a BSD-style license that
16996 // can be found in the LICENSE file.
16997 //
16998@@ -9,7 +9,7 @@
16999 // implementations. See the translator.README.txt file in the tools directory
17000 // for more information.
17001 //
17002-// $hash=40e35e75e19b912885f7369554f9e1b6b3e3ae8f$
17003+// $hash=c639d2f671cbfeb508e95a481c0d81ee92b87c29$
17004 //
17005
17006 #ifndef CEF_LIBCEF_DLL_CPPTOC_TEST_TRANSLATOR_TEST_SCOPED_CLIENT_CPPTOC_H_
17007diff --git a/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_child_child_cpptoc.cc b/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_child_child_cpptoc.cc
17008index 22cd0629b4..e9fa6be980 100644
17009--- a/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_child_child_cpptoc.cc
17010+++ b/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_child_child_cpptoc.cc
17011@@ -1,4 +1,4 @@
17012-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17013+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17014 // reserved. Use of this source code is governed by a BSD-style license that
17015 // can be found in the LICENSE file.
17016 //
17017@@ -9,7 +9,7 @@
17018 // implementations. See the translator.README.txt file in the tools directory
17019 // for more information.
17020 //
17021-// $hash=2f64a37b4735c7d91035aec2fffa263d7d27942b$
17022+// $hash=87acc501bb139036eaf90bf24f0a2863fe43de7c$
17023 //
17024
17025 #include "libcef_dll/cpptoc/test/translator_test_scoped_library_child_child_cpptoc.h"
17026diff --git a/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_child_child_cpptoc.h b/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_child_child_cpptoc.h
17027index 138e884895..104f2992ef 100644
17028--- a/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_child_child_cpptoc.h
17029+++ b/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_child_child_cpptoc.h
17030@@ -1,4 +1,4 @@
17031-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17032+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17033 // reserved. Use of this source code is governed by a BSD-style license that
17034 // can be found in the LICENSE file.
17035 //
17036@@ -9,7 +9,7 @@
17037 // implementations. See the translator.README.txt file in the tools directory
17038 // for more information.
17039 //
17040-// $hash=44bb5b309ca442edd3dc1cb71d4bb645a8d3f96a$
17041+// $hash=26db238e377ea4db7b6c005d00dcaf270be64ce6$
17042 //
17043
17044 #ifndef CEF_LIBCEF_DLL_CPPTOC_TEST_TRANSLATOR_TEST_SCOPED_LIBRARY_CHILD_CHILD_CPPTOC_H_
17045diff --git a/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_child_cpptoc.cc b/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_child_cpptoc.cc
17046index 63ecd5eba6..9fab61ec60 100644
17047--- a/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_child_cpptoc.cc
17048+++ b/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_child_cpptoc.cc
17049@@ -1,4 +1,4 @@
17050-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17051+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17052 // reserved. Use of this source code is governed by a BSD-style license that
17053 // can be found in the LICENSE file.
17054 //
17055@@ -9,7 +9,7 @@
17056 // implementations. See the translator.README.txt file in the tools directory
17057 // for more information.
17058 //
17059-// $hash=cd7a42714195bed68aef8a200c7e1a38681558f2$
17060+// $hash=3899a0ed70d6fa40bbce192abd0ab7d63f8926e7$
17061 //
17062
17063 #include "libcef_dll/cpptoc/test/translator_test_scoped_library_child_cpptoc.h"
17064diff --git a/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_child_cpptoc.h b/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_child_cpptoc.h
17065index 71f69b780b..b6ee58dab1 100644
17066--- a/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_child_cpptoc.h
17067+++ b/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_child_cpptoc.h
17068@@ -1,4 +1,4 @@
17069-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17070+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17071 // reserved. Use of this source code is governed by a BSD-style license that
17072 // can be found in the LICENSE file.
17073 //
17074@@ -9,7 +9,7 @@
17075 // implementations. See the translator.README.txt file in the tools directory
17076 // for more information.
17077 //
17078-// $hash=71c2cd8bad04a8155d6ee8cc60814d251d237732$
17079+// $hash=87924524eab4c309d13dc3e9656c601fd65c7449$
17080 //
17081
17082 #ifndef CEF_LIBCEF_DLL_CPPTOC_TEST_TRANSLATOR_TEST_SCOPED_LIBRARY_CHILD_CPPTOC_H_
17083diff --git a/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_cpptoc.cc b/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_cpptoc.cc
17084index d07e594748..55ef550925 100644
17085--- a/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_cpptoc.cc
17086+++ b/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_cpptoc.cc
17087@@ -1,4 +1,4 @@
17088-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17089+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17090 // reserved. Use of this source code is governed by a BSD-style license that
17091 // can be found in the LICENSE file.
17092 //
17093@@ -9,7 +9,7 @@
17094 // implementations. See the translator.README.txt file in the tools directory
17095 // for more information.
17096 //
17097-// $hash=9e0c499cc30e7e762de3d5969ab6795ec50ffc08$
17098+// $hash=fdee62d52347780efcf7fd71b80df6188ce96dc0$
17099 //
17100
17101 #include "libcef_dll/cpptoc/test/translator_test_scoped_library_cpptoc.h"
17102diff --git a/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_cpptoc.h b/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_cpptoc.h
17103index f5a08f0b9b..dbdd75ed09 100644
17104--- a/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_cpptoc.h
17105+++ b/cef/libcef_dll/cpptoc/test/translator_test_scoped_library_cpptoc.h
17106@@ -1,4 +1,4 @@
17107-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17108+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17109 // reserved. Use of this source code is governed by a BSD-style license that
17110 // can be found in the LICENSE file.
17111 //
17112@@ -9,7 +9,7 @@
17113 // implementations. See the translator.README.txt file in the tools directory
17114 // for more information.
17115 //
17116-// $hash=23092b277a91aadd4a0bf09f96def851e1ecc10b$
17117+// $hash=43b0a0576a86ba1d2dda27c83af22554da773221$
17118 //
17119
17120 #ifndef CEF_LIBCEF_DLL_CPPTOC_TEST_TRANSLATOR_TEST_SCOPED_LIBRARY_CPPTOC_H_
17121diff --git a/cef/libcef_dll/cpptoc/thread_cpptoc.cc b/cef/libcef_dll/cpptoc/thread_cpptoc.cc
17122index 93fdf2ff1e..b48ba593ce 100644
17123--- a/cef/libcef_dll/cpptoc/thread_cpptoc.cc
17124+++ b/cef/libcef_dll/cpptoc/thread_cpptoc.cc
17125@@ -1,4 +1,4 @@
17126-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17127+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17128 // reserved. Use of this source code is governed by a BSD-style license that
17129 // can be found in the LICENSE file.
17130 //
17131@@ -9,7 +9,7 @@
17132 // implementations. See the translator.README.txt file in the tools directory
17133 // for more information.
17134 //
17135-// $hash=76c1b0d469d69125099c72250f1882d5ac9dd6c3$
17136+// $hash=9975067d09206080d5237a7d1e8dd70155deb554$
17137 //
17138
17139 #include "libcef_dll/cpptoc/thread_cpptoc.h"
17140diff --git a/cef/libcef_dll/cpptoc/thread_cpptoc.h b/cef/libcef_dll/cpptoc/thread_cpptoc.h
17141index a22025a403..66da3dbc79 100644
17142--- a/cef/libcef_dll/cpptoc/thread_cpptoc.h
17143+++ b/cef/libcef_dll/cpptoc/thread_cpptoc.h
17144@@ -1,4 +1,4 @@
17145-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17146+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17147 // reserved. Use of this source code is governed by a BSD-style license that
17148 // can be found in the LICENSE file.
17149 //
17150@@ -9,7 +9,7 @@
17151 // implementations. See the translator.README.txt file in the tools directory
17152 // for more information.
17153 //
17154-// $hash=bc01937181dbc0a88c396039a65927282bfb7c2d$
17155+// $hash=820a6a8e017c6ba2a19f5c0b8db0f8aa628a0cfa$
17156 //
17157
17158 #ifndef CEF_LIBCEF_DLL_CPPTOC_THREAD_CPPTOC_H_
17159diff --git a/cef/libcef_dll/cpptoc/urlrequest_client_cpptoc.cc b/cef/libcef_dll/cpptoc/urlrequest_client_cpptoc.cc
17160index 80235e4d89..dc44527004 100644
17161--- a/cef/libcef_dll/cpptoc/urlrequest_client_cpptoc.cc
17162+++ b/cef/libcef_dll/cpptoc/urlrequest_client_cpptoc.cc
17163@@ -1,4 +1,4 @@
17164-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17165+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17166 // reserved. Use of this source code is governed by a BSD-style license that
17167 // can be found in the LICENSE file.
17168 //
17169@@ -9,7 +9,7 @@
17170 // implementations. See the translator.README.txt file in the tools directory
17171 // for more information.
17172 //
17173-// $hash=1eada3207c7afba6965694bf87faff6839c1d955$
17174+// $hash=db92b5330f0b984051a202144f77b389501a260e$
17175 //
17176
17177 #include "libcef_dll/cpptoc/urlrequest_client_cpptoc.h"
17178diff --git a/cef/libcef_dll/cpptoc/urlrequest_client_cpptoc.h b/cef/libcef_dll/cpptoc/urlrequest_client_cpptoc.h
17179index 863723cfe4..085a600082 100644
17180--- a/cef/libcef_dll/cpptoc/urlrequest_client_cpptoc.h
17181+++ b/cef/libcef_dll/cpptoc/urlrequest_client_cpptoc.h
17182@@ -1,4 +1,4 @@
17183-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17184+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17185 // reserved. Use of this source code is governed by a BSD-style license that
17186 // can be found in the LICENSE file.
17187 //
17188@@ -9,7 +9,7 @@
17189 // implementations. See the translator.README.txt file in the tools directory
17190 // for more information.
17191 //
17192-// $hash=bf2501304e3a0c929b83b1a50bd62a6535183dd2$
17193+// $hash=6ab5f8f6ff4a68382bd5e239ad2c8e2c12c39c6d$
17194 //
17195
17196 #ifndef CEF_LIBCEF_DLL_CPPTOC_URLREQUEST_CLIENT_CPPTOC_H_
17197diff --git a/cef/libcef_dll/cpptoc/urlrequest_cpptoc.cc b/cef/libcef_dll/cpptoc/urlrequest_cpptoc.cc
17198index 9c75f2152f..805b66a820 100644
17199--- a/cef/libcef_dll/cpptoc/urlrequest_cpptoc.cc
17200+++ b/cef/libcef_dll/cpptoc/urlrequest_cpptoc.cc
17201@@ -1,4 +1,4 @@
17202-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17203+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17204 // reserved. Use of this source code is governed by a BSD-style license that
17205 // can be found in the LICENSE file.
17206 //
17207@@ -9,7 +9,7 @@
17208 // implementations. See the translator.README.txt file in the tools directory
17209 // for more information.
17210 //
17211-// $hash=babedf1f88ab9ebee69197984318ec63d68cbe17$
17212+// $hash=6193670d2d0577eaf226bd1825cde7b3f70c0f68$
17213 //
17214
17215 #include "libcef_dll/cpptoc/urlrequest_cpptoc.h"
17216diff --git a/cef/libcef_dll/cpptoc/urlrequest_cpptoc.h b/cef/libcef_dll/cpptoc/urlrequest_cpptoc.h
17217index c8595c3b84..b798d65885 100644
17218--- a/cef/libcef_dll/cpptoc/urlrequest_cpptoc.h
17219+++ b/cef/libcef_dll/cpptoc/urlrequest_cpptoc.h
17220@@ -1,4 +1,4 @@
17221-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17222+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17223 // reserved. Use of this source code is governed by a BSD-style license that
17224 // can be found in the LICENSE file.
17225 //
17226@@ -9,7 +9,7 @@
17227 // implementations. See the translator.README.txt file in the tools directory
17228 // for more information.
17229 //
17230-// $hash=4c2ae733562688b1dcd04b328a16c109125d00b0$
17231+// $hash=1902918d90c40d3b524c0f7adcb56dc9a565df4d$
17232 //
17233
17234 #ifndef CEF_LIBCEF_DLL_CPPTOC_URLREQUEST_CPPTOC_H_
17235diff --git a/cef/libcef_dll/cpptoc/v8accessor_cpptoc.cc b/cef/libcef_dll/cpptoc/v8accessor_cpptoc.cc
17236index 7d4e5ed419..a6bfe77e3b 100644
17237--- a/cef/libcef_dll/cpptoc/v8accessor_cpptoc.cc
17238+++ b/cef/libcef_dll/cpptoc/v8accessor_cpptoc.cc
17239@@ -1,4 +1,4 @@
17240-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17241+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17242 // reserved. Use of this source code is governed by a BSD-style license that
17243 // can be found in the LICENSE file.
17244 //
17245@@ -9,7 +9,7 @@
17246 // implementations. See the translator.README.txt file in the tools directory
17247 // for more information.
17248 //
17249-// $hash=2154b968dc696995bce9e9f1e99078196cc75070$
17250+// $hash=35161ccb0b72898e250d905b4b245b4839fe7ecc$
17251 //
17252
17253 #include "libcef_dll/cpptoc/v8accessor_cpptoc.h"
17254diff --git a/cef/libcef_dll/cpptoc/v8accessor_cpptoc.h b/cef/libcef_dll/cpptoc/v8accessor_cpptoc.h
17255index ed351000b9..dd68c064bb 100644
17256--- a/cef/libcef_dll/cpptoc/v8accessor_cpptoc.h
17257+++ b/cef/libcef_dll/cpptoc/v8accessor_cpptoc.h
17258@@ -1,4 +1,4 @@
17259-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17260+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17261 // reserved. Use of this source code is governed by a BSD-style license that
17262 // can be found in the LICENSE file.
17263 //
17264@@ -9,7 +9,7 @@
17265 // implementations. See the translator.README.txt file in the tools directory
17266 // for more information.
17267 //
17268-// $hash=3c32ab7ccf4b9d152086d2cdab33a6a818faa359$
17269+// $hash=cbf062496a14d367e643c3e52afd460df4176fde$
17270 //
17271
17272 #ifndef CEF_LIBCEF_DLL_CPPTOC_V8ACCESSOR_CPPTOC_H_
17273diff --git a/cef/libcef_dll/cpptoc/v8array_buffer_release_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/v8array_buffer_release_callback_cpptoc.cc
17274index 620c41d57d..9c5e28070d 100644
17275--- a/cef/libcef_dll/cpptoc/v8array_buffer_release_callback_cpptoc.cc
17276+++ b/cef/libcef_dll/cpptoc/v8array_buffer_release_callback_cpptoc.cc
17277@@ -1,4 +1,4 @@
17278-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17279+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17280 // reserved. Use of this source code is governed by a BSD-style license that
17281 // can be found in the LICENSE file.
17282 //
17283@@ -9,7 +9,7 @@
17284 // implementations. See the translator.README.txt file in the tools directory
17285 // for more information.
17286 //
17287-// $hash=1368f0e4f6a8f5cac7b4d78f4ff6e1db59270635$
17288+// $hash=0a7885c5553c99c1ff7539c8aba3a340aa6f3d08$
17289 //
17290
17291 #include "libcef_dll/cpptoc/v8array_buffer_release_callback_cpptoc.h"
17292diff --git a/cef/libcef_dll/cpptoc/v8array_buffer_release_callback_cpptoc.h b/cef/libcef_dll/cpptoc/v8array_buffer_release_callback_cpptoc.h
17293index 166e1b553a..a5b0463b7b 100644
17294--- a/cef/libcef_dll/cpptoc/v8array_buffer_release_callback_cpptoc.h
17295+++ b/cef/libcef_dll/cpptoc/v8array_buffer_release_callback_cpptoc.h
17296@@ -1,4 +1,4 @@
17297-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17298+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17299 // reserved. Use of this source code is governed by a BSD-style license that
17300 // can be found in the LICENSE file.
17301 //
17302@@ -9,7 +9,7 @@
17303 // implementations. See the translator.README.txt file in the tools directory
17304 // for more information.
17305 //
17306-// $hash=f81c22987c573f1f41e87bf1476d485da44b7161$
17307+// $hash=aa87e37fdfa915cb160cb4b7577c46b9e903a698$
17308 //
17309
17310 #ifndef CEF_LIBCEF_DLL_CPPTOC_V8ARRAY_BUFFER_RELEASE_CALLBACK_CPPTOC_H_
17311diff --git a/cef/libcef_dll/cpptoc/v8context_cpptoc.cc b/cef/libcef_dll/cpptoc/v8context_cpptoc.cc
17312index 26e674ced9..fc02f3c249 100644
17313--- a/cef/libcef_dll/cpptoc/v8context_cpptoc.cc
17314+++ b/cef/libcef_dll/cpptoc/v8context_cpptoc.cc
17315@@ -1,4 +1,4 @@
17316-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17317+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17318 // reserved. Use of this source code is governed by a BSD-style license that
17319 // can be found in the LICENSE file.
17320 //
17321@@ -9,7 +9,7 @@
17322 // implementations. See the translator.README.txt file in the tools directory
17323 // for more information.
17324 //
17325-// $hash=82140c8c02aa0cf379737c20e86ba64e2f190307$
17326+// $hash=5fb43e3f68ef5f431fe6d6f84d399dc0cd292d7d$
17327 //
17328
17329 #include "libcef_dll/cpptoc/v8context_cpptoc.h"
17330diff --git a/cef/libcef_dll/cpptoc/v8context_cpptoc.h b/cef/libcef_dll/cpptoc/v8context_cpptoc.h
17331index 5831969363..073ea9e248 100644
17332--- a/cef/libcef_dll/cpptoc/v8context_cpptoc.h
17333+++ b/cef/libcef_dll/cpptoc/v8context_cpptoc.h
17334@@ -1,4 +1,4 @@
17335-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17336+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17337 // reserved. Use of this source code is governed by a BSD-style license that
17338 // can be found in the LICENSE file.
17339 //
17340@@ -9,7 +9,7 @@
17341 // implementations. See the translator.README.txt file in the tools directory
17342 // for more information.
17343 //
17344-// $hash=f784e9bcdfef9208ebec6b7668cbb159937f31d5$
17345+// $hash=e0d02da9f3e8216559bd80e50b0e3d061455b0af$
17346 //
17347
17348 #ifndef CEF_LIBCEF_DLL_CPPTOC_V8CONTEXT_CPPTOC_H_
17349diff --git a/cef/libcef_dll/cpptoc/v8exception_cpptoc.cc b/cef/libcef_dll/cpptoc/v8exception_cpptoc.cc
17350index d8c779c77b..c142b061d5 100644
17351--- a/cef/libcef_dll/cpptoc/v8exception_cpptoc.cc
17352+++ b/cef/libcef_dll/cpptoc/v8exception_cpptoc.cc
17353@@ -1,4 +1,4 @@
17354-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17355+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17356 // reserved. Use of this source code is governed by a BSD-style license that
17357 // can be found in the LICENSE file.
17358 //
17359@@ -9,7 +9,7 @@
17360 // implementations. See the translator.README.txt file in the tools directory
17361 // for more information.
17362 //
17363-// $hash=fb2881ca02cd3b2ce66eb00412cbe16d08e260a3$
17364+// $hash=bcf73c22701825bb552e78ece2e62c1e6b8da282$
17365 //
17366
17367 #include "libcef_dll/cpptoc/v8exception_cpptoc.h"
17368diff --git a/cef/libcef_dll/cpptoc/v8exception_cpptoc.h b/cef/libcef_dll/cpptoc/v8exception_cpptoc.h
17369index a0fb1060d6..83f329540c 100644
17370--- a/cef/libcef_dll/cpptoc/v8exception_cpptoc.h
17371+++ b/cef/libcef_dll/cpptoc/v8exception_cpptoc.h
17372@@ -1,4 +1,4 @@
17373-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17374+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17375 // reserved. Use of this source code is governed by a BSD-style license that
17376 // can be found in the LICENSE file.
17377 //
17378@@ -9,7 +9,7 @@
17379 // implementations. See the translator.README.txt file in the tools directory
17380 // for more information.
17381 //
17382-// $hash=d91b6b735d39d79b7d0a683f6d1217893449d433$
17383+// $hash=8d6ac0b98bc8a8efc173365c7542907fe1d229ae$
17384 //
17385
17386 #ifndef CEF_LIBCEF_DLL_CPPTOC_V8EXCEPTION_CPPTOC_H_
17387diff --git a/cef/libcef_dll/cpptoc/v8handler_cpptoc.cc b/cef/libcef_dll/cpptoc/v8handler_cpptoc.cc
17388index 4f3d539e2e..63fe01b9c9 100644
17389--- a/cef/libcef_dll/cpptoc/v8handler_cpptoc.cc
17390+++ b/cef/libcef_dll/cpptoc/v8handler_cpptoc.cc
17391@@ -1,4 +1,4 @@
17392-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17393+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17394 // reserved. Use of this source code is governed by a BSD-style license that
17395 // can be found in the LICENSE file.
17396 //
17397@@ -9,7 +9,7 @@
17398 // implementations. See the translator.README.txt file in the tools directory
17399 // for more information.
17400 //
17401-// $hash=93370fe9d4bdbd5eeb425fd1909ef746b48c3b9a$
17402+// $hash=7a072d883f46856cf79bf868560689797b31e362$
17403 //
17404
17405 #include "libcef_dll/cpptoc/v8handler_cpptoc.h"
17406diff --git a/cef/libcef_dll/cpptoc/v8handler_cpptoc.h b/cef/libcef_dll/cpptoc/v8handler_cpptoc.h
17407index c51e480f72..bbf4e955e4 100644
17408--- a/cef/libcef_dll/cpptoc/v8handler_cpptoc.h
17409+++ b/cef/libcef_dll/cpptoc/v8handler_cpptoc.h
17410@@ -1,4 +1,4 @@
17411-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17412+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17413 // reserved. Use of this source code is governed by a BSD-style license that
17414 // can be found in the LICENSE file.
17415 //
17416@@ -9,7 +9,7 @@
17417 // implementations. See the translator.README.txt file in the tools directory
17418 // for more information.
17419 //
17420-// $hash=6be8fd993c46effa1b6c0a953c253d478a14c302$
17421+// $hash=8a1d3087cb27c365c8972bc22f712c8433db37a7$
17422 //
17423
17424 #ifndef CEF_LIBCEF_DLL_CPPTOC_V8HANDLER_CPPTOC_H_
17425diff --git a/cef/libcef_dll/cpptoc/v8interceptor_cpptoc.cc b/cef/libcef_dll/cpptoc/v8interceptor_cpptoc.cc
17426index 40ccdb127d..6a590da10e 100644
17427--- a/cef/libcef_dll/cpptoc/v8interceptor_cpptoc.cc
17428+++ b/cef/libcef_dll/cpptoc/v8interceptor_cpptoc.cc
17429@@ -1,4 +1,4 @@
17430-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17431+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17432 // reserved. Use of this source code is governed by a BSD-style license that
17433 // can be found in the LICENSE file.
17434 //
17435@@ -9,7 +9,7 @@
17436 // implementations. See the translator.README.txt file in the tools directory
17437 // for more information.
17438 //
17439-// $hash=eff938a85e5387ea919802ce138423478e0fab90$
17440+// $hash=fd651a7fef9dbbce9765c8200660c4057808e6cc$
17441 //
17442
17443 #include "libcef_dll/cpptoc/v8interceptor_cpptoc.h"
17444diff --git a/cef/libcef_dll/cpptoc/v8interceptor_cpptoc.h b/cef/libcef_dll/cpptoc/v8interceptor_cpptoc.h
17445index a7014270fa..e13ff18779 100644
17446--- a/cef/libcef_dll/cpptoc/v8interceptor_cpptoc.h
17447+++ b/cef/libcef_dll/cpptoc/v8interceptor_cpptoc.h
17448@@ -1,4 +1,4 @@
17449-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17450+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17451 // reserved. Use of this source code is governed by a BSD-style license that
17452 // can be found in the LICENSE file.
17453 //
17454@@ -9,7 +9,7 @@
17455 // implementations. See the translator.README.txt file in the tools directory
17456 // for more information.
17457 //
17458-// $hash=17ac0fc7cb770fcd11639676dcf60dcbb76ee992$
17459+// $hash=ea56a3340775acdee89516a9e1107f725e0f8c47$
17460 //
17461
17462 #ifndef CEF_LIBCEF_DLL_CPPTOC_V8INTERCEPTOR_CPPTOC_H_
17463diff --git a/cef/libcef_dll/cpptoc/v8stack_frame_cpptoc.cc b/cef/libcef_dll/cpptoc/v8stack_frame_cpptoc.cc
17464index 09f097eef8..68cf92f231 100644
17465--- a/cef/libcef_dll/cpptoc/v8stack_frame_cpptoc.cc
17466+++ b/cef/libcef_dll/cpptoc/v8stack_frame_cpptoc.cc
17467@@ -1,4 +1,4 @@
17468-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17469+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17470 // reserved. Use of this source code is governed by a BSD-style license that
17471 // can be found in the LICENSE file.
17472 //
17473@@ -9,7 +9,7 @@
17474 // implementations. See the translator.README.txt file in the tools directory
17475 // for more information.
17476 //
17477-// $hash=ea27a5d024714e139668a6ff73c91869aaa38440$
17478+// $hash=bcf0ccd2d4220eaa8f31b1f4f9b64440f81f563e$
17479 //
17480
17481 #include "libcef_dll/cpptoc/v8stack_frame_cpptoc.h"
17482diff --git a/cef/libcef_dll/cpptoc/v8stack_frame_cpptoc.h b/cef/libcef_dll/cpptoc/v8stack_frame_cpptoc.h
17483index 940617d6c6..2c4659cbd5 100644
17484--- a/cef/libcef_dll/cpptoc/v8stack_frame_cpptoc.h
17485+++ b/cef/libcef_dll/cpptoc/v8stack_frame_cpptoc.h
17486@@ -1,4 +1,4 @@
17487-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17488+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17489 // reserved. Use of this source code is governed by a BSD-style license that
17490 // can be found in the LICENSE file.
17491 //
17492@@ -9,7 +9,7 @@
17493 // implementations. See the translator.README.txt file in the tools directory
17494 // for more information.
17495 //
17496-// $hash=106979c7e1d467ec8ef04ffa8bc29523239b5622$
17497+// $hash=08e9e87d39ea58ed8bd7edc6dbf7cf2873218eee$
17498 //
17499
17500 #ifndef CEF_LIBCEF_DLL_CPPTOC_V8STACK_FRAME_CPPTOC_H_
17501diff --git a/cef/libcef_dll/cpptoc/v8stack_trace_cpptoc.cc b/cef/libcef_dll/cpptoc/v8stack_trace_cpptoc.cc
17502index 0a93e94b7b..6e33464a3c 100644
17503--- a/cef/libcef_dll/cpptoc/v8stack_trace_cpptoc.cc
17504+++ b/cef/libcef_dll/cpptoc/v8stack_trace_cpptoc.cc
17505@@ -1,4 +1,4 @@
17506-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17507+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17508 // reserved. Use of this source code is governed by a BSD-style license that
17509 // can be found in the LICENSE file.
17510 //
17511@@ -9,7 +9,7 @@
17512 // implementations. See the translator.README.txt file in the tools directory
17513 // for more information.
17514 //
17515-// $hash=4e92d16ae1359b0cb86fe0de90a18a9d891c8cba$
17516+// $hash=69faf917e01945c29e5f20a00abbcc69aac7c0a7$
17517 //
17518
17519 #include "libcef_dll/cpptoc/v8stack_trace_cpptoc.h"
17520diff --git a/cef/libcef_dll/cpptoc/v8stack_trace_cpptoc.h b/cef/libcef_dll/cpptoc/v8stack_trace_cpptoc.h
17521index 724ea349b1..d7c2f079f5 100644
17522--- a/cef/libcef_dll/cpptoc/v8stack_trace_cpptoc.h
17523+++ b/cef/libcef_dll/cpptoc/v8stack_trace_cpptoc.h
17524@@ -1,4 +1,4 @@
17525-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17526+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17527 // reserved. Use of this source code is governed by a BSD-style license that
17528 // can be found in the LICENSE file.
17529 //
17530@@ -9,7 +9,7 @@
17531 // implementations. See the translator.README.txt file in the tools directory
17532 // for more information.
17533 //
17534-// $hash=4829a14f35a33b02245ccf712f6be30b1395fbef$
17535+// $hash=01a737cd8e6ea8e747d0a404c4b370a620eada94$
17536 //
17537
17538 #ifndef CEF_LIBCEF_DLL_CPPTOC_V8STACK_TRACE_CPPTOC_H_
17539diff --git a/cef/libcef_dll/cpptoc/v8value_cpptoc.cc b/cef/libcef_dll/cpptoc/v8value_cpptoc.cc
17540index 98e18132d5..49dd142b07 100644
17541--- a/cef/libcef_dll/cpptoc/v8value_cpptoc.cc
17542+++ b/cef/libcef_dll/cpptoc/v8value_cpptoc.cc
17543@@ -1,4 +1,4 @@
17544-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17545+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17546 // reserved. Use of this source code is governed by a BSD-style license that
17547 // can be found in the LICENSE file.
17548 //
17549@@ -9,7 +9,7 @@
17550 // implementations. See the translator.README.txt file in the tools directory
17551 // for more information.
17552 //
17553-// $hash=288b1bb2700fef65ace91a58f8b422dae6bc45da$
17554+// $hash=0cb915346153880872b44bd1f857c24787ed52af$
17555 //
17556
17557 #include "libcef_dll/cpptoc/v8value_cpptoc.h"
17558diff --git a/cef/libcef_dll/cpptoc/v8value_cpptoc.h b/cef/libcef_dll/cpptoc/v8value_cpptoc.h
17559index d2ce26306e..363743ce1f 100644
17560--- a/cef/libcef_dll/cpptoc/v8value_cpptoc.h
17561+++ b/cef/libcef_dll/cpptoc/v8value_cpptoc.h
17562@@ -1,4 +1,4 @@
17563-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17564+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17565 // reserved. Use of this source code is governed by a BSD-style license that
17566 // can be found in the LICENSE file.
17567 //
17568@@ -9,7 +9,7 @@
17569 // implementations. See the translator.README.txt file in the tools directory
17570 // for more information.
17571 //
17572-// $hash=b557553701e3677888ba29ed0a9822cc29eda5f1$
17573+// $hash=0d07225656f5400129aca5cef75bbefcaaacb70d$
17574 //
17575
17576 #ifndef CEF_LIBCEF_DLL_CPPTOC_V8VALUE_CPPTOC_H_
17577diff --git a/cef/libcef_dll/cpptoc/value_cpptoc.cc b/cef/libcef_dll/cpptoc/value_cpptoc.cc
17578index 7dd4997ac5..1d4001b723 100644
17579--- a/cef/libcef_dll/cpptoc/value_cpptoc.cc
17580+++ b/cef/libcef_dll/cpptoc/value_cpptoc.cc
17581@@ -1,4 +1,4 @@
17582-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17583+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17584 // reserved. Use of this source code is governed by a BSD-style license that
17585 // can be found in the LICENSE file.
17586 //
17587@@ -9,7 +9,7 @@
17588 // implementations. See the translator.README.txt file in the tools directory
17589 // for more information.
17590 //
17591-// $hash=794e611061ac906fbcb965ae98cc888a98bd4532$
17592+// $hash=680adcc74e385af7d83fa8b28b36b2215bc20f2b$
17593 //
17594
17595 #include "libcef_dll/cpptoc/value_cpptoc.h"
17596diff --git a/cef/libcef_dll/cpptoc/value_cpptoc.h b/cef/libcef_dll/cpptoc/value_cpptoc.h
17597index 3ca9dc59ed..72b6a3dab4 100644
17598--- a/cef/libcef_dll/cpptoc/value_cpptoc.h
17599+++ b/cef/libcef_dll/cpptoc/value_cpptoc.h
17600@@ -1,4 +1,4 @@
17601-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17602+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17603 // reserved. Use of this source code is governed by a BSD-style license that
17604 // can be found in the LICENSE file.
17605 //
17606@@ -9,7 +9,7 @@
17607 // implementations. See the translator.README.txt file in the tools directory
17608 // for more information.
17609 //
17610-// $hash=d11c48929fdd9d70276a704906ef50af00aae3df$
17611+// $hash=108679f1ab32ec8b2e0ffe77602e89603f6c279f$
17612 //
17613
17614 #ifndef CEF_LIBCEF_DLL_CPPTOC_VALUE_CPPTOC_H_
17615diff --git a/cef/libcef_dll/cpptoc/views/box_layout_cpptoc.cc b/cef/libcef_dll/cpptoc/views/box_layout_cpptoc.cc
17616index 4f4e62d619..4e7d723cde 100644
17617--- a/cef/libcef_dll/cpptoc/views/box_layout_cpptoc.cc
17618+++ b/cef/libcef_dll/cpptoc/views/box_layout_cpptoc.cc
17619@@ -1,4 +1,4 @@
17620-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17621+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17622 // reserved. Use of this source code is governed by a BSD-style license that
17623 // can be found in the LICENSE file.
17624 //
17625@@ -9,7 +9,7 @@
17626 // implementations. See the translator.README.txt file in the tools directory
17627 // for more information.
17628 //
17629-// $hash=55c7899976647c9475d834793fcde505a8f6f1c2$
17630+// $hash=95678987551b26755e5dc718c3cad2e975b574c7$
17631 //
17632
17633 #include "libcef_dll/cpptoc/views/box_layout_cpptoc.h"
17634diff --git a/cef/libcef_dll/cpptoc/views/box_layout_cpptoc.h b/cef/libcef_dll/cpptoc/views/box_layout_cpptoc.h
17635index a9f25ef123..e67288a57d 100644
17636--- a/cef/libcef_dll/cpptoc/views/box_layout_cpptoc.h
17637+++ b/cef/libcef_dll/cpptoc/views/box_layout_cpptoc.h
17638@@ -1,4 +1,4 @@
17639-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17640+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17641 // reserved. Use of this source code is governed by a BSD-style license that
17642 // can be found in the LICENSE file.
17643 //
17644@@ -9,7 +9,7 @@
17645 // implementations. See the translator.README.txt file in the tools directory
17646 // for more information.
17647 //
17648-// $hash=2055b5f83c5c858cabf72c8f63a5e13e9a0cc2bc$
17649+// $hash=e665defe8e51c3405d75a3f1d9f382f6e9e9f81f$
17650 //
17651
17652 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_BOX_LAYOUT_CPPTOC_H_
17653diff --git a/cef/libcef_dll/cpptoc/views/browser_view_cpptoc.cc b/cef/libcef_dll/cpptoc/views/browser_view_cpptoc.cc
17654index bed65f7d6c..76a3e17c86 100644
17655--- a/cef/libcef_dll/cpptoc/views/browser_view_cpptoc.cc
17656+++ b/cef/libcef_dll/cpptoc/views/browser_view_cpptoc.cc
17657@@ -1,4 +1,4 @@
17658-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17659+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17660 // reserved. Use of this source code is governed by a BSD-style license that
17661 // can be found in the LICENSE file.
17662 //
17663@@ -9,7 +9,7 @@
17664 // implementations. See the translator.README.txt file in the tools directory
17665 // for more information.
17666 //
17667-// $hash=312985bb5cc971d1fe9d77af1f985f6a544e9db5$
17668+// $hash=0a875e943251bc65ff4c55034d00d481d8fbdf3a$
17669 //
17670
17671 #include "libcef_dll/cpptoc/views/browser_view_cpptoc.h"
17672diff --git a/cef/libcef_dll/cpptoc/views/browser_view_cpptoc.h b/cef/libcef_dll/cpptoc/views/browser_view_cpptoc.h
17673index 4dffc73c51..f4e36ae4f1 100644
17674--- a/cef/libcef_dll/cpptoc/views/browser_view_cpptoc.h
17675+++ b/cef/libcef_dll/cpptoc/views/browser_view_cpptoc.h
17676@@ -1,4 +1,4 @@
17677-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17678+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17679 // reserved. Use of this source code is governed by a BSD-style license that
17680 // can be found in the LICENSE file.
17681 //
17682@@ -9,7 +9,7 @@
17683 // implementations. See the translator.README.txt file in the tools directory
17684 // for more information.
17685 //
17686-// $hash=794d1abc9f7a68954a7690ac5be01bb93c83fedd$
17687+// $hash=dc07da6d436a7d99817045690a3932010cd1acfd$
17688 //
17689
17690 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_BROWSER_VIEW_CPPTOC_H_
17691diff --git a/cef/libcef_dll/cpptoc/views/browser_view_delegate_cpptoc.cc b/cef/libcef_dll/cpptoc/views/browser_view_delegate_cpptoc.cc
17692index 6cdb81427d..438686a921 100644
17693--- a/cef/libcef_dll/cpptoc/views/browser_view_delegate_cpptoc.cc
17694+++ b/cef/libcef_dll/cpptoc/views/browser_view_delegate_cpptoc.cc
17695@@ -1,4 +1,4 @@
17696-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17697+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17698 // reserved. Use of this source code is governed by a BSD-style license that
17699 // can be found in the LICENSE file.
17700 //
17701@@ -9,7 +9,7 @@
17702 // implementations. See the translator.README.txt file in the tools directory
17703 // for more information.
17704 //
17705-// $hash=8e8daae6a8ed718582045ea42e16906813b77337$
17706+// $hash=dabaa6ca5d073ae87ea2e2ce0abc846ccdfc9dc3$
17707 //
17708
17709 #include "libcef_dll/cpptoc/views/browser_view_delegate_cpptoc.h"
17710diff --git a/cef/libcef_dll/cpptoc/views/browser_view_delegate_cpptoc.h b/cef/libcef_dll/cpptoc/views/browser_view_delegate_cpptoc.h
17711index 0774cee5d8..feb502ae7e 100644
17712--- a/cef/libcef_dll/cpptoc/views/browser_view_delegate_cpptoc.h
17713+++ b/cef/libcef_dll/cpptoc/views/browser_view_delegate_cpptoc.h
17714@@ -1,4 +1,4 @@
17715-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17716+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17717 // reserved. Use of this source code is governed by a BSD-style license that
17718 // can be found in the LICENSE file.
17719 //
17720@@ -9,7 +9,7 @@
17721 // implementations. See the translator.README.txt file in the tools directory
17722 // for more information.
17723 //
17724-// $hash=2b3f4fa67ceac32d479043f0b8012c36a4c4ee1f$
17725+// $hash=5bd6bbfbc74b0059f073463c28b74c9b31916e59$
17726 //
17727
17728 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_BROWSER_VIEW_DELEGATE_CPPTOC_H_
17729diff --git a/cef/libcef_dll/cpptoc/views/button_cpptoc.cc b/cef/libcef_dll/cpptoc/views/button_cpptoc.cc
17730index d8cea85c0d..7ceb13b8bd 100644
17731--- a/cef/libcef_dll/cpptoc/views/button_cpptoc.cc
17732+++ b/cef/libcef_dll/cpptoc/views/button_cpptoc.cc
17733@@ -1,4 +1,4 @@
17734-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17735+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17736 // reserved. Use of this source code is governed by a BSD-style license that
17737 // can be found in the LICENSE file.
17738 //
17739@@ -9,7 +9,7 @@
17740 // implementations. See the translator.README.txt file in the tools directory
17741 // for more information.
17742 //
17743-// $hash=a0060b09d6eb4bbeeb69e4b80dccccee394d600e$
17744+// $hash=52a1826441955ccb7d07f28dfa804bae496ff48e$
17745 //
17746
17747 #include "libcef_dll/cpptoc/views/button_cpptoc.h"
17748diff --git a/cef/libcef_dll/cpptoc/views/button_cpptoc.h b/cef/libcef_dll/cpptoc/views/button_cpptoc.h
17749index 944b991b0d..5848a3fd83 100644
17750--- a/cef/libcef_dll/cpptoc/views/button_cpptoc.h
17751+++ b/cef/libcef_dll/cpptoc/views/button_cpptoc.h
17752@@ -1,4 +1,4 @@
17753-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17754+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17755 // reserved. Use of this source code is governed by a BSD-style license that
17756 // can be found in the LICENSE file.
17757 //
17758@@ -9,7 +9,7 @@
17759 // implementations. See the translator.README.txt file in the tools directory
17760 // for more information.
17761 //
17762-// $hash=2c5ca0129836b556c9146b810ef8bf7bb873b966$
17763+// $hash=60660c0973fee97e850fcf4026b57a6f367ea294$
17764 //
17765
17766 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_BUTTON_CPPTOC_H_
17767diff --git a/cef/libcef_dll/cpptoc/views/button_delegate_cpptoc.cc b/cef/libcef_dll/cpptoc/views/button_delegate_cpptoc.cc
17768index 2870db70e8..fd4fe03c04 100644
17769--- a/cef/libcef_dll/cpptoc/views/button_delegate_cpptoc.cc
17770+++ b/cef/libcef_dll/cpptoc/views/button_delegate_cpptoc.cc
17771@@ -1,4 +1,4 @@
17772-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17773+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17774 // reserved. Use of this source code is governed by a BSD-style license that
17775 // can be found in the LICENSE file.
17776 //
17777@@ -9,7 +9,7 @@
17778 // implementations. See the translator.README.txt file in the tools directory
17779 // for more information.
17780 //
17781-// $hash=52a0deb8b7ae62e474acb1474cf922c3e9a04f14$
17782+// $hash=c89d335c457addc921b568a9ccde121030513b40$
17783 //
17784
17785 #include "libcef_dll/cpptoc/views/button_delegate_cpptoc.h"
17786diff --git a/cef/libcef_dll/cpptoc/views/button_delegate_cpptoc.h b/cef/libcef_dll/cpptoc/views/button_delegate_cpptoc.h
17787index 1869fa31db..3a682e09bc 100644
17788--- a/cef/libcef_dll/cpptoc/views/button_delegate_cpptoc.h
17789+++ b/cef/libcef_dll/cpptoc/views/button_delegate_cpptoc.h
17790@@ -1,4 +1,4 @@
17791-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17792+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17793 // reserved. Use of this source code is governed by a BSD-style license that
17794 // can be found in the LICENSE file.
17795 //
17796@@ -9,7 +9,7 @@
17797 // implementations. See the translator.README.txt file in the tools directory
17798 // for more information.
17799 //
17800-// $hash=2f943860c8504116aea73d809c15f219634ab556$
17801+// $hash=f3b8ad78e8614f873ee581697ac29cad49a19260$
17802 //
17803
17804 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_BUTTON_DELEGATE_CPPTOC_H_
17805diff --git a/cef/libcef_dll/cpptoc/views/display_cpptoc.cc b/cef/libcef_dll/cpptoc/views/display_cpptoc.cc
17806index 2957c4fdbf..470fee9d11 100644
17807--- a/cef/libcef_dll/cpptoc/views/display_cpptoc.cc
17808+++ b/cef/libcef_dll/cpptoc/views/display_cpptoc.cc
17809@@ -1,4 +1,4 @@
17810-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17811+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17812 // reserved. Use of this source code is governed by a BSD-style license that
17813 // can be found in the LICENSE file.
17814 //
17815@@ -9,7 +9,7 @@
17816 // implementations. See the translator.README.txt file in the tools directory
17817 // for more information.
17818 //
17819-// $hash=b0c8aeb7a75132760dd02766bf2d65281f0bc67e$
17820+// $hash=546b8f890852fb4df26a85aec6b83effe1bdc6e6$
17821 //
17822
17823 #include "libcef_dll/cpptoc/views/display_cpptoc.h"
17824diff --git a/cef/libcef_dll/cpptoc/views/display_cpptoc.h b/cef/libcef_dll/cpptoc/views/display_cpptoc.h
17825index d243baa4e6..6ae1863347 100644
17826--- a/cef/libcef_dll/cpptoc/views/display_cpptoc.h
17827+++ b/cef/libcef_dll/cpptoc/views/display_cpptoc.h
17828@@ -1,4 +1,4 @@
17829-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17830+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17831 // reserved. Use of this source code is governed by a BSD-style license that
17832 // can be found in the LICENSE file.
17833 //
17834@@ -9,7 +9,7 @@
17835 // implementations. See the translator.README.txt file in the tools directory
17836 // for more information.
17837 //
17838-// $hash=054ef978c8c9f0610df054bb1a3b647e53be6223$
17839+// $hash=5918cca150c476ead77121bb93599c763a3e13e7$
17840 //
17841
17842 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_DISPLAY_CPPTOC_H_
17843diff --git a/cef/libcef_dll/cpptoc/views/fill_layout_cpptoc.cc b/cef/libcef_dll/cpptoc/views/fill_layout_cpptoc.cc
17844index 2fa5f8e4a4..b6b3a99c2a 100644
17845--- a/cef/libcef_dll/cpptoc/views/fill_layout_cpptoc.cc
17846+++ b/cef/libcef_dll/cpptoc/views/fill_layout_cpptoc.cc
17847@@ -1,4 +1,4 @@
17848-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17849+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17850 // reserved. Use of this source code is governed by a BSD-style license that
17851 // can be found in the LICENSE file.
17852 //
17853@@ -9,7 +9,7 @@
17854 // implementations. See the translator.README.txt file in the tools directory
17855 // for more information.
17856 //
17857-// $hash=e4ddec3146fc599b00b66f4d3cc78d8e4b0eaecf$
17858+// $hash=304f5db25f7e2a1e4cf169f7cc205013bb06f861$
17859 //
17860
17861 #include "libcef_dll/cpptoc/views/fill_layout_cpptoc.h"
17862diff --git a/cef/libcef_dll/cpptoc/views/fill_layout_cpptoc.h b/cef/libcef_dll/cpptoc/views/fill_layout_cpptoc.h
17863index a4e9917593..a9bdbaf9d5 100644
17864--- a/cef/libcef_dll/cpptoc/views/fill_layout_cpptoc.h
17865+++ b/cef/libcef_dll/cpptoc/views/fill_layout_cpptoc.h
17866@@ -1,4 +1,4 @@
17867-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17868+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17869 // reserved. Use of this source code is governed by a BSD-style license that
17870 // can be found in the LICENSE file.
17871 //
17872@@ -9,7 +9,7 @@
17873 // implementations. See the translator.README.txt file in the tools directory
17874 // for more information.
17875 //
17876-// $hash=21e023a1fbb99519b90100b3201daf7682496dae$
17877+// $hash=e2bad567245e3e1bdf240be33a3b0008ec0e3b18$
17878 //
17879
17880 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_FILL_LAYOUT_CPPTOC_H_
17881diff --git a/cef/libcef_dll/cpptoc/views/label_button_cpptoc.cc b/cef/libcef_dll/cpptoc/views/label_button_cpptoc.cc
17882index d3c8c812d0..83bec2804d 100644
17883--- a/cef/libcef_dll/cpptoc/views/label_button_cpptoc.cc
17884+++ b/cef/libcef_dll/cpptoc/views/label_button_cpptoc.cc
17885@@ -1,4 +1,4 @@
17886-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17887+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17888 // reserved. Use of this source code is governed by a BSD-style license that
17889 // can be found in the LICENSE file.
17890 //
17891@@ -9,7 +9,7 @@
17892 // implementations. See the translator.README.txt file in the tools directory
17893 // for more information.
17894 //
17895-// $hash=f723bc389e8df80f926a3e1952d9ba0241fcb494$
17896+// $hash=a96ce9b8eee3c8e913c5c2d6381de123b8d601b1$
17897 //
17898
17899 #include "libcef_dll/cpptoc/views/label_button_cpptoc.h"
17900diff --git a/cef/libcef_dll/cpptoc/views/label_button_cpptoc.h b/cef/libcef_dll/cpptoc/views/label_button_cpptoc.h
17901index 04e6664ef4..a26b71ad35 100644
17902--- a/cef/libcef_dll/cpptoc/views/label_button_cpptoc.h
17903+++ b/cef/libcef_dll/cpptoc/views/label_button_cpptoc.h
17904@@ -1,4 +1,4 @@
17905-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17906+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17907 // reserved. Use of this source code is governed by a BSD-style license that
17908 // can be found in the LICENSE file.
17909 //
17910@@ -9,7 +9,7 @@
17911 // implementations. See the translator.README.txt file in the tools directory
17912 // for more information.
17913 //
17914-// $hash=29843560ec7fb719e92becfc772acaf5ced59aae$
17915+// $hash=60d980037705be97fb1113e0b23b0e4bdd29b801$
17916 //
17917
17918 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_LABEL_BUTTON_CPPTOC_H_
17919diff --git a/cef/libcef_dll/cpptoc/views/layout_cpptoc.cc b/cef/libcef_dll/cpptoc/views/layout_cpptoc.cc
17920index a1a9436e05..5976c28b09 100644
17921--- a/cef/libcef_dll/cpptoc/views/layout_cpptoc.cc
17922+++ b/cef/libcef_dll/cpptoc/views/layout_cpptoc.cc
17923@@ -1,4 +1,4 @@
17924-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17925+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17926 // reserved. Use of this source code is governed by a BSD-style license that
17927 // can be found in the LICENSE file.
17928 //
17929@@ -9,7 +9,7 @@
17930 // implementations. See the translator.README.txt file in the tools directory
17931 // for more information.
17932 //
17933-// $hash=e1cf6f305fd3e893ea1bc77dc038ed9a9c6ed3cf$
17934+// $hash=91327244b4a4c037841a54ea2a06ebe42efe5477$
17935 //
17936
17937 #include "libcef_dll/cpptoc/views/layout_cpptoc.h"
17938diff --git a/cef/libcef_dll/cpptoc/views/layout_cpptoc.h b/cef/libcef_dll/cpptoc/views/layout_cpptoc.h
17939index 580bdddcbe..93ac800c7a 100644
17940--- a/cef/libcef_dll/cpptoc/views/layout_cpptoc.h
17941+++ b/cef/libcef_dll/cpptoc/views/layout_cpptoc.h
17942@@ -1,4 +1,4 @@
17943-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17944+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17945 // reserved. Use of this source code is governed by a BSD-style license that
17946 // can be found in the LICENSE file.
17947 //
17948@@ -9,7 +9,7 @@
17949 // implementations. See the translator.README.txt file in the tools directory
17950 // for more information.
17951 //
17952-// $hash=3b9f9d17929f8437425963bd504f921c26e5bee0$
17953+// $hash=8044bcf51ec6feacc1a186f6780c9076f5c1ec74$
17954 //
17955
17956 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_LAYOUT_CPPTOC_H_
17957diff --git a/cef/libcef_dll/cpptoc/views/menu_button_cpptoc.cc b/cef/libcef_dll/cpptoc/views/menu_button_cpptoc.cc
17958index 9d15b707ea..213effeaee 100644
17959--- a/cef/libcef_dll/cpptoc/views/menu_button_cpptoc.cc
17960+++ b/cef/libcef_dll/cpptoc/views/menu_button_cpptoc.cc
17961@@ -1,4 +1,4 @@
17962-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17963+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17964 // reserved. Use of this source code is governed by a BSD-style license that
17965 // can be found in the LICENSE file.
17966 //
17967@@ -9,7 +9,7 @@
17968 // implementations. See the translator.README.txt file in the tools directory
17969 // for more information.
17970 //
17971-// $hash=97c8a26550af49abfe4a1fcf1d8d54193c5fb3b1$
17972+// $hash=c0fc689d709721780faf361fd43b378e25439844$
17973 //
17974
17975 #include "libcef_dll/cpptoc/views/menu_button_cpptoc.h"
17976diff --git a/cef/libcef_dll/cpptoc/views/menu_button_cpptoc.h b/cef/libcef_dll/cpptoc/views/menu_button_cpptoc.h
17977index 8beca592a1..6b38233af5 100644
17978--- a/cef/libcef_dll/cpptoc/views/menu_button_cpptoc.h
17979+++ b/cef/libcef_dll/cpptoc/views/menu_button_cpptoc.h
17980@@ -1,4 +1,4 @@
17981-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
17982+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
17983 // reserved. Use of this source code is governed by a BSD-style license that
17984 // can be found in the LICENSE file.
17985 //
17986@@ -9,7 +9,7 @@
17987 // implementations. See the translator.README.txt file in the tools directory
17988 // for more information.
17989 //
17990-// $hash=41e45dc77543824f879e6ddc105f9ce80a0911e5$
17991+// $hash=d3b01ef1bca22e454dd4375df90a5a3fbd0f11f3$
17992 //
17993
17994 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_MENU_BUTTON_CPPTOC_H_
17995diff --git a/cef/libcef_dll/cpptoc/views/menu_button_delegate_cpptoc.cc b/cef/libcef_dll/cpptoc/views/menu_button_delegate_cpptoc.cc
17996index f76e3053b4..3ed9de638f 100644
17997--- a/cef/libcef_dll/cpptoc/views/menu_button_delegate_cpptoc.cc
17998+++ b/cef/libcef_dll/cpptoc/views/menu_button_delegate_cpptoc.cc
17999@@ -1,4 +1,4 @@
18000-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18001+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18002 // reserved. Use of this source code is governed by a BSD-style license that
18003 // can be found in the LICENSE file.
18004 //
18005@@ -9,7 +9,7 @@
18006 // implementations. See the translator.README.txt file in the tools directory
18007 // for more information.
18008 //
18009-// $hash=2fcd1d4d2126285209e1fa782beccbb363693bf3$
18010+// $hash=4f4242bd924c155690581077a8b0b4590cd408d8$
18011 //
18012
18013 #include "libcef_dll/cpptoc/views/menu_button_delegate_cpptoc.h"
18014diff --git a/cef/libcef_dll/cpptoc/views/menu_button_delegate_cpptoc.h b/cef/libcef_dll/cpptoc/views/menu_button_delegate_cpptoc.h
18015index 1a1fc360b0..0ecc9e377e 100644
18016--- a/cef/libcef_dll/cpptoc/views/menu_button_delegate_cpptoc.h
18017+++ b/cef/libcef_dll/cpptoc/views/menu_button_delegate_cpptoc.h
18018@@ -1,4 +1,4 @@
18019-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18020+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18021 // reserved. Use of this source code is governed by a BSD-style license that
18022 // can be found in the LICENSE file.
18023 //
18024@@ -9,7 +9,7 @@
18025 // implementations. See the translator.README.txt file in the tools directory
18026 // for more information.
18027 //
18028-// $hash=ab21c3c6610b8ef0c734e3ea7c19b32d44071d5b$
18029+// $hash=670b8f7f67a5eacd3288724ec6439c56248477ec$
18030 //
18031
18032 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_MENU_BUTTON_DELEGATE_CPPTOC_H_
18033diff --git a/cef/libcef_dll/cpptoc/views/menu_button_pressed_lock_cpptoc.cc b/cef/libcef_dll/cpptoc/views/menu_button_pressed_lock_cpptoc.cc
18034index bbbab941a6..daa1e5fdd8 100644
18035--- a/cef/libcef_dll/cpptoc/views/menu_button_pressed_lock_cpptoc.cc
18036+++ b/cef/libcef_dll/cpptoc/views/menu_button_pressed_lock_cpptoc.cc
18037@@ -1,4 +1,4 @@
18038-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18039+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18040 // reserved. Use of this source code is governed by a BSD-style license that
18041 // can be found in the LICENSE file.
18042 //
18043@@ -9,7 +9,7 @@
18044 // implementations. See the translator.README.txt file in the tools directory
18045 // for more information.
18046 //
18047-// $hash=6279b4ee41f95e4d027b25ae77d2d2af1b6941d4$
18048+// $hash=c6db7f8e7c031a323e9da96aed3aee7fd7a4f558$
18049 //
18050
18051 #include "libcef_dll/cpptoc/views/menu_button_pressed_lock_cpptoc.h"
18052diff --git a/cef/libcef_dll/cpptoc/views/menu_button_pressed_lock_cpptoc.h b/cef/libcef_dll/cpptoc/views/menu_button_pressed_lock_cpptoc.h
18053index 9c89212ea4..51cac8072d 100644
18054--- a/cef/libcef_dll/cpptoc/views/menu_button_pressed_lock_cpptoc.h
18055+++ b/cef/libcef_dll/cpptoc/views/menu_button_pressed_lock_cpptoc.h
18056@@ -1,4 +1,4 @@
18057-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18058+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18059 // reserved. Use of this source code is governed by a BSD-style license that
18060 // can be found in the LICENSE file.
18061 //
18062@@ -9,7 +9,7 @@
18063 // implementations. See the translator.README.txt file in the tools directory
18064 // for more information.
18065 //
18066-// $hash=e3c523d36e1ec61e2b6669628ad89c14e1744c0f$
18067+// $hash=072279b56eeeaf089107f5f78ee431c907afda46$
18068 //
18069
18070 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_MENU_BUTTON_PRESSED_LOCK_CPPTOC_H_
18071diff --git a/cef/libcef_dll/cpptoc/views/panel_cpptoc.cc b/cef/libcef_dll/cpptoc/views/panel_cpptoc.cc
18072index a9bcb8be75..f382077804 100644
18073--- a/cef/libcef_dll/cpptoc/views/panel_cpptoc.cc
18074+++ b/cef/libcef_dll/cpptoc/views/panel_cpptoc.cc
18075@@ -1,4 +1,4 @@
18076-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18077+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18078 // reserved. Use of this source code is governed by a BSD-style license that
18079 // can be found in the LICENSE file.
18080 //
18081@@ -9,7 +9,7 @@
18082 // implementations. See the translator.README.txt file in the tools directory
18083 // for more information.
18084 //
18085-// $hash=46ba2afdb3ede88d0eb37df2726ab5ff33fb6983$
18086+// $hash=51e0790655403b1c9abba77caa46f2033f806de5$
18087 //
18088
18089 #include "libcef_dll/cpptoc/views/panel_cpptoc.h"
18090diff --git a/cef/libcef_dll/cpptoc/views/panel_cpptoc.h b/cef/libcef_dll/cpptoc/views/panel_cpptoc.h
18091index 87d1846e60..ae2d99182a 100644
18092--- a/cef/libcef_dll/cpptoc/views/panel_cpptoc.h
18093+++ b/cef/libcef_dll/cpptoc/views/panel_cpptoc.h
18094@@ -1,4 +1,4 @@
18095-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18096+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18097 // reserved. Use of this source code is governed by a BSD-style license that
18098 // can be found in the LICENSE file.
18099 //
18100@@ -9,7 +9,7 @@
18101 // implementations. See the translator.README.txt file in the tools directory
18102 // for more information.
18103 //
18104-// $hash=ac7fe015e824ddc135e36c36231701ffcfe5ee53$
18105+// $hash=4fd7a58485d8ef00e6b2dff8ffdfcb1405eb4fcc$
18106 //
18107
18108 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_PANEL_CPPTOC_H_
18109diff --git a/cef/libcef_dll/cpptoc/views/panel_delegate_cpptoc.cc b/cef/libcef_dll/cpptoc/views/panel_delegate_cpptoc.cc
18110index 11f8ebfd15..df7cd62c5e 100644
18111--- a/cef/libcef_dll/cpptoc/views/panel_delegate_cpptoc.cc
18112+++ b/cef/libcef_dll/cpptoc/views/panel_delegate_cpptoc.cc
18113@@ -1,4 +1,4 @@
18114-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18115+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18116 // reserved. Use of this source code is governed by a BSD-style license that
18117 // can be found in the LICENSE file.
18118 //
18119@@ -9,7 +9,7 @@
18120 // implementations. See the translator.README.txt file in the tools directory
18121 // for more information.
18122 //
18123-// $hash=dd29f2990766a766a27dece7e39501eb11a296fd$
18124+// $hash=f75ba2e00c473e04734ef00098a4e10e5ce9d688$
18125 //
18126
18127 #include "libcef_dll/cpptoc/views/panel_delegate_cpptoc.h"
18128diff --git a/cef/libcef_dll/cpptoc/views/panel_delegate_cpptoc.h b/cef/libcef_dll/cpptoc/views/panel_delegate_cpptoc.h
18129index 3c53a1b31a..05fb713501 100644
18130--- a/cef/libcef_dll/cpptoc/views/panel_delegate_cpptoc.h
18131+++ b/cef/libcef_dll/cpptoc/views/panel_delegate_cpptoc.h
18132@@ -1,4 +1,4 @@
18133-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18134+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18135 // reserved. Use of this source code is governed by a BSD-style license that
18136 // can be found in the LICENSE file.
18137 //
18138@@ -9,7 +9,7 @@
18139 // implementations. See the translator.README.txt file in the tools directory
18140 // for more information.
18141 //
18142-// $hash=aa7440de70e2a83ba939fd4f9ae12e2dd6b80873$
18143+// $hash=821d48d74b437c7a0387b1d0ac1875621873b2e4$
18144 //
18145
18146 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_PANEL_DELEGATE_CPPTOC_H_
18147diff --git a/cef/libcef_dll/cpptoc/views/scroll_view_cpptoc.cc b/cef/libcef_dll/cpptoc/views/scroll_view_cpptoc.cc
18148index af6ad2e71c..8df578b78a 100644
18149--- a/cef/libcef_dll/cpptoc/views/scroll_view_cpptoc.cc
18150+++ b/cef/libcef_dll/cpptoc/views/scroll_view_cpptoc.cc
18151@@ -1,4 +1,4 @@
18152-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18153+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18154 // reserved. Use of this source code is governed by a BSD-style license that
18155 // can be found in the LICENSE file.
18156 //
18157@@ -9,7 +9,7 @@
18158 // implementations. See the translator.README.txt file in the tools directory
18159 // for more information.
18160 //
18161-// $hash=88d6df521d18ef28e9e2e7cbe31ecf6c96351430$
18162+// $hash=7d41cd981c074663db79ce49259364111d0401f5$
18163 //
18164
18165 #include "libcef_dll/cpptoc/views/scroll_view_cpptoc.h"
18166diff --git a/cef/libcef_dll/cpptoc/views/scroll_view_cpptoc.h b/cef/libcef_dll/cpptoc/views/scroll_view_cpptoc.h
18167index 361dd29e30..a08983a1fc 100644
18168--- a/cef/libcef_dll/cpptoc/views/scroll_view_cpptoc.h
18169+++ b/cef/libcef_dll/cpptoc/views/scroll_view_cpptoc.h
18170@@ -1,4 +1,4 @@
18171-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18172+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18173 // reserved. Use of this source code is governed by a BSD-style license that
18174 // can be found in the LICENSE file.
18175 //
18176@@ -9,7 +9,7 @@
18177 // implementations. See the translator.README.txt file in the tools directory
18178 // for more information.
18179 //
18180-// $hash=f1215fc51778cca8d72256162b43e56c5f29ffba$
18181+// $hash=a5d02fd363950248101f5113ceeee2c280dd831c$
18182 //
18183
18184 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_SCROLL_VIEW_CPPTOC_H_
18185diff --git a/cef/libcef_dll/cpptoc/views/textfield_cpptoc.cc b/cef/libcef_dll/cpptoc/views/textfield_cpptoc.cc
18186index 78286cae9e..35a188b2c8 100644
18187--- a/cef/libcef_dll/cpptoc/views/textfield_cpptoc.cc
18188+++ b/cef/libcef_dll/cpptoc/views/textfield_cpptoc.cc
18189@@ -1,4 +1,4 @@
18190-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18191+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18192 // reserved. Use of this source code is governed by a BSD-style license that
18193 // can be found in the LICENSE file.
18194 //
18195@@ -9,7 +9,7 @@
18196 // implementations. See the translator.README.txt file in the tools directory
18197 // for more information.
18198 //
18199-// $hash=fd6b1cf787b563525dac101a765b7c399356e00c$
18200+// $hash=b2d1a60f738cc52cd39da493194af5723fd8c885$
18201 //
18202
18203 #include "libcef_dll/cpptoc/views/textfield_cpptoc.h"
18204diff --git a/cef/libcef_dll/cpptoc/views/textfield_cpptoc.h b/cef/libcef_dll/cpptoc/views/textfield_cpptoc.h
18205index a7f2d17422..730d6486d2 100644
18206--- a/cef/libcef_dll/cpptoc/views/textfield_cpptoc.h
18207+++ b/cef/libcef_dll/cpptoc/views/textfield_cpptoc.h
18208@@ -1,4 +1,4 @@
18209-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18210+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18211 // reserved. Use of this source code is governed by a BSD-style license that
18212 // can be found in the LICENSE file.
18213 //
18214@@ -9,7 +9,7 @@
18215 // implementations. See the translator.README.txt file in the tools directory
18216 // for more information.
18217 //
18218-// $hash=d58e06f073a0c78505b9e4d00bafcdcff671dcb6$
18219+// $hash=2e8b2aebc574d685d1c39e7cb96b2e8c724a6d9c$
18220 //
18221
18222 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_TEXTFIELD_CPPTOC_H_
18223diff --git a/cef/libcef_dll/cpptoc/views/textfield_delegate_cpptoc.cc b/cef/libcef_dll/cpptoc/views/textfield_delegate_cpptoc.cc
18224index 7282c488c6..3836e21d0a 100644
18225--- a/cef/libcef_dll/cpptoc/views/textfield_delegate_cpptoc.cc
18226+++ b/cef/libcef_dll/cpptoc/views/textfield_delegate_cpptoc.cc
18227@@ -1,4 +1,4 @@
18228-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18229+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18230 // reserved. Use of this source code is governed by a BSD-style license that
18231 // can be found in the LICENSE file.
18232 //
18233@@ -9,7 +9,7 @@
18234 // implementations. See the translator.README.txt file in the tools directory
18235 // for more information.
18236 //
18237-// $hash=e35b635ec442c8910b02aca64d48760b1360c868$
18238+// $hash=41ad820d3032bfe9ec4585eb53b2d0d7f1dc46bd$
18239 //
18240
18241 #include "libcef_dll/cpptoc/views/textfield_delegate_cpptoc.h"
18242diff --git a/cef/libcef_dll/cpptoc/views/textfield_delegate_cpptoc.h b/cef/libcef_dll/cpptoc/views/textfield_delegate_cpptoc.h
18243index 12e3d75308..75abe63a36 100644
18244--- a/cef/libcef_dll/cpptoc/views/textfield_delegate_cpptoc.h
18245+++ b/cef/libcef_dll/cpptoc/views/textfield_delegate_cpptoc.h
18246@@ -1,4 +1,4 @@
18247-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18248+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18249 // reserved. Use of this source code is governed by a BSD-style license that
18250 // can be found in the LICENSE file.
18251 //
18252@@ -9,7 +9,7 @@
18253 // implementations. See the translator.README.txt file in the tools directory
18254 // for more information.
18255 //
18256-// $hash=b9692a2b56e13b7dd25ca500dc1635fc5eb4ecb0$
18257+// $hash=157e47e42dbb25aa2effd5bd085228d1dc3ad061$
18258 //
18259
18260 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_TEXTFIELD_DELEGATE_CPPTOC_H_
18261diff --git a/cef/libcef_dll/cpptoc/views/view_cpptoc.cc b/cef/libcef_dll/cpptoc/views/view_cpptoc.cc
18262index 3a7dcc2670..30c9257169 100644
18263--- a/cef/libcef_dll/cpptoc/views/view_cpptoc.cc
18264+++ b/cef/libcef_dll/cpptoc/views/view_cpptoc.cc
18265@@ -1,4 +1,4 @@
18266-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18267+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18268 // reserved. Use of this source code is governed by a BSD-style license that
18269 // can be found in the LICENSE file.
18270 //
18271@@ -9,7 +9,7 @@
18272 // implementations. See the translator.README.txt file in the tools directory
18273 // for more information.
18274 //
18275-// $hash=0884539e94e09316a9e516d93d77743c6287fe9a$
18276+// $hash=5d515cf9d8b0af16456faf6ff6ca82c55bc1d76d$
18277 //
18278
18279 #include "libcef_dll/cpptoc/views/view_cpptoc.h"
18280diff --git a/cef/libcef_dll/cpptoc/views/view_cpptoc.h b/cef/libcef_dll/cpptoc/views/view_cpptoc.h
18281index 14e4e5cc00..e508ab45a5 100644
18282--- a/cef/libcef_dll/cpptoc/views/view_cpptoc.h
18283+++ b/cef/libcef_dll/cpptoc/views/view_cpptoc.h
18284@@ -1,4 +1,4 @@
18285-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18286+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18287 // reserved. Use of this source code is governed by a BSD-style license that
18288 // can be found in the LICENSE file.
18289 //
18290@@ -9,7 +9,7 @@
18291 // implementations. See the translator.README.txt file in the tools directory
18292 // for more information.
18293 //
18294-// $hash=4b4df24ff3715625a44428b2fdc2cc1fed0f2a8c$
18295+// $hash=725abc7d1f25861799c54c827de37617b23a1bd5$
18296 //
18297
18298 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_VIEW_CPPTOC_H_
18299diff --git a/cef/libcef_dll/cpptoc/views/view_delegate_cpptoc.cc b/cef/libcef_dll/cpptoc/views/view_delegate_cpptoc.cc
18300index 9a06b6ff45..f3867bcb45 100644
18301--- a/cef/libcef_dll/cpptoc/views/view_delegate_cpptoc.cc
18302+++ b/cef/libcef_dll/cpptoc/views/view_delegate_cpptoc.cc
18303@@ -1,4 +1,4 @@
18304-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18305+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18306 // reserved. Use of this source code is governed by a BSD-style license that
18307 // can be found in the LICENSE file.
18308 //
18309@@ -9,7 +9,7 @@
18310 // implementations. See the translator.README.txt file in the tools directory
18311 // for more information.
18312 //
18313-// $hash=7c6283658d49420281d02b4793f65f478f261461$
18314+// $hash=561afa1705a1c0f0028365ac9ff9fb5f5b897490$
18315 //
18316
18317 #include "libcef_dll/cpptoc/views/view_delegate_cpptoc.h"
18318diff --git a/cef/libcef_dll/cpptoc/views/view_delegate_cpptoc.h b/cef/libcef_dll/cpptoc/views/view_delegate_cpptoc.h
18319index 1c9ae65722..38d6332b82 100644
18320--- a/cef/libcef_dll/cpptoc/views/view_delegate_cpptoc.h
18321+++ b/cef/libcef_dll/cpptoc/views/view_delegate_cpptoc.h
18322@@ -1,4 +1,4 @@
18323-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18324+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18325 // reserved. Use of this source code is governed by a BSD-style license that
18326 // can be found in the LICENSE file.
18327 //
18328@@ -9,7 +9,7 @@
18329 // implementations. See the translator.README.txt file in the tools directory
18330 // for more information.
18331 //
18332-// $hash=6be75d9c3a5eeaf6683ae920e175e0c597071328$
18333+// $hash=ebd265b4907f2531eacce52bd6cfd1f8848b7abf$
18334 //
18335
18336 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_VIEW_DELEGATE_CPPTOC_H_
18337diff --git a/cef/libcef_dll/cpptoc/views/window_cpptoc.cc b/cef/libcef_dll/cpptoc/views/window_cpptoc.cc
18338index 6a5e0a9b6b..3404972088 100644
18339--- a/cef/libcef_dll/cpptoc/views/window_cpptoc.cc
18340+++ b/cef/libcef_dll/cpptoc/views/window_cpptoc.cc
18341@@ -1,4 +1,4 @@
18342-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18343+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18344 // reserved. Use of this source code is governed by a BSD-style license that
18345 // can be found in the LICENSE file.
18346 //
18347@@ -9,7 +9,7 @@
18348 // implementations. See the translator.README.txt file in the tools directory
18349 // for more information.
18350 //
18351-// $hash=1d17ae751431af3baf83b3386f1cab410964a17f$
18352+// $hash=a5be2f155956625b336fc3549328fef2f382a218$
18353 //
18354
18355 #include "libcef_dll/cpptoc/views/window_cpptoc.h"
18356diff --git a/cef/libcef_dll/cpptoc/views/window_cpptoc.h b/cef/libcef_dll/cpptoc/views/window_cpptoc.h
18357index 997d6082d9..de348f70d4 100644
18358--- a/cef/libcef_dll/cpptoc/views/window_cpptoc.h
18359+++ b/cef/libcef_dll/cpptoc/views/window_cpptoc.h
18360@@ -1,4 +1,4 @@
18361-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18362+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18363 // reserved. Use of this source code is governed by a BSD-style license that
18364 // can be found in the LICENSE file.
18365 //
18366@@ -9,7 +9,7 @@
18367 // implementations. See the translator.README.txt file in the tools directory
18368 // for more information.
18369 //
18370-// $hash=4af1ddb7edf5abafbd0bc925fa4e5be641dd1b23$
18371+// $hash=5b14236c7e00a7dafa47fdc32ce78d347de477a1$
18372 //
18373
18374 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_WINDOW_CPPTOC_H_
18375diff --git a/cef/libcef_dll/cpptoc/views/window_delegate_cpptoc.cc b/cef/libcef_dll/cpptoc/views/window_delegate_cpptoc.cc
18376index b3fb171353..950f9a93b7 100644
18377--- a/cef/libcef_dll/cpptoc/views/window_delegate_cpptoc.cc
18378+++ b/cef/libcef_dll/cpptoc/views/window_delegate_cpptoc.cc
18379@@ -1,4 +1,4 @@
18380-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18381+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18382 // reserved. Use of this source code is governed by a BSD-style license that
18383 // can be found in the LICENSE file.
18384 //
18385@@ -9,7 +9,7 @@
18386 // implementations. See the translator.README.txt file in the tools directory
18387 // for more information.
18388 //
18389-// $hash=a201b988556a825fffe39f58e378664b93795c72$
18390+// $hash=2ab619afac5d34044d99093eca2cac4e644ba6ee$
18391 //
18392
18393 #include "libcef_dll/cpptoc/views/window_delegate_cpptoc.h"
18394diff --git a/cef/libcef_dll/cpptoc/views/window_delegate_cpptoc.h b/cef/libcef_dll/cpptoc/views/window_delegate_cpptoc.h
18395index 39d2325932..dff58e097e 100644
18396--- a/cef/libcef_dll/cpptoc/views/window_delegate_cpptoc.h
18397+++ b/cef/libcef_dll/cpptoc/views/window_delegate_cpptoc.h
18398@@ -1,4 +1,4 @@
18399-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18400+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18401 // reserved. Use of this source code is governed by a BSD-style license that
18402 // can be found in the LICENSE file.
18403 //
18404@@ -9,7 +9,7 @@
18405 // implementations. See the translator.README.txt file in the tools directory
18406 // for more information.
18407 //
18408-// $hash=958f75d98ec087824d5ae5e078cdf9f434541de9$
18409+// $hash=594a3ff498c14872187e0ae8d466a023664c92b6$
18410 //
18411
18412 #ifndef CEF_LIBCEF_DLL_CPPTOC_VIEWS_WINDOW_DELEGATE_CPPTOC_H_
18413diff --git a/cef/libcef_dll/cpptoc/waitable_event_cpptoc.cc b/cef/libcef_dll/cpptoc/waitable_event_cpptoc.cc
18414index 111746431a..f65b2038dc 100644
18415--- a/cef/libcef_dll/cpptoc/waitable_event_cpptoc.cc
18416+++ b/cef/libcef_dll/cpptoc/waitable_event_cpptoc.cc
18417@@ -1,4 +1,4 @@
18418-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18419+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18420 // reserved. Use of this source code is governed by a BSD-style license that
18421 // can be found in the LICENSE file.
18422 //
18423@@ -9,7 +9,7 @@
18424 // implementations. See the translator.README.txt file in the tools directory
18425 // for more information.
18426 //
18427-// $hash=114c67ca2a781a0ddee594fba0f5ca1a4567b465$
18428+// $hash=ea0c4c4d8c202a47a9b5b63a57525dc726c1e40e$
18429 //
18430
18431 #include "libcef_dll/cpptoc/waitable_event_cpptoc.h"
18432diff --git a/cef/libcef_dll/cpptoc/waitable_event_cpptoc.h b/cef/libcef_dll/cpptoc/waitable_event_cpptoc.h
18433index 9ea6b72a25..cc466b7b3e 100644
18434--- a/cef/libcef_dll/cpptoc/waitable_event_cpptoc.h
18435+++ b/cef/libcef_dll/cpptoc/waitable_event_cpptoc.h
18436@@ -1,4 +1,4 @@
18437-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18438+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18439 // reserved. Use of this source code is governed by a BSD-style license that
18440 // can be found in the LICENSE file.
18441 //
18442@@ -9,7 +9,7 @@
18443 // implementations. See the translator.README.txt file in the tools directory
18444 // for more information.
18445 //
18446-// $hash=96249ce7f6494368cd77c16154b1c5ef13a5c698$
18447+// $hash=f19f05824d06a9aadd3ad10b58e2041eb855a66e$
18448 //
18449
18450 #ifndef CEF_LIBCEF_DLL_CPPTOC_WAITABLE_EVENT_CPPTOC_H_
18451diff --git a/cef/libcef_dll/cpptoc/web_plugin_info_cpptoc.cc b/cef/libcef_dll/cpptoc/web_plugin_info_cpptoc.cc
18452index bd6157cad2..36698f5db9 100644
18453--- a/cef/libcef_dll/cpptoc/web_plugin_info_cpptoc.cc
18454+++ b/cef/libcef_dll/cpptoc/web_plugin_info_cpptoc.cc
18455@@ -1,4 +1,4 @@
18456-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18457+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18458 // reserved. Use of this source code is governed by a BSD-style license that
18459 // can be found in the LICENSE file.
18460 //
18461@@ -9,7 +9,7 @@
18462 // implementations. See the translator.README.txt file in the tools directory
18463 // for more information.
18464 //
18465-// $hash=c10eca449f7442521ac633f2f76b39246e7a560f$
18466+// $hash=f251bc08b09854c1d999ef9d88706ceeba3a9259$
18467 //
18468
18469 #include "libcef_dll/cpptoc/web_plugin_info_cpptoc.h"
18470diff --git a/cef/libcef_dll/cpptoc/web_plugin_info_cpptoc.h b/cef/libcef_dll/cpptoc/web_plugin_info_cpptoc.h
18471index 1ac734288e..54ac02fb6d 100644
18472--- a/cef/libcef_dll/cpptoc/web_plugin_info_cpptoc.h
18473+++ b/cef/libcef_dll/cpptoc/web_plugin_info_cpptoc.h
18474@@ -1,4 +1,4 @@
18475-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18476+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18477 // reserved. Use of this source code is governed by a BSD-style license that
18478 // can be found in the LICENSE file.
18479 //
18480@@ -9,7 +9,7 @@
18481 // implementations. See the translator.README.txt file in the tools directory
18482 // for more information.
18483 //
18484-// $hash=af50aa803ca11f21aca5fdb7b429d0fbf13ec66a$
18485+// $hash=6b84c31a12d45d8707befeb476e6977f59c3e6e2$
18486 //
18487
18488 #ifndef CEF_LIBCEF_DLL_CPPTOC_WEB_PLUGIN_INFO_CPPTOC_H_
18489diff --git a/cef/libcef_dll/cpptoc/web_plugin_info_visitor_cpptoc.cc b/cef/libcef_dll/cpptoc/web_plugin_info_visitor_cpptoc.cc
18490index f09358a1e3..2e59fce423 100644
18491--- a/cef/libcef_dll/cpptoc/web_plugin_info_visitor_cpptoc.cc
18492+++ b/cef/libcef_dll/cpptoc/web_plugin_info_visitor_cpptoc.cc
18493@@ -1,4 +1,4 @@
18494-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18495+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18496 // reserved. Use of this source code is governed by a BSD-style license that
18497 // can be found in the LICENSE file.
18498 //
18499@@ -9,7 +9,7 @@
18500 // implementations. See the translator.README.txt file in the tools directory
18501 // for more information.
18502 //
18503-// $hash=b03fce6f309fac406b62e608d68483dc939dc56f$
18504+// $hash=df08a3fe475bba8107cfc45af61a31c4d0295014$
18505 //
18506
18507 #include "libcef_dll/cpptoc/web_plugin_info_visitor_cpptoc.h"
18508diff --git a/cef/libcef_dll/cpptoc/web_plugin_info_visitor_cpptoc.h b/cef/libcef_dll/cpptoc/web_plugin_info_visitor_cpptoc.h
18509index 18439ce9ce..283d371956 100644
18510--- a/cef/libcef_dll/cpptoc/web_plugin_info_visitor_cpptoc.h
18511+++ b/cef/libcef_dll/cpptoc/web_plugin_info_visitor_cpptoc.h
18512@@ -1,4 +1,4 @@
18513-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18514+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18515 // reserved. Use of this source code is governed by a BSD-style license that
18516 // can be found in the LICENSE file.
18517 //
18518@@ -9,7 +9,7 @@
18519 // implementations. See the translator.README.txt file in the tools directory
18520 // for more information.
18521 //
18522-// $hash=6b8315284960854edb188cc131335d7c2efabfd9$
18523+// $hash=5d5192e483c62143bf6b16ee292fe5e5f471e198$
18524 //
18525
18526 #ifndef CEF_LIBCEF_DLL_CPPTOC_WEB_PLUGIN_INFO_VISITOR_CPPTOC_H_
18527diff --git a/cef/libcef_dll/cpptoc/web_plugin_unstable_callback_cpptoc.cc b/cef/libcef_dll/cpptoc/web_plugin_unstable_callback_cpptoc.cc
18528index 6375c13173..50cab6cb83 100644
18529--- a/cef/libcef_dll/cpptoc/web_plugin_unstable_callback_cpptoc.cc
18530+++ b/cef/libcef_dll/cpptoc/web_plugin_unstable_callback_cpptoc.cc
18531@@ -1,4 +1,4 @@
18532-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18533+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18534 // reserved. Use of this source code is governed by a BSD-style license that
18535 // can be found in the LICENSE file.
18536 //
18537@@ -9,7 +9,7 @@
18538 // implementations. See the translator.README.txt file in the tools directory
18539 // for more information.
18540 //
18541-// $hash=ceaecd9124811dc01c7d3b0aa222b1dc9e0964c7$
18542+// $hash=42ed9f3aa6aef7580eabb0a94981f1b7b5760d16$
18543 //
18544
18545 #include "libcef_dll/cpptoc/web_plugin_unstable_callback_cpptoc.h"
18546diff --git a/cef/libcef_dll/cpptoc/web_plugin_unstable_callback_cpptoc.h b/cef/libcef_dll/cpptoc/web_plugin_unstable_callback_cpptoc.h
18547index 2b39cc5357..4d8c795c83 100644
18548--- a/cef/libcef_dll/cpptoc/web_plugin_unstable_callback_cpptoc.h
18549+++ b/cef/libcef_dll/cpptoc/web_plugin_unstable_callback_cpptoc.h
18550@@ -1,4 +1,4 @@
18551-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18552+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18553 // reserved. Use of this source code is governed by a BSD-style license that
18554 // can be found in the LICENSE file.
18555 //
18556@@ -9,7 +9,7 @@
18557 // implementations. See the translator.README.txt file in the tools directory
18558 // for more information.
18559 //
18560-// $hash=6154c085fda09c2a369f3e7da73e6b63858bf919$
18561+// $hash=35a890b3dfa88746ee48ed0c94f351098213d163$
18562 //
18563
18564 #ifndef CEF_LIBCEF_DLL_CPPTOC_WEB_PLUGIN_UNSTABLE_CALLBACK_CPPTOC_H_
18565diff --git a/cef/libcef_dll/cpptoc/write_handler_cpptoc.cc b/cef/libcef_dll/cpptoc/write_handler_cpptoc.cc
18566index 89af834003..8de6eb3a2e 100644
18567--- a/cef/libcef_dll/cpptoc/write_handler_cpptoc.cc
18568+++ b/cef/libcef_dll/cpptoc/write_handler_cpptoc.cc
18569@@ -1,4 +1,4 @@
18570-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18571+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18572 // reserved. Use of this source code is governed by a BSD-style license that
18573 // can be found in the LICENSE file.
18574 //
18575@@ -9,7 +9,7 @@
18576 // implementations. See the translator.README.txt file in the tools directory
18577 // for more information.
18578 //
18579-// $hash=10172f5d19b0add78894f56fe139b1d6819febd0$
18580+// $hash=208b9651cb7a357f7665e6d449c6ba974dfae9e3$
18581 //
18582
18583 #include "libcef_dll/cpptoc/write_handler_cpptoc.h"
18584diff --git a/cef/libcef_dll/cpptoc/write_handler_cpptoc.h b/cef/libcef_dll/cpptoc/write_handler_cpptoc.h
18585index e13816574b..dfcfd5b41d 100644
18586--- a/cef/libcef_dll/cpptoc/write_handler_cpptoc.h
18587+++ b/cef/libcef_dll/cpptoc/write_handler_cpptoc.h
18588@@ -1,4 +1,4 @@
18589-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18590+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18591 // reserved. Use of this source code is governed by a BSD-style license that
18592 // can be found in the LICENSE file.
18593 //
18594@@ -9,7 +9,7 @@
18595 // implementations. See the translator.README.txt file in the tools directory
18596 // for more information.
18597 //
18598-// $hash=100ed73457186f2dae10d236cc534f908f371dbd$
18599+// $hash=b6360b7899237a1d616dd8c1cff016d397acbcd3$
18600 //
18601
18602 #ifndef CEF_LIBCEF_DLL_CPPTOC_WRITE_HANDLER_CPPTOC_H_
18603diff --git a/cef/libcef_dll/cpptoc/x509cert_principal_cpptoc.cc b/cef/libcef_dll/cpptoc/x509cert_principal_cpptoc.cc
18604index 5ae1b4dc3d..abbd87a9ba 100644
18605--- a/cef/libcef_dll/cpptoc/x509cert_principal_cpptoc.cc
18606+++ b/cef/libcef_dll/cpptoc/x509cert_principal_cpptoc.cc
18607@@ -1,4 +1,4 @@
18608-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18609+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18610 // reserved. Use of this source code is governed by a BSD-style license that
18611 // can be found in the LICENSE file.
18612 //
18613@@ -9,7 +9,7 @@
18614 // implementations. See the translator.README.txt file in the tools directory
18615 // for more information.
18616 //
18617-// $hash=c590e9344004031c7cfe302bcb138635268b1251$
18618+// $hash=08b0ac0ef8621f8ce81753616044a5e04dc4a191$
18619 //
18620
18621 #include "libcef_dll/cpptoc/x509cert_principal_cpptoc.h"
18622diff --git a/cef/libcef_dll/cpptoc/x509cert_principal_cpptoc.h b/cef/libcef_dll/cpptoc/x509cert_principal_cpptoc.h
18623index cc69f57fe9..244854b81a 100644
18624--- a/cef/libcef_dll/cpptoc/x509cert_principal_cpptoc.h
18625+++ b/cef/libcef_dll/cpptoc/x509cert_principal_cpptoc.h
18626@@ -1,4 +1,4 @@
18627-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18628+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18629 // reserved. Use of this source code is governed by a BSD-style license that
18630 // can be found in the LICENSE file.
18631 //
18632@@ -9,7 +9,7 @@
18633 // implementations. See the translator.README.txt file in the tools directory
18634 // for more information.
18635 //
18636-// $hash=0065be19dffd62f262e1c60cb45f6e46745234d1$
18637+// $hash=2041bbbdcbf9434c1a5205ebae8438d47725aa1f$
18638 //
18639
18640 #ifndef CEF_LIBCEF_DLL_CPPTOC_X509CERT_PRINCIPAL_CPPTOC_H_
18641diff --git a/cef/libcef_dll/cpptoc/x509certificate_cpptoc.cc b/cef/libcef_dll/cpptoc/x509certificate_cpptoc.cc
18642index c157410047..e510b4d192 100644
18643--- a/cef/libcef_dll/cpptoc/x509certificate_cpptoc.cc
18644+++ b/cef/libcef_dll/cpptoc/x509certificate_cpptoc.cc
18645@@ -1,4 +1,4 @@
18646-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18647+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18648 // reserved. Use of this source code is governed by a BSD-style license that
18649 // can be found in the LICENSE file.
18650 //
18651@@ -9,7 +9,7 @@
18652 // implementations. See the translator.README.txt file in the tools directory
18653 // for more information.
18654 //
18655-// $hash=28d75543e047ea62864cad815e6ff3bcd65b46cf$
18656+// $hash=cac3e88ea15965e3a7786500606845b0b6157212$
18657 //
18658
18659 #include "libcef_dll/cpptoc/x509certificate_cpptoc.h"
18660diff --git a/cef/libcef_dll/cpptoc/x509certificate_cpptoc.h b/cef/libcef_dll/cpptoc/x509certificate_cpptoc.h
18661index b54c58a81a..29644da070 100644
18662--- a/cef/libcef_dll/cpptoc/x509certificate_cpptoc.h
18663+++ b/cef/libcef_dll/cpptoc/x509certificate_cpptoc.h
18664@@ -1,4 +1,4 @@
18665-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18666+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18667 // reserved. Use of this source code is governed by a BSD-style license that
18668 // can be found in the LICENSE file.
18669 //
18670@@ -9,7 +9,7 @@
18671 // implementations. See the translator.README.txt file in the tools directory
18672 // for more information.
18673 //
18674-// $hash=677401b52a4c53e2ccacff0a36070b2e074d38b5$
18675+// $hash=6eb11abb213e5b3e50494c956c51d6286020ca39$
18676 //
18677
18678 #ifndef CEF_LIBCEF_DLL_CPPTOC_X509CERTIFICATE_CPPTOC_H_
18679diff --git a/cef/libcef_dll/cpptoc/xml_reader_cpptoc.cc b/cef/libcef_dll/cpptoc/xml_reader_cpptoc.cc
18680index 2fd24cc8bc..ae117e5f24 100644
18681--- a/cef/libcef_dll/cpptoc/xml_reader_cpptoc.cc
18682+++ b/cef/libcef_dll/cpptoc/xml_reader_cpptoc.cc
18683@@ -1,4 +1,4 @@
18684-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18685+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18686 // reserved. Use of this source code is governed by a BSD-style license that
18687 // can be found in the LICENSE file.
18688 //
18689@@ -9,7 +9,7 @@
18690 // implementations. See the translator.README.txt file in the tools directory
18691 // for more information.
18692 //
18693-// $hash=2b6f6a88740653aabe8cb154633433afff15ece5$
18694+// $hash=3ac5f5c45a59bad3310db431653227ceac42186e$
18695 //
18696
18697 #include "libcef_dll/cpptoc/xml_reader_cpptoc.h"
18698diff --git a/cef/libcef_dll/cpptoc/xml_reader_cpptoc.h b/cef/libcef_dll/cpptoc/xml_reader_cpptoc.h
18699index 76acc9c567..5f32d62c81 100644
18700--- a/cef/libcef_dll/cpptoc/xml_reader_cpptoc.h
18701+++ b/cef/libcef_dll/cpptoc/xml_reader_cpptoc.h
18702@@ -1,4 +1,4 @@
18703-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18704+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18705 // reserved. Use of this source code is governed by a BSD-style license that
18706 // can be found in the LICENSE file.
18707 //
18708@@ -9,7 +9,7 @@
18709 // implementations. See the translator.README.txt file in the tools directory
18710 // for more information.
18711 //
18712-// $hash=dab3976baaad474d4ea7764562382969b1071491$
18713+// $hash=397fee4bf9eb4c1dc2117bba9ac2b63542335196$
18714 //
18715
18716 #ifndef CEF_LIBCEF_DLL_CPPTOC_XML_READER_CPPTOC_H_
18717diff --git a/cef/libcef_dll/cpptoc/zip_reader_cpptoc.cc b/cef/libcef_dll/cpptoc/zip_reader_cpptoc.cc
18718index 641d9e1a79..a53a7a724e 100644
18719--- a/cef/libcef_dll/cpptoc/zip_reader_cpptoc.cc
18720+++ b/cef/libcef_dll/cpptoc/zip_reader_cpptoc.cc
18721@@ -1,4 +1,4 @@
18722-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18723+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18724 // reserved. Use of this source code is governed by a BSD-style license that
18725 // can be found in the LICENSE file.
18726 //
18727@@ -9,7 +9,7 @@
18728 // implementations. See the translator.README.txt file in the tools directory
18729 // for more information.
18730 //
18731-// $hash=29cc6dc5f0d84a3c743bfceb1e94d8679d7dc85a$
18732+// $hash=9fe9e9199e284af22669ba2abfb715d0e7ae8de3$
18733 //
18734
18735 #include "libcef_dll/cpptoc/zip_reader_cpptoc.h"
18736diff --git a/cef/libcef_dll/cpptoc/zip_reader_cpptoc.h b/cef/libcef_dll/cpptoc/zip_reader_cpptoc.h
18737index 15889f219e..c04789a0c9 100644
18738--- a/cef/libcef_dll/cpptoc/zip_reader_cpptoc.h
18739+++ b/cef/libcef_dll/cpptoc/zip_reader_cpptoc.h
18740@@ -1,4 +1,4 @@
18741-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18742+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18743 // reserved. Use of this source code is governed by a BSD-style license that
18744 // can be found in the LICENSE file.
18745 //
18746@@ -9,7 +9,7 @@
18747 // implementations. See the translator.README.txt file in the tools directory
18748 // for more information.
18749 //
18750-// $hash=a5ace913fb83fef08e7678ce2b9fdaedae5cde1d$
18751+// $hash=10530d641ffc50165b89d16e76230b9ab3f9aca5$
18752 //
18753
18754 #ifndef CEF_LIBCEF_DLL_CPPTOC_ZIP_READER_CPPTOC_H_
18755diff --git a/cef/libcef_dll/ctocpp/access_request_ctocpp.cc b/cef/libcef_dll/ctocpp/access_request_ctocpp.cc
18756new file mode 100644
18757index 0000000000..4d7e095ef4
18758--- /dev/null
18759+++ b/cef/libcef_dll/ctocpp/access_request_ctocpp.cc
18760@@ -0,0 +1,92 @@
18761+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18762+// reserved. Use of this source code is governed by a BSD-style license that
18763+// can be found in the LICENSE file.
18764+//
18765+// ---------------------------------------------------------------------------
18766+//
18767+// This file was generated by the CEF translator tool. If making changes by
18768+// hand only do so within the body of existing method and function
18769+// implementations. See the translator.README.txt file in the tools directory
18770+// for more information.
18771+//
18772+// $hash=05b34b1c04c69b654aad9a8136efbe83693d255f$
18773+//
18774+
18775+#include "libcef_dll/ctocpp/access_request_ctocpp.h"
18776+#include "libcef_dll/shutdown_checker.h"
18777+
18778+// VIRTUAL METHODS - Body may be edited by hand.
18779+
18780+NO_SANITIZE("cfi-icall") CefString CefAccessRequestCToCpp::Origin() {
18781+  shutdown_checker::AssertNotShutdown();
18782+
18783+  cef_access_request_t* _struct = GetStruct();
18784+  if (CEF_MEMBER_MISSING(_struct, origin))
18785+    return CefString();
18786+
18787+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
18788+
18789+  // Execute
18790+  cef_string_userfree_t _retval = _struct->origin(_struct);
18791+
18792+  // Return type: string
18793+  CefString _retvalStr;
18794+  _retvalStr.AttachToUserFree(_retval);
18795+  return _retvalStr;
18796+}
18797+
18798+NO_SANITIZE("cfi-icall") int CefAccessRequestCToCpp::ResourceAcessId() {
18799+  shutdown_checker::AssertNotShutdown();
18800+
18801+  cef_access_request_t* _struct = GetStruct();
18802+  if (CEF_MEMBER_MISSING(_struct, resource_acess_id))
18803+    return 0;
18804+
18805+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
18806+
18807+  // Execute
18808+  int _retval = _struct->resource_acess_id(_struct);
18809+
18810+  // Return type: simple
18811+  return _retval;
18812+}
18813+
18814+NO_SANITIZE("cfi-icall")
18815+void CefAccessRequestCToCpp::ReportRequestResult(bool allowed) {
18816+  shutdown_checker::AssertNotShutdown();
18817+
18818+  cef_access_request_t* _struct = GetStruct();
18819+  if (CEF_MEMBER_MISSING(_struct, report_request_result))
18820+    return;
18821+
18822+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
18823+
18824+  // Execute
18825+  _struct->report_request_result(_struct, allowed);
18826+}
18827+
18828+// CONSTRUCTOR - Do not edit by hand.
18829+
18830+CefAccessRequestCToCpp::CefAccessRequestCToCpp() {}
18831+
18832+// DESTRUCTOR - Do not edit by hand.
18833+
18834+CefAccessRequestCToCpp::~CefAccessRequestCToCpp() {
18835+  shutdown_checker::AssertNotShutdown();
18836+}
18837+
18838+template <>
18839+cef_access_request_t*
18840+CefCToCppRefCounted<CefAccessRequestCToCpp,
18841+                    CefAccessRequest,
18842+                    cef_access_request_t>::UnwrapDerived(CefWrapperType type,
18843+                                                         CefAccessRequest* c) {
18844+  NOTREACHED() << "Unexpected class type: " << type;
18845+  return nullptr;
18846+}
18847+
18848+template <>
18849+CefWrapperType CefCToCppRefCounted<CefAccessRequestCToCpp,
18850+                                   CefAccessRequest,
18851+                                   cef_access_request_t>::kWrapperType =
18852+    WT_ACCESS_REQUEST;
18853diff --git a/cef/libcef_dll/ctocpp/access_request_ctocpp.h b/cef/libcef_dll/ctocpp/access_request_ctocpp.h
18854new file mode 100644
18855index 0000000000..a20536f2f7
18856--- /dev/null
18857+++ b/cef/libcef_dll/ctocpp/access_request_ctocpp.h
18858@@ -0,0 +1,43 @@
18859+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18860+// reserved. Use of this source code is governed by a BSD-style license that
18861+// can be found in the LICENSE file.
18862+//
18863+// ---------------------------------------------------------------------------
18864+//
18865+// This file was generated by the CEF translator tool. If making changes by
18866+// hand only do so within the body of existing method and function
18867+// implementations. See the translator.README.txt file in the tools directory
18868+// for more information.
18869+//
18870+// $hash=1d85af65e5e48373ca6ecb843bb0fcb8e4483aee$
18871+//
18872+
18873+#ifndef CEF_LIBCEF_DLL_CTOCPP_ACCESS_REQUEST_CTOCPP_H_
18874+#define CEF_LIBCEF_DLL_CTOCPP_ACCESS_REQUEST_CTOCPP_H_
18875+#pragma once
18876+
18877+#if !defined(WRAPPING_CEF_SHARED)
18878+#error This file can be included wrapper-side only
18879+#endif
18880+
18881+#include "include/capi/cef_permission_request_capi.h"
18882+#include "include/cef_permission_request.h"
18883+#include "libcef_dll/ctocpp/ctocpp_ref_counted.h"
18884+
18885+// Wrap a C structure with a C++ class.
18886+// This class may be instantiated and accessed wrapper-side only.
18887+class CefAccessRequestCToCpp
18888+    : public CefCToCppRefCounted<CefAccessRequestCToCpp,
18889+                                 CefAccessRequest,
18890+                                 cef_access_request_t> {
18891+ public:
18892+  CefAccessRequestCToCpp();
18893+  virtual ~CefAccessRequestCToCpp();
18894+
18895+  // CefAccessRequest methods.
18896+  CefString Origin() OVERRIDE;
18897+  int ResourceAcessId() OVERRIDE;
18898+  void ReportRequestResult(bool allowed) OVERRIDE;
18899+};
18900+
18901+#endif  // CEF_LIBCEF_DLL_CTOCPP_ACCESS_REQUEST_CTOCPP_H_
18902diff --git a/cef/libcef_dll/ctocpp/accessibility_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/accessibility_handler_ctocpp.cc
18903index 9c7436f0c3..544ecf2731 100644
18904--- a/cef/libcef_dll/ctocpp/accessibility_handler_ctocpp.cc
18905+++ b/cef/libcef_dll/ctocpp/accessibility_handler_ctocpp.cc
18906@@ -1,4 +1,4 @@
18907-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18908+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18909 // reserved. Use of this source code is governed by a BSD-style license that
18910 // can be found in the LICENSE file.
18911 //
18912@@ -9,7 +9,7 @@
18913 // implementations. See the translator.README.txt file in the tools directory
18914 // for more information.
18915 //
18916-// $hash=88c8e7eb206fa64ab57b424defd9af24da6d5491$
18917+// $hash=ced6517a7c7149502b418c5fb06386ff30777630$
18918 //
18919
18920 #include "libcef_dll/ctocpp/accessibility_handler_ctocpp.h"
18921diff --git a/cef/libcef_dll/ctocpp/accessibility_handler_ctocpp.h b/cef/libcef_dll/ctocpp/accessibility_handler_ctocpp.h
18922index de92d2ca56..17804af634 100644
18923--- a/cef/libcef_dll/ctocpp/accessibility_handler_ctocpp.h
18924+++ b/cef/libcef_dll/ctocpp/accessibility_handler_ctocpp.h
18925@@ -1,4 +1,4 @@
18926-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18927+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18928 // reserved. Use of this source code is governed by a BSD-style license that
18929 // can be found in the LICENSE file.
18930 //
18931@@ -9,7 +9,7 @@
18932 // implementations. See the translator.README.txt file in the tools directory
18933 // for more information.
18934 //
18935-// $hash=88719c35cf2cbe25a0896961f0d75815d326ef12$
18936+// $hash=7ab53ef41cd69320ac6441e514582fd583203207$
18937 //
18938
18939 #ifndef CEF_LIBCEF_DLL_CTOCPP_ACCESSIBILITY_HANDLER_CTOCPP_H_
18940diff --git a/cef/libcef_dll/ctocpp/app_ctocpp.cc b/cef/libcef_dll/ctocpp/app_ctocpp.cc
18941index 9e29935d1c..6d60e8f0cd 100644
18942--- a/cef/libcef_dll/ctocpp/app_ctocpp.cc
18943+++ b/cef/libcef_dll/ctocpp/app_ctocpp.cc
18944@@ -1,4 +1,4 @@
18945-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18946+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18947 // reserved. Use of this source code is governed by a BSD-style license that
18948 // can be found in the LICENSE file.
18949 //
18950@@ -9,7 +9,7 @@
18951 // implementations. See the translator.README.txt file in the tools directory
18952 // for more information.
18953 //
18954-// $hash=7384d804f1ca18e02e55a7003aa5c286ebe89d30$
18955+// $hash=9986455b9b29bd88504e9b4c2b73bfebc87cfc61$
18956 //
18957
18958 #include "libcef_dll/ctocpp/app_ctocpp.h"
18959diff --git a/cef/libcef_dll/ctocpp/app_ctocpp.h b/cef/libcef_dll/ctocpp/app_ctocpp.h
18960index ed94af321b..bac5ba4bb1 100644
18961--- a/cef/libcef_dll/ctocpp/app_ctocpp.h
18962+++ b/cef/libcef_dll/ctocpp/app_ctocpp.h
18963@@ -1,4 +1,4 @@
18964-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18965+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18966 // reserved. Use of this source code is governed by a BSD-style license that
18967 // can be found in the LICENSE file.
18968 //
18969@@ -9,7 +9,7 @@
18970 // implementations. See the translator.README.txt file in the tools directory
18971 // for more information.
18972 //
18973-// $hash=f5d630da8a054d8d8d7ca37345132302dcd2d0fc$
18974+// $hash=b1a38565477fd1c436d8a62bfa9d41747f7fe30f$
18975 //
18976
18977 #ifndef CEF_LIBCEF_DLL_CTOCPP_APP_CTOCPP_H_
18978diff --git a/cef/libcef_dll/ctocpp/audio_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/audio_handler_ctocpp.cc
18979index 016fd311cc..fcba4e0879 100644
18980--- a/cef/libcef_dll/ctocpp/audio_handler_ctocpp.cc
18981+++ b/cef/libcef_dll/ctocpp/audio_handler_ctocpp.cc
18982@@ -1,4 +1,4 @@
18983-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
18984+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
18985 // reserved. Use of this source code is governed by a BSD-style license that
18986 // can be found in the LICENSE file.
18987 //
18988@@ -9,7 +9,7 @@
18989 // implementations. See the translator.README.txt file in the tools directory
18990 // for more information.
18991 //
18992-// $hash=8bd4a48d7cb2e9aaf628d65431588c1e83e854da$
18993+// $hash=e2df55073d0fb809dcd4cf0f6bb7ed36dcd4f73c$
18994 //
18995
18996 #include "libcef_dll/ctocpp/audio_handler_ctocpp.h"
18997diff --git a/cef/libcef_dll/ctocpp/audio_handler_ctocpp.h b/cef/libcef_dll/ctocpp/audio_handler_ctocpp.h
18998index 80e49dab53..cdb6138637 100644
18999--- a/cef/libcef_dll/ctocpp/audio_handler_ctocpp.h
19000+++ b/cef/libcef_dll/ctocpp/audio_handler_ctocpp.h
19001@@ -1,4 +1,4 @@
19002-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
19003+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
19004 // reserved. Use of this source code is governed by a BSD-style license that
19005 // can be found in the LICENSE file.
19006 //
19007@@ -9,7 +9,7 @@
19008 // implementations. See the translator.README.txt file in the tools directory
19009 // for more information.
19010 //
19011-// $hash=ccd696c315ecbc8cf3252c54a9bd71ac28d5550d$
19012+// $hash=9de91dcf5136e07c0d5c06ad9be8173b918f668a$
19013 //
19014
19015 #ifndef CEF_LIBCEF_DLL_CTOCPP_AUDIO_HANDLER_CTOCPP_H_
19016diff --git a/cef/libcef_dll/ctocpp/auth_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/auth_callback_ctocpp.cc
19017index ba8f1e61b2..f0acf803eb 100644
19018--- a/cef/libcef_dll/ctocpp/auth_callback_ctocpp.cc
19019+++ b/cef/libcef_dll/ctocpp/auth_callback_ctocpp.cc
19020@@ -1,4 +1,4 @@
19021-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
19022+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
19023 // reserved. Use of this source code is governed by a BSD-style license that
19024 // can be found in the LICENSE file.
19025 //
19026@@ -9,7 +9,7 @@
19027 // implementations. See the translator.README.txt file in the tools directory
19028 // for more information.
19029 //
19030-// $hash=5ccac5c93309829f907d949c81c547d0abf0625b$
19031+// $hash=3ae38c17cba153dbca73496eae905202ac09bfeb$
19032 //
19033
19034 #include "libcef_dll/ctocpp/auth_callback_ctocpp.h"
19035diff --git a/cef/libcef_dll/ctocpp/auth_callback_ctocpp.h b/cef/libcef_dll/ctocpp/auth_callback_ctocpp.h
19036index 974bdbe175..d8ca62c457 100644
19037--- a/cef/libcef_dll/ctocpp/auth_callback_ctocpp.h
19038+++ b/cef/libcef_dll/ctocpp/auth_callback_ctocpp.h
19039@@ -1,4 +1,4 @@
19040-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
19041+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
19042 // reserved. Use of this source code is governed by a BSD-style license that
19043 // can be found in the LICENSE file.
19044 //
19045@@ -9,7 +9,7 @@
19046 // implementations. See the translator.README.txt file in the tools directory
19047 // for more information.
19048 //
19049-// $hash=e3a2949721f228e60049d3aee74253efd1d53f0d$
19050+// $hash=2e08ff9c5744055783e66c5f5068412c23bdfb6a$
19051 //
19052
19053 #ifndef CEF_LIBCEF_DLL_CTOCPP_AUTH_CALLBACK_CTOCPP_H_
19054diff --git a/cef/libcef_dll/ctocpp/before_download_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/before_download_callback_ctocpp.cc
19055index d41ead3c3e..35b0bb6593 100644
19056--- a/cef/libcef_dll/ctocpp/before_download_callback_ctocpp.cc
19057+++ b/cef/libcef_dll/ctocpp/before_download_callback_ctocpp.cc
19058@@ -1,4 +1,4 @@
19059-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
19060+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
19061 // reserved. Use of this source code is governed by a BSD-style license that
19062 // can be found in the LICENSE file.
19063 //
19064@@ -9,7 +9,7 @@
19065 // implementations. See the translator.README.txt file in the tools directory
19066 // for more information.
19067 //
19068-// $hash=2cebe88a087dbe955014937d99e976810b27975c$
19069+// $hash=dab6c53c94db70fbeb54b440584a5147c52fe082$
19070 //
19071
19072 #include "libcef_dll/ctocpp/before_download_callback_ctocpp.h"
19073diff --git a/cef/libcef_dll/ctocpp/before_download_callback_ctocpp.h b/cef/libcef_dll/ctocpp/before_download_callback_ctocpp.h
19074index caf64abd59..dc1313ca88 100644
19075--- a/cef/libcef_dll/ctocpp/before_download_callback_ctocpp.h
19076+++ b/cef/libcef_dll/ctocpp/before_download_callback_ctocpp.h
19077@@ -1,4 +1,4 @@
19078-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
19079+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
19080 // reserved. Use of this source code is governed by a BSD-style license that
19081 // can be found in the LICENSE file.
19082 //
19083@@ -9,7 +9,7 @@
19084 // implementations. See the translator.README.txt file in the tools directory
19085 // for more information.
19086 //
19087-// $hash=b54f6ec001036bb2cab243ced337eafd7cf22ec8$
19088+// $hash=bc1c58374243e92f6cae5d66edf446523546d18a$
19089 //
19090
19091 #ifndef CEF_LIBCEF_DLL_CTOCPP_BEFORE_DOWNLOAD_CALLBACK_CTOCPP_H_
19092diff --git a/cef/libcef_dll/ctocpp/binary_value_ctocpp.cc b/cef/libcef_dll/ctocpp/binary_value_ctocpp.cc
19093index ba1c34b7fe..307b982cde 100644
19094--- a/cef/libcef_dll/ctocpp/binary_value_ctocpp.cc
19095+++ b/cef/libcef_dll/ctocpp/binary_value_ctocpp.cc
19096@@ -1,4 +1,4 @@
19097-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
19098+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
19099 // reserved. Use of this source code is governed by a BSD-style license that
19100 // can be found in the LICENSE file.
19101 //
19102@@ -9,7 +9,7 @@
19103 // implementations. See the translator.README.txt file in the tools directory
19104 // for more information.
19105 //
19106-// $hash=78c713e9d60aaa468df5d5cdb224991756b92ce0$
19107+// $hash=80a91b8a85dc537cb49cbd5eaea974f92fbf9cde$
19108 //
19109
19110 #include "libcef_dll/ctocpp/binary_value_ctocpp.h"
19111diff --git a/cef/libcef_dll/ctocpp/binary_value_ctocpp.h b/cef/libcef_dll/ctocpp/binary_value_ctocpp.h
19112index b02d4ad731..668f33d7ce 100644
19113--- a/cef/libcef_dll/ctocpp/binary_value_ctocpp.h
19114+++ b/cef/libcef_dll/ctocpp/binary_value_ctocpp.h
19115@@ -1,4 +1,4 @@
19116-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
19117+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
19118 // reserved. Use of this source code is governed by a BSD-style license that
19119 // can be found in the LICENSE file.
19120 //
19121@@ -9,7 +9,7 @@
19122 // implementations. See the translator.README.txt file in the tools directory
19123 // for more information.
19124 //
19125-// $hash=6722d4d826fa46825fe93093de549794e765cbbe$
19126+// $hash=3ee6de3b032cce7c85b08ec86f330815d467b381$
19127 //
19128
19129 #ifndef CEF_LIBCEF_DLL_CTOCPP_BINARY_VALUE_CTOCPP_H_
19130diff --git a/cef/libcef_dll/ctocpp/browser_ctocpp.cc b/cef/libcef_dll/ctocpp/browser_ctocpp.cc
19131index 588f67df1d..ab518cb458 100644
19132--- a/cef/libcef_dll/ctocpp/browser_ctocpp.cc
19133+++ b/cef/libcef_dll/ctocpp/browser_ctocpp.cc
19134@@ -1,4 +1,4 @@
19135-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
19136+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
19137 // reserved. Use of this source code is governed by a BSD-style license that
19138 // can be found in the LICENSE file.
19139 //
19140@@ -9,13 +9,15 @@
19141 // implementations. See the translator.README.txt file in the tools directory
19142 // for more information.
19143 //
19144-// $hash=7d80a2edec79db9cb7be6bc23a1103a9f55c66c1$
19145+// $hash=669b83a0500ef99c8537d8f00fe746c28e09b31a$
19146 //
19147
19148 #include "libcef_dll/ctocpp/browser_ctocpp.h"
19149 #include <algorithm>
19150 #include "libcef_dll/ctocpp/browser_host_ctocpp.h"
19151+#include "libcef_dll/ctocpp/browser_permission_request_delegate_ctocpp.h"
19152 #include "libcef_dll/ctocpp/frame_ctocpp.h"
19153+#include "libcef_dll/ctocpp/geolocation_acess_ctocpp.h"
19154 #include "libcef_dll/shutdown_checker.h"
19155 #include "libcef_dll/transfer_util.h"
19156
19157@@ -95,6 +97,23 @@ NO_SANITIZE("cfi-icall") void CefBrowserCToCpp::GoForward() {
19158   _struct->go_forward(_struct);
19159 }
19160
19161+NO_SANITIZE("cfi-icall")
19162+bool CefBrowserCToCpp::CanGoBackOrForward(int num_steps) {
19163+  shutdown_checker::AssertNotShutdown();
19164+
19165+  cef_browser_t* _struct = GetStruct();
19166+  if (CEF_MEMBER_MISSING(_struct, can_go_back_or_forward))
19167+    return false;
19168+
19169+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19170+
19171+  // Execute
19172+  int _retval = _struct->can_go_back_or_forward(_struct, num_steps);
19173+
19174+  // Return type: bool
19175+  return _retval ? true : false;
19176+}
19177+
19178 NO_SANITIZE("cfi-icall") bool CefBrowserCToCpp::IsLoading() {
19179   shutdown_checker::AssertNotShutdown();
19180
19181@@ -372,6 +391,43 @@ void CefBrowserCToCpp::GetFrameNames(std::vector<CefString>& names) {
19182   }
19183 }
19184
19185+NO_SANITIZE("cfi-icall")
19186+CefRefPtr<CefBrowserPermissionRequestDelegate> CefBrowserCToCpp::
19187+    GetPermissionRequestDelegate() {
19188+  shutdown_checker::AssertNotShutdown();
19189+
19190+  cef_browser_t* _struct = GetStruct();
19191+  if (CEF_MEMBER_MISSING(_struct, get_permission_request_delegate))
19192+    return nullptr;
19193+
19194+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19195+
19196+  // Execute
19197+  cef_browser_permission_request_delegate_t* _retval =
19198+      _struct->get_permission_request_delegate(_struct);
19199+
19200+  // Return type: refptr_same
19201+  return CefBrowserPermissionRequestDelegateCToCpp::Wrap(_retval);
19202+}
19203+
19204+NO_SANITIZE("cfi-icall")
19205+CefRefPtr<CefGeolocationAcess> CefBrowserCToCpp::GetGeolocationPermissions() {
19206+  shutdown_checker::AssertNotShutdown();
19207+
19208+  cef_browser_t* _struct = GetStruct();
19209+  if (CEF_MEMBER_MISSING(_struct, get_geolocation_permissions))
19210+    return nullptr;
19211+
19212+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19213+
19214+  // Execute
19215+  cef_geolocation_acess_t* _retval =
19216+      _struct->get_geolocation_permissions(_struct);
19217+
19218+  // Return type: refptr_same
19219+  return CefGeolocationAcessCToCpp::Wrap(_retval);
19220+}
19221+
19222 // CONSTRUCTOR - Do not edit by hand.
19223
19224 CefBrowserCToCpp::CefBrowserCToCpp() {}
19225diff --git a/cef/libcef_dll/ctocpp/browser_ctocpp.h b/cef/libcef_dll/ctocpp/browser_ctocpp.h
19226index 23c9266543..c8ac3665f4 100644
19227--- a/cef/libcef_dll/ctocpp/browser_ctocpp.h
19228+++ b/cef/libcef_dll/ctocpp/browser_ctocpp.h
19229@@ -1,4 +1,4 @@
19230-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
19231+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
19232 // reserved. Use of this source code is governed by a BSD-style license that
19233 // can be found in the LICENSE file.
19234 //
19235@@ -9,7 +9,7 @@
19236 // implementations. See the translator.README.txt file in the tools directory
19237 // for more information.
19238 //
19239-// $hash=0413031a4d40137ab08d1bd99af0216e88ebf6ea$
19240+// $hash=5a8d946ed143178608c22b2952d6f82e46b52976$
19241 //
19242
19243 #ifndef CEF_LIBCEF_DLL_CTOCPP_BROWSER_CTOCPP_H_
19244@@ -41,6 +41,7 @@ class CefBrowserCToCpp
19245   void GoBack() OVERRIDE;
19246   bool CanGoForward() OVERRIDE;
19247   void GoForward() OVERRIDE;
19248+  bool CanGoBackOrForward(int num_steps) OVERRIDE;
19249   bool IsLoading() OVERRIDE;
19250   void Reload() OVERRIDE;
19251   void ReloadIgnoreCache() OVERRIDE;
19252@@ -56,6 +57,9 @@ class CefBrowserCToCpp
19253   size_t GetFrameCount() OVERRIDE;
19254   void GetFrameIdentifiers(std::vector<int64>& identifiers) OVERRIDE;
19255   void GetFrameNames(std::vector<CefString>& names) OVERRIDE;
19256+  CefRefPtr<CefBrowserPermissionRequestDelegate> GetPermissionRequestDelegate()
19257+      OVERRIDE;
19258+  CefRefPtr<CefGeolocationAcess> GetGeolocationPermissions() OVERRIDE;
19259 };
19260
19261 #endif  // CEF_LIBCEF_DLL_CTOCPP_BROWSER_CTOCPP_H_
19262diff --git a/cef/libcef_dll/ctocpp/browser_host_ctocpp.cc b/cef/libcef_dll/ctocpp/browser_host_ctocpp.cc
19263index 1a57545931..558aa1e34d 100644
19264--- a/cef/libcef_dll/ctocpp/browser_host_ctocpp.cc
19265+++ b/cef/libcef_dll/ctocpp/browser_host_ctocpp.cc
19266@@ -1,4 +1,4 @@
19267-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
19268+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
19269 // reserved. Use of this source code is governed by a BSD-style license that
19270 // can be found in the LICENSE file.
19271 //
19272@@ -9,16 +9,18 @@
19273 // implementations. See the translator.README.txt file in the tools directory
19274 // for more information.
19275 //
19276-// $hash=e53c3c194d40a9bdee41a348a1c9fd65822e4ba9$
19277+// $hash=fda8e729ccaccaa70336cc4f897f53098e7430f3$
19278 //
19279
19280 #include "libcef_dll/ctocpp/browser_host_ctocpp.h"
19281 #include "libcef_dll/cpptoc/client_cpptoc.h"
19282 #include "libcef_dll/cpptoc/dev_tools_message_observer_cpptoc.h"
19283 #include "libcef_dll/cpptoc/download_image_callback_cpptoc.h"
19284+#include "libcef_dll/cpptoc/java_script_result_callback_cpptoc.h"
19285 #include "libcef_dll/cpptoc/navigation_entry_visitor_cpptoc.h"
19286 #include "libcef_dll/cpptoc/pdf_print_callback_cpptoc.h"
19287 #include "libcef_dll/cpptoc/run_file_dialog_callback_cpptoc.h"
19288+#include "libcef_dll/cpptoc/task_cpptoc.h"
19289 #include "libcef_dll/ctocpp/browser_ctocpp.h"
19290 #include "libcef_dll/ctocpp/dictionary_value_ctocpp.h"
19291 #include "libcef_dll/ctocpp/drag_data_ctocpp.h"
19292@@ -98,6 +100,25 @@ CefRefPtr<CefBrowser> CefBrowserHostCToCpp::GetBrowser() {
19293   return CefBrowserCToCpp::Wrap(_retval);
19294 }
19295
19296+NO_SANITIZE("cfi-icall")
19297+void CefBrowserHostCToCpp::PostTaskToUIThread(CefRefPtr<CefTask> task) {
19298+  shutdown_checker::AssertNotShutdown();
19299+
19300+  cef_browser_host_t* _struct = GetStruct();
19301+  if (CEF_MEMBER_MISSING(_struct, post_task_to_uithread))
19302+    return;
19303+
19304+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19305+
19306+  // Verify param: task; type: refptr_diff
19307+  DCHECK(task.get());
19308+  if (!task.get())
19309+    return;
19310+
19311+  // Execute
19312+  _struct->post_task_to_uithread(_struct, CefTaskCppToC::Wrap(task));
19313+}
19314+
19315 NO_SANITIZE("cfi-icall")
19316 void CefBrowserHostCToCpp::CloseBrowser(bool force_close) {
19317   shutdown_checker::AssertNotShutdown();
19318@@ -835,6 +856,268 @@ void CefBrowserHostCToCpp::SetWindowlessFrameRate(int frame_rate) {
19319   _struct->set_windowless_frame_rate(_struct, frame_rate);
19320 }
19321
19322+NO_SANITIZE("cfi-icall")
19323+void CefBrowserHostCToCpp::SetWebPreferences(
19324+    const CefBrowserSettings& browser_settings) {
19325+  shutdown_checker::AssertNotShutdown();
19326+
19327+  cef_browser_host_t* _struct = GetStruct();
19328+  if (CEF_MEMBER_MISSING(_struct, set_web_preferences))
19329+    return;
19330+
19331+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19332+
19333+  // Execute
19334+  _struct->set_web_preferences(_struct, &browser_settings);
19335+}
19336+
19337+NO_SANITIZE("cfi-icall")
19338+void CefBrowserHostCToCpp::PutUserAgent(const CefString& ua) {
19339+  shutdown_checker::AssertNotShutdown();
19340+
19341+  cef_browser_host_t* _struct = GetStruct();
19342+  if (CEF_MEMBER_MISSING(_struct, put_user_agent))
19343+    return;
19344+
19345+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19346+
19347+  // Verify param: ua; type: string_byref_const
19348+  DCHECK(!ua.empty());
19349+  if (ua.empty())
19350+    return;
19351+
19352+  // Execute
19353+  _struct->put_user_agent(_struct, ua.GetStruct());
19354+}
19355+
19356+NO_SANITIZE("cfi-icall") CefString CefBrowserHostCToCpp::DefaultUserAgent() {
19357+  shutdown_checker::AssertNotShutdown();
19358+
19359+  cef_browser_host_t* _struct = GetStruct();
19360+  if (CEF_MEMBER_MISSING(_struct, default_user_agent))
19361+    return CefString();
19362+
19363+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19364+
19365+  // Execute
19366+  cef_string_userfree_t _retval = _struct->default_user_agent(_struct);
19367+
19368+  // Return type: string
19369+  CefString _retvalStr;
19370+  _retvalStr.AttachToUserFree(_retval);
19371+  return _retvalStr;
19372+}
19373+
19374+NO_SANITIZE("cfi-icall")
19375+void CefBrowserHostCToCpp::SetBackgroundColor(int color) {
19376+  shutdown_checker::AssertNotShutdown();
19377+
19378+  cef_browser_host_t* _struct = GetStruct();
19379+  if (CEF_MEMBER_MISSING(_struct, set_background_color))
19380+    return;
19381+
19382+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19383+
19384+  // Execute
19385+  _struct->set_background_color(_struct, color);
19386+}
19387+
19388+NO_SANITIZE("cfi-icall")
19389+void CefBrowserHostCToCpp::RegisterArkJSfunction(
19390+    const CefString& object_name,
19391+    const std::vector<CefString>& method_list) {
19392+  shutdown_checker::AssertNotShutdown();
19393+
19394+  cef_browser_host_t* _struct = GetStruct();
19395+  if (CEF_MEMBER_MISSING(_struct, register_ark_jsfunction))
19396+    return;
19397+
19398+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19399+
19400+  // Verify param: object_name; type: string_byref_const
19401+  DCHECK(!object_name.empty());
19402+  if (object_name.empty())
19403+    return;
19404+
19405+  // Translate param: method_list; type: string_vec_byref_const
19406+  cef_string_list_t method_listList = cef_string_list_alloc();
19407+  DCHECK(method_listList);
19408+  if (method_listList)
19409+    transfer_string_list_contents(method_list, method_listList);
19410+
19411+  // Execute
19412+  _struct->register_ark_jsfunction(_struct, object_name.GetStruct(),
19413+                                   method_listList);
19414+
19415+  // Restore param:method_list; type: string_vec_byref_const
19416+  if (method_listList)
19417+    cef_string_list_free(method_listList);
19418+}
19419+
19420+NO_SANITIZE("cfi-icall")
19421+void CefBrowserHostCToCpp::UnregisterArkJSfunction(
19422+    const CefString& object_name,
19423+    const std::vector<CefString>& method_list) {
19424+  shutdown_checker::AssertNotShutdown();
19425+
19426+  cef_browser_host_t* _struct = GetStruct();
19427+  if (CEF_MEMBER_MISSING(_struct, unregister_ark_jsfunction))
19428+    return;
19429+
19430+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19431+
19432+  // Verify param: object_name; type: string_byref_const
19433+  DCHECK(!object_name.empty());
19434+  if (object_name.empty())
19435+    return;
19436+  // Unverified params: method_list
19437+
19438+  // Translate param: method_list; type: string_vec_byref_const
19439+  cef_string_list_t method_listList = cef_string_list_alloc();
19440+  DCHECK(method_listList);
19441+  if (method_listList)
19442+    transfer_string_list_contents(method_list, method_listList);
19443+
19444+  // Execute
19445+  _struct->unregister_ark_jsfunction(_struct, object_name.GetStruct(),
19446+                                     method_listList);
19447+
19448+  // Restore param:method_list; type: string_vec_byref_const
19449+  if (method_listList)
19450+    cef_string_list_free(method_listList);
19451+}
19452+
19453+NO_SANITIZE("cfi-icall") CefString CefBrowserHostCToCpp::Title() {
19454+  shutdown_checker::AssertNotShutdown();
19455+
19456+  cef_browser_host_t* _struct = GetStruct();
19457+  if (CEF_MEMBER_MISSING(_struct, title))
19458+    return CefString();
19459+
19460+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19461+
19462+  // Execute
19463+  cef_string_userfree_t _retval = _struct->title(_struct);
19464+
19465+  // Return type: string
19466+  CefString _retvalStr;
19467+  _retvalStr.AttachToUserFree(_retval);
19468+  return _retvalStr;
19469+}
19470+
19471+NO_SANITIZE("cfi-icall")
19472+void CefBrowserHostCToCpp::GetHitData(int& type, CefString& extra_data) {
19473+  shutdown_checker::AssertNotShutdown();
19474+
19475+  cef_browser_host_t* _struct = GetStruct();
19476+  if (CEF_MEMBER_MISSING(_struct, get_hit_data))
19477+    return;
19478+
19479+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19480+
19481+  // Execute
19482+  _struct->get_hit_data(_struct, &type, extra_data.GetWritableStruct());
19483+}
19484+
19485+NO_SANITIZE("cfi-icall") int CefBrowserHostCToCpp::PageLoadProgress() {
19486+  shutdown_checker::AssertNotShutdown();
19487+
19488+  cef_browser_host_t* _struct = GetStruct();
19489+  if (CEF_MEMBER_MISSING(_struct, page_load_progress))
19490+    return 0;
19491+
19492+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19493+
19494+  // Execute
19495+  int _retval = _struct->page_load_progress(_struct);
19496+
19497+  // Return type: simple
19498+  return _retval;
19499+}
19500+
19501+NO_SANITIZE("cfi-icall") float CefBrowserHostCToCpp::Scale() {
19502+  shutdown_checker::AssertNotShutdown();
19503+
19504+  cef_browser_host_t* _struct = GetStruct();
19505+  if (CEF_MEMBER_MISSING(_struct, scale))
19506+    return 0;
19507+
19508+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19509+
19510+  // Execute
19511+  float _retval = _struct->scale(_struct);
19512+
19513+  // Return type: simple
19514+  return _retval;
19515+}
19516+
19517+NO_SANITIZE("cfi-icall")
19518+void CefBrowserHostCToCpp::LoadWithDataAndBaseUrl(const CefString& baseUrl,
19519+                                                  const CefString& data,
19520+                                                  const CefString& mimeType,
19521+                                                  const CefString& encoding,
19522+                                                  const CefString& historyUrl) {
19523+  shutdown_checker::AssertNotShutdown();
19524+
19525+  cef_browser_host_t* _struct = GetStruct();
19526+  if (CEF_MEMBER_MISSING(_struct, load_with_data_and_base_url))
19527+    return;
19528+
19529+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19530+
19531+  // Unverified params: baseUrl, data, mimeType, encoding, historyUrl
19532+
19533+  // Execute
19534+  _struct->load_with_data_and_base_url(
19535+      _struct, baseUrl.GetStruct(), data.GetStruct(), mimeType.GetStruct(),
19536+      encoding.GetStruct(), historyUrl.GetStruct());
19537+}
19538+
19539+NO_SANITIZE("cfi-icall")
19540+void CefBrowserHostCToCpp::LoadWithData(const CefString& data,
19541+                                        const CefString& mimeType,
19542+                                        const CefString& encoding) {
19543+  shutdown_checker::AssertNotShutdown();
19544+
19545+  cef_browser_host_t* _struct = GetStruct();
19546+  if (CEF_MEMBER_MISSING(_struct, load_with_data))
19547+    return;
19548+
19549+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19550+
19551+  // Unverified params: data, mimeType, encoding
19552+
19553+  // Execute
19554+  _struct->load_with_data(_struct, data.GetStruct(), mimeType.GetStruct(),
19555+                          encoding.GetStruct());
19556+}
19557+
19558+NO_SANITIZE("cfi-icall")
19559+void CefBrowserHostCToCpp::AddVisitedLinks(const std::vector<CefString>& urls) {
19560+  shutdown_checker::AssertNotShutdown();
19561+
19562+  cef_browser_host_t* _struct = GetStruct();
19563+  if (CEF_MEMBER_MISSING(_struct, add_visited_links))
19564+    return;
19565+
19566+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19567+
19568+  // Unverified params: urls
19569+
19570+  // Translate param: urls; type: string_vec_byref_const
19571+  cef_string_list_t urlsList = cef_string_list_alloc();
19572+  DCHECK(urlsList);
19573+  if (urlsList)
19574+    transfer_string_list_contents(urls, urlsList);
19575+
19576+  // Execute
19577+  _struct->add_visited_links(_struct, urlsList);
19578+
19579+  // Restore param:urls; type: string_vec_byref_const
19580+  if (urlsList)
19581+    cef_string_list_free(urlsList);
19582+}
19583+
19584 NO_SANITIZE("cfi-icall")
19585 void CefBrowserHostCToCpp::ImeSetComposition(
19586     const CefString& text,
19587@@ -1126,6 +1409,33 @@ NO_SANITIZE("cfi-icall") bool CefBrowserHostCToCpp::IsAudioMuted() {
19588   return _retval ? true : false;
19589 }
19590
19591+NO_SANITIZE("cfi-icall")
19592+void CefBrowserHostCToCpp::ExecuteJavaScript(
19593+    const CefString& code,
19594+    CefRefPtr<CefJavaScriptResultCallback> callback) {
19595+  shutdown_checker::AssertNotShutdown();
19596+
19597+  cef_browser_host_t* _struct = GetStruct();
19598+  if (CEF_MEMBER_MISSING(_struct, execute_java_script))
19599+    return;
19600+
19601+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19602+
19603+  // Verify param: code; type: string_byref_const
19604+  DCHECK(!code.empty());
19605+  if (code.empty())
19606+    return;
19607+  // Verify param: callback; type: refptr_diff
19608+  DCHECK(callback.get());
19609+  if (!callback.get())
19610+    return;
19611+
19612+  // Execute
19613+  _struct->execute_java_script(
19614+      _struct, code.GetStruct(),
19615+      CefJavaScriptResultCallbackCppToC::Wrap(callback));
19616+}
19617+
19618 // CONSTRUCTOR - Do not edit by hand.
19619
19620 CefBrowserHostCToCpp::CefBrowserHostCToCpp() {}
19621diff --git a/cef/libcef_dll/ctocpp/browser_host_ctocpp.h b/cef/libcef_dll/ctocpp/browser_host_ctocpp.h
19622index e630d54cdf..f7d93e799d 100644
19623--- a/cef/libcef_dll/ctocpp/browser_host_ctocpp.h
19624+++ b/cef/libcef_dll/ctocpp/browser_host_ctocpp.h
19625@@ -1,4 +1,4 @@
19626-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
19627+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
19628 // reserved. Use of this source code is governed by a BSD-style license that
19629 // can be found in the LICENSE file.
19630 //
19631@@ -9,7 +9,7 @@
19632 // implementations. See the translator.README.txt file in the tools directory
19633 // for more information.
19634 //
19635-// $hash=95928a6e1311ff0406b502076defccc441d0b57c$
19636+// $hash=cf6e8c80db9579bc35d920ab4c35659a6535c355$
19637 //
19638
19639 #ifndef CEF_LIBCEF_DLL_CTOCPP_BROWSER_HOST_CTOCPP_H_
19640@@ -38,6 +38,7 @@ class CefBrowserHostCToCpp : public CefCToCppRefCounted<CefBrowserHostCToCpp,
19641
19642   // CefBrowserHost methods.
19643   CefRefPtr<CefBrowser> GetBrowser() OVERRIDE;
19644+  void PostTaskToUIThread(CefRefPtr<CefTask> task) OVERRIDE;
19645   void CloseBrowser(bool force_close) OVERRIDE;
19646   bool TryCloseBrowser() OVERRIDE;
19647   void SetFocus(bool focus) OVERRIDE;
19648@@ -107,6 +108,29 @@ class CefBrowserHostCToCpp : public CefCToCppRefCounted<CefBrowserHostCToCpp,
19649   void NotifyMoveOrResizeStarted() OVERRIDE;
19650   int GetWindowlessFrameRate() OVERRIDE;
19651   void SetWindowlessFrameRate(int frame_rate) OVERRIDE;
19652+  void SetWebPreferences(const CefBrowserSettings& browser_settings) OVERRIDE;
19653+  void PutUserAgent(const CefString& ua) OVERRIDE;
19654+  CefString DefaultUserAgent() OVERRIDE;
19655+  void SetBackgroundColor(int color) OVERRIDE;
19656+  void RegisterArkJSfunction(
19657+      const CefString& object_name,
19658+      const std::vector<CefString>& method_list) OVERRIDE;
19659+  void UnregisterArkJSfunction(
19660+      const CefString& object_name,
19661+      const std::vector<CefString>& method_list) OVERRIDE;
19662+  CefString Title() OVERRIDE;
19663+  void GetHitData(int& type, CefString& extra_data) OVERRIDE;
19664+  int PageLoadProgress() OVERRIDE;
19665+  float Scale() OVERRIDE;
19666+  void LoadWithDataAndBaseUrl(const CefString& baseUrl,
19667+                              const CefString& data,
19668+                              const CefString& mimeType,
19669+                              const CefString& encoding,
19670+                              const CefString& historyUrl) OVERRIDE;
19671+  void LoadWithData(const CefString& data,
19672+                    const CefString& mimeType,
19673+                    const CefString& encoding) OVERRIDE;
19674+  void AddVisitedLinks(const std::vector<CefString>& urls) OVERRIDE;
19675   void ImeSetComposition(const CefString& text,
19676                          const std::vector<CefCompositionUnderline>& underlines,
19677                          const CefRange& replacement_range,
19678@@ -134,6 +158,9 @@ class CefBrowserHostCToCpp : public CefCToCppRefCounted<CefBrowserHostCToCpp,
19679   bool IsBackgroundHost() OVERRIDE;
19680   void SetAudioMuted(bool mute) OVERRIDE;
19681   bool IsAudioMuted() OVERRIDE;
19682+  void ExecuteJavaScript(
19683+      const CefString& code,
19684+      CefRefPtr<CefJavaScriptResultCallback> callback) OVERRIDE;
19685 };
19686
19687 #endif  // CEF_LIBCEF_DLL_CTOCPP_BROWSER_HOST_CTOCPP_H_
19688diff --git a/cef/libcef_dll/ctocpp/browser_permission_request_delegate_ctocpp.cc b/cef/libcef_dll/ctocpp/browser_permission_request_delegate_ctocpp.cc
19689new file mode 100644
19690index 0000000000..0076560af5
19691--- /dev/null
19692+++ b/cef/libcef_dll/ctocpp/browser_permission_request_delegate_ctocpp.cc
19693@@ -0,0 +1,194 @@
19694+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
19695+// reserved. Use of this source code is governed by a BSD-style license that
19696+// can be found in the LICENSE file.
19697+//
19698+// ---------------------------------------------------------------------------
19699+//
19700+// This file was generated by the CEF translator tool. If making changes by
19701+// hand only do so within the body of existing method and function
19702+// implementations. See the translator.README.txt file in the tools directory
19703+// for more information.
19704+//
19705+// $hash=4a9c34d8dd8e49725dd7288c3a8c3e2a978c977c$
19706+//
19707+
19708+#include "libcef_dll/ctocpp/browser_permission_request_delegate_ctocpp.h"
19709+#include "libcef_dll/shutdown_checker.h"
19710+
19711+// VIRTUAL METHODS - Body may be edited by hand.
19712+
19713+NO_SANITIZE("cfi-icall")
19714+void CefBrowserPermissionRequestDelegateCToCpp::AskGeolocationPermission(
19715+    const CefString& origin,
19716+    cef_permission_callback_t callback) {
19717+  shutdown_checker::AssertNotShutdown();
19718+
19719+  cef_browser_permission_request_delegate_t* _struct = GetStruct();
19720+  if (CEF_MEMBER_MISSING(_struct, ask_geolocation_permission))
19721+    return;
19722+
19723+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19724+
19725+  // Verify param: origin; type: string_byref_const
19726+  DCHECK(!origin.empty());
19727+  if (origin.empty())
19728+    return;
19729+
19730+  // Execute
19731+  _struct->ask_geolocation_permission(_struct, origin.GetStruct(), callback);
19732+}
19733+
19734+NO_SANITIZE("cfi-icall")
19735+void CefBrowserPermissionRequestDelegateCToCpp::AbortAskGeolocationPermission(
19736+    const CefString& origin) {
19737+  shutdown_checker::AssertNotShutdown();
19738+
19739+  cef_browser_permission_request_delegate_t* _struct = GetStruct();
19740+  if (CEF_MEMBER_MISSING(_struct, abort_ask_geolocation_permission))
19741+    return;
19742+
19743+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19744+
19745+  // Verify param: origin; type: string_byref_const
19746+  DCHECK(!origin.empty());
19747+  if (origin.empty())
19748+    return;
19749+
19750+  // Execute
19751+  _struct->abort_ask_geolocation_permission(_struct, origin.GetStruct());
19752+}
19753+
19754+NO_SANITIZE("cfi-icall")
19755+void CefBrowserPermissionRequestDelegateCToCpp::
19756+    AskProtectedMediaIdentifierPermission(const CefString& origin,
19757+                                          cef_permission_callback_t callback) {
19758+  shutdown_checker::AssertNotShutdown();
19759+
19760+  cef_browser_permission_request_delegate_t* _struct = GetStruct();
19761+  if (CEF_MEMBER_MISSING(_struct, ask_protected_media_identifier_permission))
19762+    return;
19763+
19764+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19765+
19766+  // Verify param: origin; type: string_byref_const
19767+  DCHECK(!origin.empty());
19768+  if (origin.empty())
19769+    return;
19770+
19771+  // Execute
19772+  _struct->ask_protected_media_identifier_permission(
19773+      _struct, origin.GetStruct(), callback);
19774+}
19775+
19776+NO_SANITIZE("cfi-icall")
19777+void CefBrowserPermissionRequestDelegateCToCpp::
19778+    AbortAskProtectedMediaIdentifierPermission(const CefString& origin) {
19779+  shutdown_checker::AssertNotShutdown();
19780+
19781+  cef_browser_permission_request_delegate_t* _struct = GetStruct();
19782+  if (CEF_MEMBER_MISSING(_struct,
19783+                         abort_ask_protected_media_identifier_permission))
19784+    return;
19785+
19786+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19787+
19788+  // Verify param: origin; type: string_byref_const
19789+  DCHECK(!origin.empty());
19790+  if (origin.empty())
19791+    return;
19792+
19793+  // Execute
19794+  _struct->abort_ask_protected_media_identifier_permission(_struct,
19795+                                                           origin.GetStruct());
19796+}
19797+
19798+NO_SANITIZE("cfi-icall")
19799+void CefBrowserPermissionRequestDelegateCToCpp::AskMIDISysexPermission(
19800+    const CefString& origin,
19801+    cef_permission_callback_t callback) {
19802+  shutdown_checker::AssertNotShutdown();
19803+
19804+  cef_browser_permission_request_delegate_t* _struct = GetStruct();
19805+  if (CEF_MEMBER_MISSING(_struct, ask_midisysex_permission))
19806+    return;
19807+
19808+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19809+
19810+  // Verify param: origin; type: string_byref_const
19811+  DCHECK(!origin.empty());
19812+  if (origin.empty())
19813+    return;
19814+
19815+  // Execute
19816+  _struct->ask_midisysex_permission(_struct, origin.GetStruct(), callback);
19817+}
19818+
19819+NO_SANITIZE("cfi-icall")
19820+void CefBrowserPermissionRequestDelegateCToCpp::AbortAskMIDISysexPermission(
19821+    const CefString& origin) {
19822+  shutdown_checker::AssertNotShutdown();
19823+
19824+  cef_browser_permission_request_delegate_t* _struct = GetStruct();
19825+  if (CEF_MEMBER_MISSING(_struct, abort_ask_midisysex_permission))
19826+    return;
19827+
19828+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19829+
19830+  // Verify param: origin; type: string_byref_const
19831+  DCHECK(!origin.empty());
19832+  if (origin.empty())
19833+    return;
19834+
19835+  // Execute
19836+  _struct->abort_ask_midisysex_permission(_struct, origin.GetStruct());
19837+}
19838+
19839+NO_SANITIZE("cfi-icall")
19840+void CefBrowserPermissionRequestDelegateCToCpp::NotifyGeolocationPermission(
19841+    bool value,
19842+    const CefString& origin) {
19843+  shutdown_checker::AssertNotShutdown();
19844+
19845+  cef_browser_permission_request_delegate_t* _struct = GetStruct();
19846+  if (CEF_MEMBER_MISSING(_struct, notify_geolocation_permission))
19847+    return;
19848+
19849+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
19850+
19851+  // Verify param: origin; type: string_byref_const
19852+  DCHECK(!origin.empty());
19853+  if (origin.empty())
19854+    return;
19855+
19856+  // Execute
19857+  _struct->notify_geolocation_permission(_struct, value, origin.GetStruct());
19858+}
19859+
19860+// CONSTRUCTOR - Do not edit by hand.
19861+
19862+CefBrowserPermissionRequestDelegateCToCpp::
19863+    CefBrowserPermissionRequestDelegateCToCpp() {}
19864+
19865+// DESTRUCTOR - Do not edit by hand.
19866+
19867+CefBrowserPermissionRequestDelegateCToCpp::
19868+    ~CefBrowserPermissionRequestDelegateCToCpp() {
19869+  shutdown_checker::AssertNotShutdown();
19870+}
19871+
19872+template <>
19873+cef_browser_permission_request_delegate_t*
19874+CefCToCppRefCounted<CefBrowserPermissionRequestDelegateCToCpp,
19875+                    CefBrowserPermissionRequestDelegate,
19876+                    cef_browser_permission_request_delegate_t>::
19877+    UnwrapDerived(CefWrapperType type, CefBrowserPermissionRequestDelegate* c) {
19878+  NOTREACHED() << "Unexpected class type: " << type;
19879+  return nullptr;
19880+}
19881+
19882+template <>
19883+CefWrapperType CefCToCppRefCounted<
19884+    CefBrowserPermissionRequestDelegateCToCpp,
19885+    CefBrowserPermissionRequestDelegate,
19886+    cef_browser_permission_request_delegate_t>::kWrapperType =
19887+    WT_BROWSER_PERMISSION_REQUEST_DELEGATE;
19888diff --git a/cef/libcef_dll/ctocpp/browser_permission_request_delegate_ctocpp.h b/cef/libcef_dll/ctocpp/browser_permission_request_delegate_ctocpp.h
19889new file mode 100644
19890index 0000000000..a3e876d8bc
19891--- /dev/null
19892+++ b/cef/libcef_dll/ctocpp/browser_permission_request_delegate_ctocpp.h
19893@@ -0,0 +1,53 @@
19894+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
19895+// reserved. Use of this source code is governed by a BSD-style license that
19896+// can be found in the LICENSE file.
19897+//
19898+// ---------------------------------------------------------------------------
19899+//
19900+// This file was generated by the CEF translator tool. If making changes by
19901+// hand only do so within the body of existing method and function
19902+// implementations. See the translator.README.txt file in the tools directory
19903+// for more information.
19904+//
19905+// $hash=3800e05c5c712373a59863b4f35f117d46efe6f4$
19906+//
19907+
19908+#ifndef CEF_LIBCEF_DLL_CTOCPP_BROWSER_PERMISSION_REQUEST_DELEGATE_CTOCPP_H_
19909+#define CEF_LIBCEF_DLL_CTOCPP_BROWSER_PERMISSION_REQUEST_DELEGATE_CTOCPP_H_
19910+#pragma once
19911+
19912+#if !defined(WRAPPING_CEF_SHARED)
19913+#error This file can be included wrapper-side only
19914+#endif
19915+
19916+#include "include/capi/cef_permission_request_capi.h"
19917+#include "include/cef_permission_request.h"
19918+#include "libcef_dll/ctocpp/ctocpp_ref_counted.h"
19919+
19920+// Wrap a C structure with a C++ class.
19921+// This class may be instantiated and accessed wrapper-side only.
19922+class CefBrowserPermissionRequestDelegateCToCpp
19923+    : public CefCToCppRefCounted<CefBrowserPermissionRequestDelegateCToCpp,
19924+                                 CefBrowserPermissionRequestDelegate,
19925+                                 cef_browser_permission_request_delegate_t> {
19926+ public:
19927+  CefBrowserPermissionRequestDelegateCToCpp();
19928+  virtual ~CefBrowserPermissionRequestDelegateCToCpp();
19929+
19930+  // CefBrowserPermissionRequestDelegate methods.
19931+  void AskGeolocationPermission(const CefString& origin,
19932+                                cef_permission_callback_t callback) OVERRIDE;
19933+  void AbortAskGeolocationPermission(const CefString& origin) OVERRIDE;
19934+  void AskProtectedMediaIdentifierPermission(
19935+      const CefString& origin,
19936+      cef_permission_callback_t callback) OVERRIDE;
19937+  void AbortAskProtectedMediaIdentifierPermission(
19938+      const CefString& origin) OVERRIDE;
19939+  void AskMIDISysexPermission(const CefString& origin,
19940+                              cef_permission_callback_t callback) OVERRIDE;
19941+  void AbortAskMIDISysexPermission(const CefString& origin) OVERRIDE;
19942+  void NotifyGeolocationPermission(bool value,
19943+                                   const CefString& origin) OVERRIDE;
19944+};
19945+
19946+#endif  // CEF_LIBCEF_DLL_CTOCPP_BROWSER_PERMISSION_REQUEST_DELEGATE_CTOCPP_H_
19947diff --git a/cef/libcef_dll/ctocpp/browser_process_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/browser_process_handler_ctocpp.cc
19948index e2cd36eef6..2338c499f1 100644
19949--- a/cef/libcef_dll/ctocpp/browser_process_handler_ctocpp.cc
19950+++ b/cef/libcef_dll/ctocpp/browser_process_handler_ctocpp.cc
19951@@ -1,4 +1,4 @@
19952-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
19953+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
19954 // reserved. Use of this source code is governed by a BSD-style license that
19955 // can be found in the LICENSE file.
19956 //
19957@@ -9,7 +9,7 @@
19958 // implementations. See the translator.README.txt file in the tools directory
19959 // for more information.
19960 //
19961-// $hash=5efe4243d536139501e58591c6f875e08001c8b7$
19962+// $hash=3302f28c60da03b9f5ba5fa110523b353765d1a3$
19963 //
19964
19965 #include "libcef_dll/ctocpp/browser_process_handler_ctocpp.h"
19966diff --git a/cef/libcef_dll/ctocpp/browser_process_handler_ctocpp.h b/cef/libcef_dll/ctocpp/browser_process_handler_ctocpp.h
19967index 5b2ff68b7e..3871506b1a 100644
19968--- a/cef/libcef_dll/ctocpp/browser_process_handler_ctocpp.h
19969+++ b/cef/libcef_dll/ctocpp/browser_process_handler_ctocpp.h
19970@@ -1,4 +1,4 @@
19971-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
19972+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
19973 // reserved. Use of this source code is governed by a BSD-style license that
19974 // can be found in the LICENSE file.
19975 //
19976@@ -9,7 +9,7 @@
19977 // implementations. See the translator.README.txt file in the tools directory
19978 // for more information.
19979 //
19980-// $hash=719a890627d0b2ba0746415c0dd8631e387567fe$
19981+// $hash=7a13d15a99d1c92a757b776bb00d932296012054$
19982 //
19983
19984 #ifndef CEF_LIBCEF_DLL_CTOCPP_BROWSER_PROCESS_HANDLER_CTOCPP_H_
19985diff --git a/cef/libcef_dll/ctocpp/callback_ctocpp.cc b/cef/libcef_dll/ctocpp/callback_ctocpp.cc
19986index aba308705a..c0030004cb 100644
19987--- a/cef/libcef_dll/ctocpp/callback_ctocpp.cc
19988+++ b/cef/libcef_dll/ctocpp/callback_ctocpp.cc
19989@@ -1,4 +1,4 @@
19990-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
19991+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
19992 // reserved. Use of this source code is governed by a BSD-style license that
19993 // can be found in the LICENSE file.
19994 //
19995@@ -9,7 +9,7 @@
19996 // implementations. See the translator.README.txt file in the tools directory
19997 // for more information.
19998 //
19999-// $hash=fd4031a2727c68a81e72554cbda477d1afc8c7d0$
20000+// $hash=ef330e0d61e143966544b8a80f04b72dc32ec4e3$
20001 //
20002
20003 #include "libcef_dll/ctocpp/callback_ctocpp.h"
20004diff --git a/cef/libcef_dll/ctocpp/callback_ctocpp.h b/cef/libcef_dll/ctocpp/callback_ctocpp.h
20005index 52e70d76c6..f39dd72b55 100644
20006--- a/cef/libcef_dll/ctocpp/callback_ctocpp.h
20007+++ b/cef/libcef_dll/ctocpp/callback_ctocpp.h
20008@@ -1,4 +1,4 @@
20009-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20010+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20011 // reserved. Use of this source code is governed by a BSD-style license that
20012 // can be found in the LICENSE file.
20013 //
20014@@ -9,7 +9,7 @@
20015 // implementations. See the translator.README.txt file in the tools directory
20016 // for more information.
20017 //
20018-// $hash=d5bd0e618c060e9410fdd4760d1e941e443a8010$
20019+// $hash=1aace6941332689eb062b20f56f7bbf20c88adbb$
20020 //
20021
20022 #ifndef CEF_LIBCEF_DLL_CTOCPP_CALLBACK_CTOCPP_H_
20023diff --git a/cef/libcef_dll/ctocpp/client_ctocpp.cc b/cef/libcef_dll/ctocpp/client_ctocpp.cc
20024index d002e41c92..417ffa3815 100644
20025--- a/cef/libcef_dll/ctocpp/client_ctocpp.cc
20026+++ b/cef/libcef_dll/ctocpp/client_ctocpp.cc
20027@@ -1,4 +1,4 @@
20028-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20029+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20030 // reserved. Use of this source code is governed by a BSD-style license that
20031 // can be found in the LICENSE file.
20032 //
20033@@ -9,12 +9,13 @@
20034 // implementations. See the translator.README.txt file in the tools directory
20035 // for more information.
20036 //
20037-// $hash=19d21957d8b7f66de8c88b9085abb2a08718582d$
20038+// $hash=731c789683b43e6ce9d520fc546d6ecae160adb3$
20039 //
20040
20041 #include "libcef_dll/ctocpp/client_ctocpp.h"
20042 #include "libcef_dll/cpptoc/browser_cpptoc.h"
20043 #include "libcef_dll/cpptoc/frame_cpptoc.h"
20044+#include "libcef_dll/cpptoc/list_value_cpptoc.h"
20045 #include "libcef_dll/cpptoc/process_message_cpptoc.h"
20046 #include "libcef_dll/ctocpp/audio_handler_ctocpp.h"
20047 #include "libcef_dll/ctocpp/context_menu_handler_ctocpp.h"
20048@@ -28,6 +29,7 @@
20049 #include "libcef_dll/ctocpp/keyboard_handler_ctocpp.h"
20050 #include "libcef_dll/ctocpp/life_span_handler_ctocpp.h"
20051 #include "libcef_dll/ctocpp/load_handler_ctocpp.h"
20052+#include "libcef_dll/ctocpp/permission_request_ctocpp.h"
20053 #include "libcef_dll/ctocpp/print_handler_ctocpp.h"
20054 #include "libcef_dll/ctocpp/render_handler_ctocpp.h"
20055 #include "libcef_dll/ctocpp/request_handler_ctocpp.h"
20056@@ -260,6 +262,21 @@ CefRefPtr<CefRequestHandler> CefClientCToCpp::GetRequestHandler() {
20057   return CefRequestHandlerCToCpp::Wrap(_retval);
20058 }
20059
20060+NO_SANITIZE("cfi-icall")
20061+CefRefPtr<CefPermissionRequest> CefClientCToCpp::GetPermissionRequest() {
20062+  cef_client_t* _struct = GetStruct();
20063+  if (CEF_MEMBER_MISSING(_struct, get_permission_request))
20064+    return nullptr;
20065+
20066+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
20067+
20068+  // Execute
20069+  cef_permission_request_t* _retval = _struct->get_permission_request(_struct);
20070+
20071+  // Return type: refptr_same
20072+  return CefPermissionRequestCToCpp::Wrap(_retval);
20073+}
20074+
20075 NO_SANITIZE("cfi-icall")
20076 bool CefClientCToCpp::OnProcessMessageReceived(
20077     CefRefPtr<CefBrowser> browser,
20078@@ -294,6 +311,43 @@ bool CefClientCToCpp::OnProcessMessageReceived(
20079   return _retval ? true : false;
20080 }
20081
20082+NO_SANITIZE("cfi-icall")
20083+int CefClientCToCpp::NotifyJavaScriptResult(CefRefPtr<CefListValue> args,
20084+                                            const CefString& method,
20085+                                            const CefString& object_name,
20086+                                            CefRefPtr<CefListValue> result) {
20087+  cef_client_t* _struct = GetStruct();
20088+  if (CEF_MEMBER_MISSING(_struct, notify_java_script_result))
20089+    return 0;
20090+
20091+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
20092+
20093+  // Verify param: args; type: refptr_diff
20094+  DCHECK(args.get());
20095+  if (!args.get())
20096+    return 0;
20097+  // Verify param: method; type: string_byref_const
20098+  DCHECK(!method.empty());
20099+  if (method.empty())
20100+    return 0;
20101+  // Verify param: object_name; type: string_byref_const
20102+  DCHECK(!object_name.empty());
20103+  if (object_name.empty())
20104+    return 0;
20105+  // Verify param: result; type: refptr_diff
20106+  DCHECK(result.get());
20107+  if (!result.get())
20108+    return 0;
20109+
20110+  // Execute
20111+  int _retval = _struct->notify_java_script_result(
20112+      _struct, CefListValueCppToC::Wrap(args), method.GetStruct(),
20113+      object_name.GetStruct(), CefListValueCppToC::Wrap(result));
20114+
20115+  // Return type: simple
20116+  return _retval;
20117+}
20118+
20119 // CONSTRUCTOR - Do not edit by hand.
20120
20121 CefClientCToCpp::CefClientCToCpp() {}
20122diff --git a/cef/libcef_dll/ctocpp/client_ctocpp.h b/cef/libcef_dll/ctocpp/client_ctocpp.h
20123index 1447c181fe..6d043e9499 100644
20124--- a/cef/libcef_dll/ctocpp/client_ctocpp.h
20125+++ b/cef/libcef_dll/ctocpp/client_ctocpp.h
20126@@ -1,4 +1,4 @@
20127-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20128+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20129 // reserved. Use of this source code is governed by a BSD-style license that
20130 // can be found in the LICENSE file.
20131 //
20132@@ -9,7 +9,7 @@
20133 // implementations. See the translator.README.txt file in the tools directory
20134 // for more information.
20135 //
20136-// $hash=a640d4535140448a46340432470dbd1ef4f90b69$
20137+// $hash=b1e9eaf26431d056aa0df0d95752ec49e36fb80c$
20138 //
20139
20140 #ifndef CEF_LIBCEF_DLL_CTOCPP_CLIENT_CTOCPP_H_
20141@@ -48,10 +48,15 @@ class CefClientCToCpp
20142   CefRefPtr<CefPrintHandler> GetPrintHandler() override;
20143   CefRefPtr<CefRenderHandler> GetRenderHandler() override;
20144   CefRefPtr<CefRequestHandler> GetRequestHandler() override;
20145+  CefRefPtr<CefPermissionRequest> GetPermissionRequest() override;
20146   bool OnProcessMessageReceived(CefRefPtr<CefBrowser> browser,
20147                                 CefRefPtr<CefFrame> frame,
20148                                 CefProcessId source_process,
20149                                 CefRefPtr<CefProcessMessage> message) override;
20150+  int NotifyJavaScriptResult(CefRefPtr<CefListValue> args,
20151+                             const CefString& method,
20152+                             const CefString& object_name,
20153+                             CefRefPtr<CefListValue> result) override;
20154 };
20155
20156 #endif  // CEF_LIBCEF_DLL_CTOCPP_CLIENT_CTOCPP_H_
20157diff --git a/cef/libcef_dll/ctocpp/command_line_ctocpp.cc b/cef/libcef_dll/ctocpp/command_line_ctocpp.cc
20158index 4100a7fa58..a96b067677 100644
20159--- a/cef/libcef_dll/ctocpp/command_line_ctocpp.cc
20160+++ b/cef/libcef_dll/ctocpp/command_line_ctocpp.cc
20161@@ -1,4 +1,4 @@
20162-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20163+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20164 // reserved. Use of this source code is governed by a BSD-style license that
20165 // can be found in the LICENSE file.
20166 //
20167@@ -9,7 +9,7 @@
20168 // implementations. See the translator.README.txt file in the tools directory
20169 // for more information.
20170 //
20171-// $hash=531127653166c6f4b50f25669ceef0a54ec56b0d$
20172+// $hash=cc3c62b07c8e4d6f019637a0338673ac21ffa017$
20173 //
20174
20175 #include "libcef_dll/ctocpp/command_line_ctocpp.h"
20176diff --git a/cef/libcef_dll/ctocpp/command_line_ctocpp.h b/cef/libcef_dll/ctocpp/command_line_ctocpp.h
20177index 4f07d37e95..cbda77d4d2 100644
20178--- a/cef/libcef_dll/ctocpp/command_line_ctocpp.h
20179+++ b/cef/libcef_dll/ctocpp/command_line_ctocpp.h
20180@@ -1,4 +1,4 @@
20181-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20182+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20183 // reserved. Use of this source code is governed by a BSD-style license that
20184 // can be found in the LICENSE file.
20185 //
20186@@ -9,7 +9,7 @@
20187 // implementations. See the translator.README.txt file in the tools directory
20188 // for more information.
20189 //
20190-// $hash=10d0f381490e63f0b95af48a93ea47e92459b5a3$
20191+// $hash=b6e282cb71505ee72dab59c709ba43d19a2ff75c$
20192 //
20193
20194 #ifndef CEF_LIBCEF_DLL_CTOCPP_COMMAND_LINE_CTOCPP_H_
20195diff --git a/cef/libcef_dll/ctocpp/completion_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/completion_callback_ctocpp.cc
20196index c6d0d31baa..4b9308d956 100644
20197--- a/cef/libcef_dll/ctocpp/completion_callback_ctocpp.cc
20198+++ b/cef/libcef_dll/ctocpp/completion_callback_ctocpp.cc
20199@@ -1,4 +1,4 @@
20200-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20201+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20202 // reserved. Use of this source code is governed by a BSD-style license that
20203 // can be found in the LICENSE file.
20204 //
20205@@ -9,7 +9,7 @@
20206 // implementations. See the translator.README.txt file in the tools directory
20207 // for more information.
20208 //
20209-// $hash=e6d440c8efb493a131c11c206ec5fceecd832660$
20210+// $hash=f65d432f0ca5891aa466010183e437ba5e2007be$
20211 //
20212
20213 #include "libcef_dll/ctocpp/completion_callback_ctocpp.h"
20214diff --git a/cef/libcef_dll/ctocpp/completion_callback_ctocpp.h b/cef/libcef_dll/ctocpp/completion_callback_ctocpp.h
20215index bbe457d0d1..a934d50e22 100644
20216--- a/cef/libcef_dll/ctocpp/completion_callback_ctocpp.h
20217+++ b/cef/libcef_dll/ctocpp/completion_callback_ctocpp.h
20218@@ -1,4 +1,4 @@
20219-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20220+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20221 // reserved. Use of this source code is governed by a BSD-style license that
20222 // can be found in the LICENSE file.
20223 //
20224@@ -9,7 +9,7 @@
20225 // implementations. See the translator.README.txt file in the tools directory
20226 // for more information.
20227 //
20228-// $hash=d5dfb24f2fe539edb35ef1bae35d6f7e3d4b96e5$
20229+// $hash=d8c3f928349e064d8afe7853d4a47c90c1ed0114$
20230 //
20231
20232 #ifndef CEF_LIBCEF_DLL_CTOCPP_COMPLETION_CALLBACK_CTOCPP_H_
20233diff --git a/cef/libcef_dll/ctocpp/context_menu_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/context_menu_handler_ctocpp.cc
20234index 6c98c6c59a..3a765cddb5 100644
20235--- a/cef/libcef_dll/ctocpp/context_menu_handler_ctocpp.cc
20236+++ b/cef/libcef_dll/ctocpp/context_menu_handler_ctocpp.cc
20237@@ -1,4 +1,4 @@
20238-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20239+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20240 // reserved. Use of this source code is governed by a BSD-style license that
20241 // can be found in the LICENSE file.
20242 //
20243@@ -9,7 +9,7 @@
20244 // implementations. See the translator.README.txt file in the tools directory
20245 // for more information.
20246 //
20247-// $hash=58fe9756e31c44400e2a3a124ac9c7256ad50710$
20248+// $hash=7b91234844f040546245a09f4724142efdf929ff$
20249 //
20250
20251 #include "libcef_dll/ctocpp/context_menu_handler_ctocpp.h"
20252diff --git a/cef/libcef_dll/ctocpp/context_menu_handler_ctocpp.h b/cef/libcef_dll/ctocpp/context_menu_handler_ctocpp.h
20253index 6ba5e46c56..badf3a0475 100644
20254--- a/cef/libcef_dll/ctocpp/context_menu_handler_ctocpp.h
20255+++ b/cef/libcef_dll/ctocpp/context_menu_handler_ctocpp.h
20256@@ -1,4 +1,4 @@
20257-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20258+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20259 // reserved. Use of this source code is governed by a BSD-style license that
20260 // can be found in the LICENSE file.
20261 //
20262@@ -9,7 +9,7 @@
20263 // implementations. See the translator.README.txt file in the tools directory
20264 // for more information.
20265 //
20266-// $hash=bc4ee07c77b4eca133c2aecc9324225a651659c6$
20267+// $hash=3dba1df692cc69ba3aab91b989cceb9a7d363858$
20268 //
20269
20270 #ifndef CEF_LIBCEF_DLL_CTOCPP_CONTEXT_MENU_HANDLER_CTOCPP_H_
20271diff --git a/cef/libcef_dll/ctocpp/context_menu_params_ctocpp.cc b/cef/libcef_dll/ctocpp/context_menu_params_ctocpp.cc
20272index 5a7bb62b72..093210852e 100644
20273--- a/cef/libcef_dll/ctocpp/context_menu_params_ctocpp.cc
20274+++ b/cef/libcef_dll/ctocpp/context_menu_params_ctocpp.cc
20275@@ -1,4 +1,4 @@
20276-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20277+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20278 // reserved. Use of this source code is governed by a BSD-style license that
20279 // can be found in the LICENSE file.
20280 //
20281@@ -9,7 +9,7 @@
20282 // implementations. See the translator.README.txt file in the tools directory
20283 // for more information.
20284 //
20285-// $hash=dad7a3eb64c0bc6c4eddd2935513af61f7e8b510$
20286+// $hash=233d530cb984468703b97752bda1178191d4ba75$
20287 //
20288
20289 #include "libcef_dll/ctocpp/context_menu_params_ctocpp.h"
20290@@ -230,7 +230,7 @@ CefContextMenuParams::MediaType CefContextMenuParamsCToCpp::GetMediaType() {
20291
20292 NO_SANITIZE("cfi-icall")
20293 CefContextMenuParams::MediaStateFlags
20294-CefContextMenuParamsCToCpp::GetMediaStateFlags() {
20295+    CefContextMenuParamsCToCpp::GetMediaStateFlags() {
20296   shutdown_checker::AssertNotShutdown();
20297
20298   cef_context_menu_params_t* _struct = GetStruct();
20299@@ -351,7 +351,7 @@ bool CefContextMenuParamsCToCpp::IsSpellCheckEnabled() {
20300
20301 NO_SANITIZE("cfi-icall")
20302 CefContextMenuParams::EditStateFlags
20303-CefContextMenuParamsCToCpp::GetEditStateFlags() {
20304+    CefContextMenuParamsCToCpp::GetEditStateFlags() {
20305   shutdown_checker::AssertNotShutdown();
20306
20307   cef_context_menu_params_t* _struct = GetStruct();
20308diff --git a/cef/libcef_dll/ctocpp/context_menu_params_ctocpp.h b/cef/libcef_dll/ctocpp/context_menu_params_ctocpp.h
20309index 679150917f..50b7d6f7a9 100644
20310--- a/cef/libcef_dll/ctocpp/context_menu_params_ctocpp.h
20311+++ b/cef/libcef_dll/ctocpp/context_menu_params_ctocpp.h
20312@@ -1,4 +1,4 @@
20313-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20314+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20315 // reserved. Use of this source code is governed by a BSD-style license that
20316 // can be found in the LICENSE file.
20317 //
20318@@ -9,7 +9,7 @@
20319 // implementations. See the translator.README.txt file in the tools directory
20320 // for more information.
20321 //
20322-// $hash=7de11c340a42046de92ca4cb8c5852269f3a3101$
20323+// $hash=dd3077d53438007cdacbcecdd410ab62693af484$
20324 //
20325
20326 #ifndef CEF_LIBCEF_DLL_CTOCPP_CONTEXT_MENU_PARAMS_CTOCPP_H_
20327diff --git a/cef/libcef_dll/ctocpp/cookie_access_filter_ctocpp.cc b/cef/libcef_dll/ctocpp/cookie_access_filter_ctocpp.cc
20328index 40ba61d08d..3156b1db01 100644
20329--- a/cef/libcef_dll/ctocpp/cookie_access_filter_ctocpp.cc
20330+++ b/cef/libcef_dll/ctocpp/cookie_access_filter_ctocpp.cc
20331@@ -1,4 +1,4 @@
20332-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20333+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20334 // reserved. Use of this source code is governed by a BSD-style license that
20335 // can be found in the LICENSE file.
20336 //
20337@@ -9,7 +9,7 @@
20338 // implementations. See the translator.README.txt file in the tools directory
20339 // for more information.
20340 //
20341-// $hash=fddf7eda3f3506c482f637c9d59526a4e7411b30$
20342+// $hash=b1ae8622378ad8661289554e6c542e970850aaed$
20343 //
20344
20345 #include "libcef_dll/ctocpp/cookie_access_filter_ctocpp.h"
20346diff --git a/cef/libcef_dll/ctocpp/cookie_access_filter_ctocpp.h b/cef/libcef_dll/ctocpp/cookie_access_filter_ctocpp.h
20347index 259ff47f59..0170c33256 100644
20348--- a/cef/libcef_dll/ctocpp/cookie_access_filter_ctocpp.h
20349+++ b/cef/libcef_dll/ctocpp/cookie_access_filter_ctocpp.h
20350@@ -1,4 +1,4 @@
20351-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20352+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20353 // reserved. Use of this source code is governed by a BSD-style license that
20354 // can be found in the LICENSE file.
20355 //
20356@@ -9,7 +9,7 @@
20357 // implementations. See the translator.README.txt file in the tools directory
20358 // for more information.
20359 //
20360-// $hash=3aa5bd130237bc6adfff1393b4ecce39e6b96610$
20361+// $hash=7a3357796fd02da5a233d4dfa6b8c7194ba8f969$
20362 //
20363
20364 #ifndef CEF_LIBCEF_DLL_CTOCPP_COOKIE_ACCESS_FILTER_CTOCPP_H_
20365diff --git a/cef/libcef_dll/ctocpp/cookie_manager_ctocpp.cc b/cef/libcef_dll/ctocpp/cookie_manager_ctocpp.cc
20366index 3873685fb6..dc94d161fe 100644
20367--- a/cef/libcef_dll/ctocpp/cookie_manager_ctocpp.cc
20368+++ b/cef/libcef_dll/ctocpp/cookie_manager_ctocpp.cc
20369@@ -1,4 +1,4 @@
20370-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20371+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20372 // reserved. Use of this source code is governed by a BSD-style license that
20373 // can be found in the LICENSE file.
20374 //
20375@@ -9,7 +9,7 @@
20376 // implementations. See the translator.README.txt file in the tools directory
20377 // for more information.
20378 //
20379-// $hash=2682019770bd002410e9e292747e861c907d3c0c$
20380+// $hash=fc72d18dc6fecabfa6080413cf31ad31b1cfa958$
20381 //
20382
20383 #include "libcef_dll/ctocpp/cookie_manager_ctocpp.h"
20384@@ -35,8 +35,84 @@ CefRefPtr<CefCookieManager> CefCookieManager::GetGlobalManager(
20385   return CefCookieManagerCToCpp::Wrap(_retval);
20386 }
20387
20388+NO_SANITIZE("cfi-icall")
20389+bool CefCookieManager::CreateCefCookie(const CefString& url,
20390+                                       const CefString& value,
20391+                                       CefCookie& cef_cookie) {
20392+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
20393+
20394+  // Verify param: url; type: string_byref_const
20395+  DCHECK(!url.empty());
20396+  if (url.empty())
20397+    return false;
20398+  // Verify param: value; type: string_byref_const
20399+  DCHECK(!value.empty());
20400+  if (value.empty())
20401+    return false;
20402+
20403+  // Execute
20404+  int _retval = cef_cookie_manager_create_cef_cookie(
20405+      url.GetStruct(), value.GetStruct(), &cef_cookie);
20406+
20407+  // Return type: bool
20408+  return _retval ? true : false;
20409+}
20410+
20411 // VIRTUAL METHODS - Body may be edited by hand.
20412
20413+NO_SANITIZE("cfi-icall") bool CefCookieManagerCToCpp::IsAcceptCookieAllowed() {
20414+  cef_cookie_manager_t* _struct = GetStruct();
20415+  if (CEF_MEMBER_MISSING(_struct, is_accept_cookie_allowed))
20416+    return false;
20417+
20418+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
20419+
20420+  // Execute
20421+  int _retval = _struct->is_accept_cookie_allowed(_struct);
20422+
20423+  // Return type: bool
20424+  return _retval ? true : false;
20425+}
20426+
20427+NO_SANITIZE("cfi-icall")
20428+void CefCookieManagerCToCpp::PutAcceptCookieEnabled(bool accept) {
20429+  cef_cookie_manager_t* _struct = GetStruct();
20430+  if (CEF_MEMBER_MISSING(_struct, put_accept_cookie_enabled))
20431+    return;
20432+
20433+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
20434+
20435+  // Execute
20436+  _struct->put_accept_cookie_enabled(_struct, accept);
20437+}
20438+
20439+NO_SANITIZE("cfi-icall")
20440+bool CefCookieManagerCToCpp::IsFileURLSchemeCookiesAllowed() {
20441+  cef_cookie_manager_t* _struct = GetStruct();
20442+  if (CEF_MEMBER_MISSING(_struct, is_file_urlscheme_cookies_allowed))
20443+    return false;
20444+
20445+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
20446+
20447+  // Execute
20448+  int _retval = _struct->is_file_urlscheme_cookies_allowed(_struct);
20449+
20450+  // Return type: bool
20451+  return _retval ? true : false;
20452+}
20453+
20454+NO_SANITIZE("cfi-icall")
20455+void CefCookieManagerCToCpp::PutAcceptFileURLSchemeCookiesEnabled(bool allow) {
20456+  cef_cookie_manager_t* _struct = GetStruct();
20457+  if (CEF_MEMBER_MISSING(_struct, put_accept_file_urlscheme_cookies_enabled))
20458+    return;
20459+
20460+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
20461+
20462+  // Execute
20463+  _struct->put_accept_file_urlscheme_cookies_enabled(_struct, allow);
20464+}
20465+
20466 NO_SANITIZE("cfi-icall")
20467 bool CefCookieManagerCToCpp::VisitAllCookies(
20468     CefRefPtr<CefCookieVisitor> visitor) {
20469@@ -117,6 +193,7 @@ NO_SANITIZE("cfi-icall")
20470 bool CefCookieManagerCToCpp::DeleteCookies(
20471     const CefString& url,
20472     const CefString& cookie_name,
20473+    bool is_session,
20474     CefRefPtr<CefDeleteCookiesCallback> callback) {
20475   cef_cookie_manager_t* _struct = GetStruct();
20476   if (CEF_MEMBER_MISSING(_struct, delete_cookies))
20477@@ -127,9 +204,9 @@ bool CefCookieManagerCToCpp::DeleteCookies(
20478   // Unverified params: url, cookie_name, callback
20479
20480   // Execute
20481-  int _retval =
20482-      _struct->delete_cookies(_struct, url.GetStruct(), cookie_name.GetStruct(),
20483-                              CefDeleteCookiesCallbackCppToC::Wrap(callback));
20484+  int _retval = _struct->delete_cookies(
20485+      _struct, url.GetStruct(), cookie_name.GetStruct(), is_session,
20486+      CefDeleteCookiesCallbackCppToC::Wrap(callback));
20487
20488   // Return type: bool
20489   return _retval ? true : false;
20490diff --git a/cef/libcef_dll/ctocpp/cookie_manager_ctocpp.h b/cef/libcef_dll/ctocpp/cookie_manager_ctocpp.h
20491index ce8e6def02..bbac3e21b5 100644
20492--- a/cef/libcef_dll/ctocpp/cookie_manager_ctocpp.h
20493+++ b/cef/libcef_dll/ctocpp/cookie_manager_ctocpp.h
20494@@ -1,4 +1,4 @@
20495-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20496+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20497 // reserved. Use of this source code is governed by a BSD-style license that
20498 // can be found in the LICENSE file.
20499 //
20500@@ -9,7 +9,7 @@
20501 // implementations. See the translator.README.txt file in the tools directory
20502 // for more information.
20503 //
20504-// $hash=86450b60ca929d794339574809c956ab0fec709e$
20505+// $hash=72c7b7341d1fe0f7fc35b539d6a1cca430880423$
20506 //
20507
20508 #ifndef CEF_LIBCEF_DLL_CTOCPP_COOKIE_MANAGER_CTOCPP_H_
20509@@ -35,6 +35,10 @@ class CefCookieManagerCToCpp
20510   virtual ~CefCookieManagerCToCpp();
20511
20512   // CefCookieManager methods.
20513+  bool IsAcceptCookieAllowed() OVERRIDE;
20514+  void PutAcceptCookieEnabled(bool accept) OVERRIDE;
20515+  bool IsFileURLSchemeCookiesAllowed() OVERRIDE;
20516+  void PutAcceptFileURLSchemeCookiesEnabled(bool allow) OVERRIDE;
20517   bool VisitAllCookies(CefRefPtr<CefCookieVisitor> visitor) OVERRIDE;
20518   bool VisitUrlCookies(const CefString& url,
20519                        bool includeHttpOnly,
20520@@ -44,6 +48,7 @@ class CefCookieManagerCToCpp
20521                  CefRefPtr<CefSetCookieCallback> callback) OVERRIDE;
20522   bool DeleteCookies(const CefString& url,
20523                      const CefString& cookie_name,
20524+                     bool is_session,
20525                      CefRefPtr<CefDeleteCookiesCallback> callback) OVERRIDE;
20526   bool FlushStore(CefRefPtr<CefCompletionCallback> callback) OVERRIDE;
20527 };
20528diff --git a/cef/libcef_dll/ctocpp/cookie_visitor_ctocpp.cc b/cef/libcef_dll/ctocpp/cookie_visitor_ctocpp.cc
20529index 2dbbf4b39b..c915510144 100644
20530--- a/cef/libcef_dll/ctocpp/cookie_visitor_ctocpp.cc
20531+++ b/cef/libcef_dll/ctocpp/cookie_visitor_ctocpp.cc
20532@@ -1,4 +1,4 @@
20533-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20534+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20535 // reserved. Use of this source code is governed by a BSD-style license that
20536 // can be found in the LICENSE file.
20537 //
20538@@ -9,7 +9,7 @@
20539 // implementations. See the translator.README.txt file in the tools directory
20540 // for more information.
20541 //
20542-// $hash=2b0c8dcc7ec49951ed82d0e8f558f658c23f6f39$
20543+// $hash=46632d6c9d6e3c6891abc90323313bea54d7419e$
20544 //
20545
20546 #include "libcef_dll/ctocpp/cookie_visitor_ctocpp.h"
20547@@ -44,6 +44,25 @@ bool CefCookieVisitorCToCpp::Visit(const CefCookie& cookie,
20548   return _retval ? true : false;
20549 }
20550
20551+NO_SANITIZE("cfi-icall")
20552+void CefCookieVisitorCToCpp::SetCookieLine(const CefString& cookieLine) {
20553+  shutdown_checker::AssertNotShutdown();
20554+
20555+  cef_cookie_visitor_t* _struct = GetStruct();
20556+  if (CEF_MEMBER_MISSING(_struct, set_cookie_line))
20557+    return;
20558+
20559+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
20560+
20561+  // Verify param: cookieLine; type: string_byref_const
20562+  DCHECK(!cookieLine.empty());
20563+  if (cookieLine.empty())
20564+    return;
20565+
20566+  // Execute
20567+  _struct->set_cookie_line(_struct, cookieLine.GetStruct());
20568+}
20569+
20570 // CONSTRUCTOR - Do not edit by hand.
20571
20572 CefCookieVisitorCToCpp::CefCookieVisitorCToCpp() {}
20573diff --git a/cef/libcef_dll/ctocpp/cookie_visitor_ctocpp.h b/cef/libcef_dll/ctocpp/cookie_visitor_ctocpp.h
20574index aa2b3549e8..62d0072362 100644
20575--- a/cef/libcef_dll/ctocpp/cookie_visitor_ctocpp.h
20576+++ b/cef/libcef_dll/ctocpp/cookie_visitor_ctocpp.h
20577@@ -1,4 +1,4 @@
20578-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20579+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20580 // reserved. Use of this source code is governed by a BSD-style license that
20581 // can be found in the LICENSE file.
20582 //
20583@@ -9,7 +9,7 @@
20584 // implementations. See the translator.README.txt file in the tools directory
20585 // for more information.
20586 //
20587-// $hash=e909793a47c685b6f44715054b8c70a7ac0b4f91$
20588+// $hash=c1dca55691f6d564ad2a69b38acd141982368895$
20589 //
20590
20591 #ifndef CEF_LIBCEF_DLL_CTOCPP_COOKIE_VISITOR_CTOCPP_H_
20592@@ -39,6 +39,7 @@ class CefCookieVisitorCToCpp
20593              int count,
20594              int total,
20595              bool& deleteCookie) override;
20596+  void SetCookieLine(const CefString& cookieLine) override;
20597 };
20598
20599 #endif  // CEF_LIBCEF_DLL_CTOCPP_COOKIE_VISITOR_CTOCPP_H_
20600diff --git a/cef/libcef_dll/ctocpp/delete_cookies_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/delete_cookies_callback_ctocpp.cc
20601index 3b7495e845..4f5301ec81 100644
20602--- a/cef/libcef_dll/ctocpp/delete_cookies_callback_ctocpp.cc
20603+++ b/cef/libcef_dll/ctocpp/delete_cookies_callback_ctocpp.cc
20604@@ -1,4 +1,4 @@
20605-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20606+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20607 // reserved. Use of this source code is governed by a BSD-style license that
20608 // can be found in the LICENSE file.
20609 //
20610@@ -9,7 +9,7 @@
20611 // implementations. See the translator.README.txt file in the tools directory
20612 // for more information.
20613 //
20614-// $hash=5be97fa191527448a88038052eb241a54ff712fb$
20615+// $hash=765b5a3f3e0ac077f2ff72541ae26ca342c4ca78$
20616 //
20617
20618 #include "libcef_dll/ctocpp/delete_cookies_callback_ctocpp.h"
20619diff --git a/cef/libcef_dll/ctocpp/delete_cookies_callback_ctocpp.h b/cef/libcef_dll/ctocpp/delete_cookies_callback_ctocpp.h
20620index d9e6ab7d30..90f109ac9e 100644
20621--- a/cef/libcef_dll/ctocpp/delete_cookies_callback_ctocpp.h
20622+++ b/cef/libcef_dll/ctocpp/delete_cookies_callback_ctocpp.h
20623@@ -1,4 +1,4 @@
20624-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20625+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20626 // reserved. Use of this source code is governed by a BSD-style license that
20627 // can be found in the LICENSE file.
20628 //
20629@@ -9,7 +9,7 @@
20630 // implementations. See the translator.README.txt file in the tools directory
20631 // for more information.
20632 //
20633-// $hash=da90ac900e20cefc280747d50c0cdb7e1dcde7dc$
20634+// $hash=cd33af6263f686958bccf5907e1c4622950a7a40$
20635 //
20636
20637 #ifndef CEF_LIBCEF_DLL_CTOCPP_DELETE_COOKIES_CALLBACK_CTOCPP_H_
20638diff --git a/cef/libcef_dll/ctocpp/dev_tools_message_observer_ctocpp.cc b/cef/libcef_dll/ctocpp/dev_tools_message_observer_ctocpp.cc
20639index 64e6a062a1..367af2dd9a 100644
20640--- a/cef/libcef_dll/ctocpp/dev_tools_message_observer_ctocpp.cc
20641+++ b/cef/libcef_dll/ctocpp/dev_tools_message_observer_ctocpp.cc
20642@@ -1,4 +1,4 @@
20643-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20644+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20645 // reserved. Use of this source code is governed by a BSD-style license that
20646 // can be found in the LICENSE file.
20647 //
20648@@ -9,7 +9,7 @@
20649 // implementations. See the translator.README.txt file in the tools directory
20650 // for more information.
20651 //
20652-// $hash=6f78ef72de066205d4329c231dd586fae8519cd6$
20653+// $hash=610f96da1baaa48d1aa7fcff8a4c4fb33d2965ab$
20654 //
20655
20656 #include "libcef_dll/ctocpp/dev_tools_message_observer_ctocpp.h"
20657diff --git a/cef/libcef_dll/ctocpp/dev_tools_message_observer_ctocpp.h b/cef/libcef_dll/ctocpp/dev_tools_message_observer_ctocpp.h
20658index a6a7494158..99eb59beed 100644
20659--- a/cef/libcef_dll/ctocpp/dev_tools_message_observer_ctocpp.h
20660+++ b/cef/libcef_dll/ctocpp/dev_tools_message_observer_ctocpp.h
20661@@ -1,4 +1,4 @@
20662-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20663+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20664 // reserved. Use of this source code is governed by a BSD-style license that
20665 // can be found in the LICENSE file.
20666 //
20667@@ -9,7 +9,7 @@
20668 // implementations. See the translator.README.txt file in the tools directory
20669 // for more information.
20670 //
20671-// $hash=231453d0138596f50c2656d038fd662551526474$
20672+// $hash=3b8cfdd8e4bc8e1981634fdd6a78f8eb9a23da4b$
20673 //
20674
20675 #ifndef CEF_LIBCEF_DLL_CTOCPP_DEV_TOOLS_MESSAGE_OBSERVER_CTOCPP_H_
20676diff --git a/cef/libcef_dll/ctocpp/dialog_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/dialog_handler_ctocpp.cc
20677index c47e38d115..3377b564ca 100644
20678--- a/cef/libcef_dll/ctocpp/dialog_handler_ctocpp.cc
20679+++ b/cef/libcef_dll/ctocpp/dialog_handler_ctocpp.cc
20680@@ -1,4 +1,4 @@
20681-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20682+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20683 // reserved. Use of this source code is governed by a BSD-style license that
20684 // can be found in the LICENSE file.
20685 //
20686@@ -9,7 +9,7 @@
20687 // implementations. See the translator.README.txt file in the tools directory
20688 // for more information.
20689 //
20690-// $hash=946f52d8495dcf0b0ed28f82d0a43075969f0674$
20691+// $hash=cac933371fc47c864230d4537ef1da76cd7e4d8e$
20692 //
20693
20694 #include "libcef_dll/ctocpp/dialog_handler_ctocpp.h"
20695diff --git a/cef/libcef_dll/ctocpp/dialog_handler_ctocpp.h b/cef/libcef_dll/ctocpp/dialog_handler_ctocpp.h
20696index 7b17e7f47f..f2e0798a16 100644
20697--- a/cef/libcef_dll/ctocpp/dialog_handler_ctocpp.h
20698+++ b/cef/libcef_dll/ctocpp/dialog_handler_ctocpp.h
20699@@ -1,4 +1,4 @@
20700-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20701+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20702 // reserved. Use of this source code is governed by a BSD-style license that
20703 // can be found in the LICENSE file.
20704 //
20705@@ -9,7 +9,7 @@
20706 // implementations. See the translator.README.txt file in the tools directory
20707 // for more information.
20708 //
20709-// $hash=126691efff37723df43af451c4d9876194f37c16$
20710+// $hash=4c07a40d3bd171adf3ae3cc4aa935bc7eca4aa5e$
20711 //
20712
20713 #ifndef CEF_LIBCEF_DLL_CTOCPP_DIALOG_HANDLER_CTOCPP_H_
20714diff --git a/cef/libcef_dll/ctocpp/dictionary_value_ctocpp.cc b/cef/libcef_dll/ctocpp/dictionary_value_ctocpp.cc
20715index a4d793c2a1..f726373820 100644
20716--- a/cef/libcef_dll/ctocpp/dictionary_value_ctocpp.cc
20717+++ b/cef/libcef_dll/ctocpp/dictionary_value_ctocpp.cc
20718@@ -1,4 +1,4 @@
20719-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20720+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20721 // reserved. Use of this source code is governed by a BSD-style license that
20722 // can be found in the LICENSE file.
20723 //
20724@@ -9,7 +9,7 @@
20725 // implementations. See the translator.README.txt file in the tools directory
20726 // for more information.
20727 //
20728-// $hash=28f4836ace572b3b61ed33f655892b261b290ae3$
20729+// $hash=70aa25f8ab57f0c152666a730aff4247684108f9$
20730 //
20731
20732 #include "libcef_dll/ctocpp/dictionary_value_ctocpp.h"
20733diff --git a/cef/libcef_dll/ctocpp/dictionary_value_ctocpp.h b/cef/libcef_dll/ctocpp/dictionary_value_ctocpp.h
20734index f72952a0b9..4f5ecd7375 100644
20735--- a/cef/libcef_dll/ctocpp/dictionary_value_ctocpp.h
20736+++ b/cef/libcef_dll/ctocpp/dictionary_value_ctocpp.h
20737@@ -1,4 +1,4 @@
20738-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20739+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20740 // reserved. Use of this source code is governed by a BSD-style license that
20741 // can be found in the LICENSE file.
20742 //
20743@@ -9,7 +9,7 @@
20744 // implementations. See the translator.README.txt file in the tools directory
20745 // for more information.
20746 //
20747-// $hash=77a328d9997c59ff25bcd943be0d878432cdbfea$
20748+// $hash=6990edd89182c61d4d75bc863a1125b910308716$
20749 //
20750
20751 #ifndef CEF_LIBCEF_DLL_CTOCPP_DICTIONARY_VALUE_CTOCPP_H_
20752diff --git a/cef/libcef_dll/ctocpp/display_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/display_handler_ctocpp.cc
20753index 5051beb331..cb7743a77a 100644
20754--- a/cef/libcef_dll/ctocpp/display_handler_ctocpp.cc
20755+++ b/cef/libcef_dll/ctocpp/display_handler_ctocpp.cc
20756@@ -1,4 +1,4 @@
20757-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20758+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20759 // reserved. Use of this source code is governed by a BSD-style license that
20760 // can be found in the LICENSE file.
20761 //
20762@@ -9,7 +9,7 @@
20763 // implementations. See the translator.README.txt file in the tools directory
20764 // for more information.
20765 //
20766-// $hash=9c6cd57fec248c032f4b036f76b519913f973d05$
20767+// $hash=98fa3d9e050e833252d3abe3ca7e8fe83154b25f$
20768 //
20769
20770 #include "libcef_dll/ctocpp/display_handler_ctocpp.h"
20771@@ -105,6 +105,57 @@ void CefDisplayHandlerCToCpp::OnFaviconURLChange(
20772     cef_string_list_free(icon_urlsList);
20773 }
20774
20775+NO_SANITIZE("cfi-icall")
20776+void CefDisplayHandlerCToCpp::OnReceivedTouchIconUrl(
20777+    CefRefPtr<CefBrowser> browser,
20778+    const CefString& icon_url,
20779+    bool precomposed) {
20780+  shutdown_checker::AssertNotShutdown();
20781+
20782+  cef_display_handler_t* _struct = GetStruct();
20783+  if (CEF_MEMBER_MISSING(_struct, on_received_touch_icon_url))
20784+    return;
20785+
20786+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
20787+
20788+  // Verify param: browser; type: refptr_diff
20789+  DCHECK(browser.get());
20790+  if (!browser.get())
20791+    return;
20792+  // Verify param: icon_url; type: string_byref_const
20793+  DCHECK(!icon_url.empty());
20794+  if (icon_url.empty())
20795+    return;
20796+
20797+  // Execute
20798+  _struct->on_received_touch_icon_url(_struct, CefBrowserCppToC::Wrap(browser),
20799+                                      icon_url.GetStruct(), precomposed);
20800+}
20801+
20802+NO_SANITIZE("cfi-icall")
20803+void CefDisplayHandlerCToCpp::OnReceivedIcon(const void* data,
20804+                                             size_t width,
20805+                                             size_t height,
20806+                                             cef_color_type_t color_type,
20807+                                             cef_alpha_type_t alpha_type) {
20808+  shutdown_checker::AssertNotShutdown();
20809+
20810+  cef_display_handler_t* _struct = GetStruct();
20811+  if (CEF_MEMBER_MISSING(_struct, on_received_icon))
20812+    return;
20813+
20814+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
20815+
20816+  // Verify param: data; type: simple_byaddr
20817+  DCHECK(data);
20818+  if (!data)
20819+    return;
20820+
20821+  // Execute
20822+  _struct->on_received_icon(_struct, data, width, height, color_type,
20823+                            alpha_type);
20824+}
20825+
20826 NO_SANITIZE("cfi-icall")
20827 void CefDisplayHandlerCToCpp::OnFullscreenModeChange(
20828     CefRefPtr<CefBrowser> browser,
20829diff --git a/cef/libcef_dll/ctocpp/display_handler_ctocpp.h b/cef/libcef_dll/ctocpp/display_handler_ctocpp.h
20830index 46cf7d1c95..35822b73b3 100644
20831--- a/cef/libcef_dll/ctocpp/display_handler_ctocpp.h
20832+++ b/cef/libcef_dll/ctocpp/display_handler_ctocpp.h
20833@@ -1,4 +1,4 @@
20834-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20835+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20836 // reserved. Use of this source code is governed by a BSD-style license that
20837 // can be found in the LICENSE file.
20838 //
20839@@ -9,7 +9,7 @@
20840 // implementations. See the translator.README.txt file in the tools directory
20841 // for more information.
20842 //
20843-// $hash=16499007f73a511e2aa6dd175965e26cc5f8b1ba$
20844+// $hash=07af406c978c7eef163785b97dce854126fc6052$
20845 //
20846
20847 #ifndef CEF_LIBCEF_DLL_CTOCPP_DISPLAY_HANDLER_CTOCPP_H_
20848@@ -43,6 +43,14 @@ class CefDisplayHandlerCToCpp
20849                      const CefString& title) override;
20850   void OnFaviconURLChange(CefRefPtr<CefBrowser> browser,
20851                           const std::vector<CefString>& icon_urls) override;
20852+  void OnReceivedTouchIconUrl(CefRefPtr<CefBrowser> browser,
20853+                              const CefString& icon_url,
20854+                              bool precomposed) override;
20855+  void OnReceivedIcon(const void* data,
20856+                      size_t width,
20857+                      size_t height,
20858+                      cef_color_type_t color_type,
20859+                      cef_alpha_type_t alpha_type) override;
20860   void OnFullscreenModeChange(CefRefPtr<CefBrowser> browser,
20861                               bool fullscreen) override;
20862   bool OnTooltip(CefRefPtr<CefBrowser> browser, CefString& text) override;
20863diff --git a/cef/libcef_dll/ctocpp/domdocument_ctocpp.cc b/cef/libcef_dll/ctocpp/domdocument_ctocpp.cc
20864index 09983c2fe5..3506a6b90e 100644
20865--- a/cef/libcef_dll/ctocpp/domdocument_ctocpp.cc
20866+++ b/cef/libcef_dll/ctocpp/domdocument_ctocpp.cc
20867@@ -1,4 +1,4 @@
20868-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20869+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20870 // reserved. Use of this source code is governed by a BSD-style license that
20871 // can be found in the LICENSE file.
20872 //
20873@@ -9,7 +9,7 @@
20874 // implementations. See the translator.README.txt file in the tools directory
20875 // for more information.
20876 //
20877-// $hash=a83ef828be13e2b67b7fa61bceaeff1dc269d632$
20878+// $hash=e5f17a1d61c8211bcf16be848e8aaf48934c5b0c$
20879 //
20880
20881 #include "libcef_dll/ctocpp/domdocument_ctocpp.h"
20882diff --git a/cef/libcef_dll/ctocpp/domdocument_ctocpp.h b/cef/libcef_dll/ctocpp/domdocument_ctocpp.h
20883index ec5d46c784..51bc133ca7 100644
20884--- a/cef/libcef_dll/ctocpp/domdocument_ctocpp.h
20885+++ b/cef/libcef_dll/ctocpp/domdocument_ctocpp.h
20886@@ -1,4 +1,4 @@
20887-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20888+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20889 // reserved. Use of this source code is governed by a BSD-style license that
20890 // can be found in the LICENSE file.
20891 //
20892@@ -9,7 +9,7 @@
20893 // implementations. See the translator.README.txt file in the tools directory
20894 // for more information.
20895 //
20896-// $hash=be5aeaffe84056cb5b1f032eaa8db30142b5916b$
20897+// $hash=dc5be45ff3472cdcd51acd395f96c0ee82ebc27c$
20898 //
20899
20900 #ifndef CEF_LIBCEF_DLL_CTOCPP_DOMDOCUMENT_CTOCPP_H_
20901diff --git a/cef/libcef_dll/ctocpp/domnode_ctocpp.cc b/cef/libcef_dll/ctocpp/domnode_ctocpp.cc
20902index c3bac08c7b..566e426bf9 100644
20903--- a/cef/libcef_dll/ctocpp/domnode_ctocpp.cc
20904+++ b/cef/libcef_dll/ctocpp/domnode_ctocpp.cc
20905@@ -1,4 +1,4 @@
20906-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20907+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20908 // reserved. Use of this source code is governed by a BSD-style license that
20909 // can be found in the LICENSE file.
20910 //
20911@@ -9,7 +9,7 @@
20912 // implementations. See the translator.README.txt file in the tools directory
20913 // for more information.
20914 //
20915-// $hash=dee9e45990bc87669285dae6b0f78782e15bdbc0$
20916+// $hash=64846f6de30a56d2aaed093cbfd9959c7cc2f1af$
20917 //
20918
20919 #include "libcef_dll/ctocpp/domnode_ctocpp.h"
20920diff --git a/cef/libcef_dll/ctocpp/domnode_ctocpp.h b/cef/libcef_dll/ctocpp/domnode_ctocpp.h
20921index 7fed8231b3..44e55e4092 100644
20922--- a/cef/libcef_dll/ctocpp/domnode_ctocpp.h
20923+++ b/cef/libcef_dll/ctocpp/domnode_ctocpp.h
20924@@ -1,4 +1,4 @@
20925-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20926+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20927 // reserved. Use of this source code is governed by a BSD-style license that
20928 // can be found in the LICENSE file.
20929 //
20930@@ -9,7 +9,7 @@
20931 // implementations. See the translator.README.txt file in the tools directory
20932 // for more information.
20933 //
20934-// $hash=0261f2feb842f255f84c013f69076056e9710d98$
20935+// $hash=0c827dc44314ab47ab0ba0092aff3f58ddfc141e$
20936 //
20937
20938 #ifndef CEF_LIBCEF_DLL_CTOCPP_DOMNODE_CTOCPP_H_
20939diff --git a/cef/libcef_dll/ctocpp/domvisitor_ctocpp.cc b/cef/libcef_dll/ctocpp/domvisitor_ctocpp.cc
20940index 9886715c22..3ece62f9ed 100644
20941--- a/cef/libcef_dll/ctocpp/domvisitor_ctocpp.cc
20942+++ b/cef/libcef_dll/ctocpp/domvisitor_ctocpp.cc
20943@@ -1,4 +1,4 @@
20944-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20945+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20946 // reserved. Use of this source code is governed by a BSD-style license that
20947 // can be found in the LICENSE file.
20948 //
20949@@ -9,7 +9,7 @@
20950 // implementations. See the translator.README.txt file in the tools directory
20951 // for more information.
20952 //
20953-// $hash=5d6aa6cab8aee93452a868bee9833d7b1536117e$
20954+// $hash=c3351e11fd6ae488bd77aeba4b4c8485f24119ad$
20955 //
20956
20957 #include "libcef_dll/ctocpp/domvisitor_ctocpp.h"
20958diff --git a/cef/libcef_dll/ctocpp/domvisitor_ctocpp.h b/cef/libcef_dll/ctocpp/domvisitor_ctocpp.h
20959index 4a773ac851..b1cf8b622a 100644
20960--- a/cef/libcef_dll/ctocpp/domvisitor_ctocpp.h
20961+++ b/cef/libcef_dll/ctocpp/domvisitor_ctocpp.h
20962@@ -1,4 +1,4 @@
20963-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20964+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20965 // reserved. Use of this source code is governed by a BSD-style license that
20966 // can be found in the LICENSE file.
20967 //
20968@@ -9,7 +9,7 @@
20969 // implementations. See the translator.README.txt file in the tools directory
20970 // for more information.
20971 //
20972-// $hash=f28987d270ea7522a3ead7a1dcd520e1bf4e6b9e$
20973+// $hash=950252a2903cd57d097fb9dcd4eacf0761914e7a$
20974 //
20975
20976 #ifndef CEF_LIBCEF_DLL_CTOCPP_DOMVISITOR_CTOCPP_H_
20977diff --git a/cef/libcef_dll/ctocpp/download_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/download_handler_ctocpp.cc
20978index 0b3dc2eb1b..981d59333f 100644
20979--- a/cef/libcef_dll/ctocpp/download_handler_ctocpp.cc
20980+++ b/cef/libcef_dll/ctocpp/download_handler_ctocpp.cc
20981@@ -1,4 +1,4 @@
20982-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
20983+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
20984 // reserved. Use of this source code is governed by a BSD-style license that
20985 // can be found in the LICENSE file.
20986 //
20987@@ -9,7 +9,7 @@
20988 // implementations. See the translator.README.txt file in the tools directory
20989 // for more information.
20990 //
20991-// $hash=b06c6391432eaddc2d8653b1afe2ba7155dddaf3$
20992+// $hash=c4e47ffd023b528b9c5b658126f4a1d9fd05cf98$
20993 //
20994
20995 #include "libcef_dll/ctocpp/download_handler_ctocpp.h"
20996diff --git a/cef/libcef_dll/ctocpp/download_handler_ctocpp.h b/cef/libcef_dll/ctocpp/download_handler_ctocpp.h
20997index c85fcf91ac..a74b923cf1 100644
20998--- a/cef/libcef_dll/ctocpp/download_handler_ctocpp.h
20999+++ b/cef/libcef_dll/ctocpp/download_handler_ctocpp.h
21000@@ -1,4 +1,4 @@
21001-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21002+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21003 // reserved. Use of this source code is governed by a BSD-style license that
21004 // can be found in the LICENSE file.
21005 //
21006@@ -9,7 +9,7 @@
21007 // implementations. See the translator.README.txt file in the tools directory
21008 // for more information.
21009 //
21010-// $hash=c88c3c71eab51921583fd73f515f0dac2e23f14b$
21011+// $hash=172a12dd9e68b65afff9eef5b93f0e480beaf904$
21012 //
21013
21014 #ifndef CEF_LIBCEF_DLL_CTOCPP_DOWNLOAD_HANDLER_CTOCPP_H_
21015diff --git a/cef/libcef_dll/ctocpp/download_image_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/download_image_callback_ctocpp.cc
21016index 7de309c166..73a483afcb 100644
21017--- a/cef/libcef_dll/ctocpp/download_image_callback_ctocpp.cc
21018+++ b/cef/libcef_dll/ctocpp/download_image_callback_ctocpp.cc
21019@@ -1,4 +1,4 @@
21020-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21021+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21022 // reserved. Use of this source code is governed by a BSD-style license that
21023 // can be found in the LICENSE file.
21024 //
21025@@ -9,7 +9,7 @@
21026 // implementations. See the translator.README.txt file in the tools directory
21027 // for more information.
21028 //
21029-// $hash=88e1ac8e51f7255059242ed85dbb2c071c595ffe$
21030+// $hash=8568e306d0db860b1cd222f7c6dba344f349cb2d$
21031 //
21032
21033 #include "libcef_dll/ctocpp/download_image_callback_ctocpp.h"
21034diff --git a/cef/libcef_dll/ctocpp/download_image_callback_ctocpp.h b/cef/libcef_dll/ctocpp/download_image_callback_ctocpp.h
21035index 8fccab1dea..ff4558668f 100644
21036--- a/cef/libcef_dll/ctocpp/download_image_callback_ctocpp.h
21037+++ b/cef/libcef_dll/ctocpp/download_image_callback_ctocpp.h
21038@@ -1,4 +1,4 @@
21039-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21040+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21041 // reserved. Use of this source code is governed by a BSD-style license that
21042 // can be found in the LICENSE file.
21043 //
21044@@ -9,7 +9,7 @@
21045 // implementations. See the translator.README.txt file in the tools directory
21046 // for more information.
21047 //
21048-// $hash=73f30c6f17708de7c3633a30e01a2bb672afbc83$
21049+// $hash=fa13abafcf97f6a71d08ca7ec67d45a71d636603$
21050 //
21051
21052 #ifndef CEF_LIBCEF_DLL_CTOCPP_DOWNLOAD_IMAGE_CALLBACK_CTOCPP_H_
21053diff --git a/cef/libcef_dll/ctocpp/download_item_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/download_item_callback_ctocpp.cc
21054index 50fa61d19c..0608133157 100644
21055--- a/cef/libcef_dll/ctocpp/download_item_callback_ctocpp.cc
21056+++ b/cef/libcef_dll/ctocpp/download_item_callback_ctocpp.cc
21057@@ -1,4 +1,4 @@
21058-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21059+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21060 // reserved. Use of this source code is governed by a BSD-style license that
21061 // can be found in the LICENSE file.
21062 //
21063@@ -9,7 +9,7 @@
21064 // implementations. See the translator.README.txt file in the tools directory
21065 // for more information.
21066 //
21067-// $hash=fb09a7e7db1267d0653fff64c419ab573496614f$
21068+// $hash=092e50c318b7d1c933ffb293ff062df17bfbb736$
21069 //
21070
21071 #include "libcef_dll/ctocpp/download_item_callback_ctocpp.h"
21072diff --git a/cef/libcef_dll/ctocpp/download_item_callback_ctocpp.h b/cef/libcef_dll/ctocpp/download_item_callback_ctocpp.h
21073index ccadf6a588..b1bcf4a373 100644
21074--- a/cef/libcef_dll/ctocpp/download_item_callback_ctocpp.h
21075+++ b/cef/libcef_dll/ctocpp/download_item_callback_ctocpp.h
21076@@ -1,4 +1,4 @@
21077-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21078+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21079 // reserved. Use of this source code is governed by a BSD-style license that
21080 // can be found in the LICENSE file.
21081 //
21082@@ -9,7 +9,7 @@
21083 // implementations. See the translator.README.txt file in the tools directory
21084 // for more information.
21085 //
21086-// $hash=7f1556d32762b7eb0c65afbb7d4c5014a97a96c9$
21087+// $hash=de956d3f54d0b28636c76d9c3a306b124c164a97$
21088 //
21089
21090 #ifndef CEF_LIBCEF_DLL_CTOCPP_DOWNLOAD_ITEM_CALLBACK_CTOCPP_H_
21091diff --git a/cef/libcef_dll/ctocpp/download_item_ctocpp.cc b/cef/libcef_dll/ctocpp/download_item_ctocpp.cc
21092index 11a172a65d..66f136e42f 100644
21093--- a/cef/libcef_dll/ctocpp/download_item_ctocpp.cc
21094+++ b/cef/libcef_dll/ctocpp/download_item_ctocpp.cc
21095@@ -1,4 +1,4 @@
21096-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21097+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21098 // reserved. Use of this source code is governed by a BSD-style license that
21099 // can be found in the LICENSE file.
21100 //
21101@@ -9,7 +9,7 @@
21102 // implementations. See the translator.README.txt file in the tools directory
21103 // for more information.
21104 //
21105-// $hash=3052f807e8bd2d9d41e8147d6f14b26a38cbeaeb$
21106+// $hash=05c6527a7cdeb9495bca9da965956fb3006a7bdd$
21107 //
21108
21109 #include "libcef_dll/ctocpp/download_item_ctocpp.h"
21110diff --git a/cef/libcef_dll/ctocpp/download_item_ctocpp.h b/cef/libcef_dll/ctocpp/download_item_ctocpp.h
21111index 1e1ed58eba..8cdb343e7d 100644
21112--- a/cef/libcef_dll/ctocpp/download_item_ctocpp.h
21113+++ b/cef/libcef_dll/ctocpp/download_item_ctocpp.h
21114@@ -1,4 +1,4 @@
21115-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21116+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21117 // reserved. Use of this source code is governed by a BSD-style license that
21118 // can be found in the LICENSE file.
21119 //
21120@@ -9,7 +9,7 @@
21121 // implementations. See the translator.README.txt file in the tools directory
21122 // for more information.
21123 //
21124-// $hash=a536d8825fc85c5248fcdf5316bdf760e9f4a5e6$
21125+// $hash=dd66cdd93b90eac63bef4639134076a3ea180f12$
21126 //
21127
21128 #ifndef CEF_LIBCEF_DLL_CTOCPP_DOWNLOAD_ITEM_CTOCPP_H_
21129diff --git a/cef/libcef_dll/ctocpp/drag_data_ctocpp.cc b/cef/libcef_dll/ctocpp/drag_data_ctocpp.cc
21130index c51ecf34de..fc33a78e53 100644
21131--- a/cef/libcef_dll/ctocpp/drag_data_ctocpp.cc
21132+++ b/cef/libcef_dll/ctocpp/drag_data_ctocpp.cc
21133@@ -1,4 +1,4 @@
21134-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21135+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21136 // reserved. Use of this source code is governed by a BSD-style license that
21137 // can be found in the LICENSE file.
21138 //
21139@@ -9,7 +9,7 @@
21140 // implementations. See the translator.README.txt file in the tools directory
21141 // for more information.
21142 //
21143-// $hash=aa1596cb76a36c6adce59bd1d7623c636c1a4740$
21144+// $hash=57352ff85ca98fc34a0f2c58afbb1224ce1a1f09$
21145 //
21146
21147 #include "libcef_dll/ctocpp/drag_data_ctocpp.h"
21148diff --git a/cef/libcef_dll/ctocpp/drag_data_ctocpp.h b/cef/libcef_dll/ctocpp/drag_data_ctocpp.h
21149index a8d37b80c4..952ef289b2 100644
21150--- a/cef/libcef_dll/ctocpp/drag_data_ctocpp.h
21151+++ b/cef/libcef_dll/ctocpp/drag_data_ctocpp.h
21152@@ -1,4 +1,4 @@
21153-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21154+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21155 // reserved. Use of this source code is governed by a BSD-style license that
21156 // can be found in the LICENSE file.
21157 //
21158@@ -9,7 +9,7 @@
21159 // implementations. See the translator.README.txt file in the tools directory
21160 // for more information.
21161 //
21162-// $hash=e5579ef142f0eb3873c7fd526320919b000f57ee$
21163+// $hash=e3022098b1513ebfea27dab4213100777389cf99$
21164 //
21165
21166 #ifndef CEF_LIBCEF_DLL_CTOCPP_DRAG_DATA_CTOCPP_H_
21167diff --git a/cef/libcef_dll/ctocpp/drag_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/drag_handler_ctocpp.cc
21168index 2ce35c09a1..ccf11d8fb5 100644
21169--- a/cef/libcef_dll/ctocpp/drag_handler_ctocpp.cc
21170+++ b/cef/libcef_dll/ctocpp/drag_handler_ctocpp.cc
21171@@ -1,4 +1,4 @@
21172-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21173+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21174 // reserved. Use of this source code is governed by a BSD-style license that
21175 // can be found in the LICENSE file.
21176 //
21177@@ -9,7 +9,7 @@
21178 // implementations. See the translator.README.txt file in the tools directory
21179 // for more information.
21180 //
21181-// $hash=86c335a8c888ca3a7e08d6cb320b91389bc2232c$
21182+// $hash=83bbaf05bb87f369d819d4202110581c3bbe60a1$
21183 //
21184
21185 #include "libcef_dll/ctocpp/drag_handler_ctocpp.h"
21186diff --git a/cef/libcef_dll/ctocpp/drag_handler_ctocpp.h b/cef/libcef_dll/ctocpp/drag_handler_ctocpp.h
21187index 4940eb73d2..47488db5e3 100644
21188--- a/cef/libcef_dll/ctocpp/drag_handler_ctocpp.h
21189+++ b/cef/libcef_dll/ctocpp/drag_handler_ctocpp.h
21190@@ -1,4 +1,4 @@
21191-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21192+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21193 // reserved. Use of this source code is governed by a BSD-style license that
21194 // can be found in the LICENSE file.
21195 //
21196@@ -9,7 +9,7 @@
21197 // implementations. See the translator.README.txt file in the tools directory
21198 // for more information.
21199 //
21200-// $hash=23257e88edd1dbe17b69adbaff5bbdd52149a075$
21201+// $hash=87c40d04da449f1144f962dff8b3e0b5a1d70db7$
21202 //
21203
21204 #ifndef CEF_LIBCEF_DLL_CTOCPP_DRAG_HANDLER_CTOCPP_H_
21205diff --git a/cef/libcef_dll/ctocpp/end_tracing_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/end_tracing_callback_ctocpp.cc
21206index 9f12dfe493..9489292a43 100644
21207--- a/cef/libcef_dll/ctocpp/end_tracing_callback_ctocpp.cc
21208+++ b/cef/libcef_dll/ctocpp/end_tracing_callback_ctocpp.cc
21209@@ -1,4 +1,4 @@
21210-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21211+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21212 // reserved. Use of this source code is governed by a BSD-style license that
21213 // can be found in the LICENSE file.
21214 //
21215@@ -9,7 +9,7 @@
21216 // implementations. See the translator.README.txt file in the tools directory
21217 // for more information.
21218 //
21219-// $hash=a9fa1d67bf81497a442096b2969a08ccee88b952$
21220+// $hash=7f660f5500f6e299ef56d598c71ade363f5581b9$
21221 //
21222
21223 #include "libcef_dll/ctocpp/end_tracing_callback_ctocpp.h"
21224diff --git a/cef/libcef_dll/ctocpp/end_tracing_callback_ctocpp.h b/cef/libcef_dll/ctocpp/end_tracing_callback_ctocpp.h
21225index e19d85f544..81b82fc180 100644
21226--- a/cef/libcef_dll/ctocpp/end_tracing_callback_ctocpp.h
21227+++ b/cef/libcef_dll/ctocpp/end_tracing_callback_ctocpp.h
21228@@ -1,4 +1,4 @@
21229-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21230+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21231 // reserved. Use of this source code is governed by a BSD-style license that
21232 // can be found in the LICENSE file.
21233 //
21234@@ -9,7 +9,7 @@
21235 // implementations. See the translator.README.txt file in the tools directory
21236 // for more information.
21237 //
21238-// $hash=38b8d10de419daefd1b6021283e0e7b373308948$
21239+// $hash=43c23da2432e1336afcd21889ae744bcc109e3ed$
21240 //
21241
21242 #ifndef CEF_LIBCEF_DLL_CTOCPP_END_TRACING_CALLBACK_CTOCPP_H_
21243diff --git a/cef/libcef_dll/ctocpp/extension_ctocpp.cc b/cef/libcef_dll/ctocpp/extension_ctocpp.cc
21244index 693a12ffe2..a891cd0190 100644
21245--- a/cef/libcef_dll/ctocpp/extension_ctocpp.cc
21246+++ b/cef/libcef_dll/ctocpp/extension_ctocpp.cc
21247@@ -1,4 +1,4 @@
21248-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21249+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21250 // reserved. Use of this source code is governed by a BSD-style license that
21251 // can be found in the LICENSE file.
21252 //
21253@@ -9,7 +9,7 @@
21254 // implementations. See the translator.README.txt file in the tools directory
21255 // for more information.
21256 //
21257-// $hash=57e6d3169944358208705cf0bad4edfd8a6c3d16$
21258+// $hash=de6b935b77168bd9b44f26643c510f360f8b6ebd$
21259 //
21260
21261 #include "libcef_dll/ctocpp/extension_ctocpp.h"
21262diff --git a/cef/libcef_dll/ctocpp/extension_ctocpp.h b/cef/libcef_dll/ctocpp/extension_ctocpp.h
21263index 578f87f039..c41547e5c4 100644
21264--- a/cef/libcef_dll/ctocpp/extension_ctocpp.h
21265+++ b/cef/libcef_dll/ctocpp/extension_ctocpp.h
21266@@ -1,4 +1,4 @@
21267-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21268+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21269 // reserved. Use of this source code is governed by a BSD-style license that
21270 // can be found in the LICENSE file.
21271 //
21272@@ -9,7 +9,7 @@
21273 // implementations. See the translator.README.txt file in the tools directory
21274 // for more information.
21275 //
21276-// $hash=faae935a841ecb55281ac5c8ff3621b2624c048f$
21277+// $hash=262f7398fd22effc7269c27ba5cb7e96ddea8b30$
21278 //
21279
21280 #ifndef CEF_LIBCEF_DLL_CTOCPP_EXTENSION_CTOCPP_H_
21281diff --git a/cef/libcef_dll/ctocpp/extension_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/extension_handler_ctocpp.cc
21282index e390a27473..b6826310cf 100644
21283--- a/cef/libcef_dll/ctocpp/extension_handler_ctocpp.cc
21284+++ b/cef/libcef_dll/ctocpp/extension_handler_ctocpp.cc
21285@@ -1,4 +1,4 @@
21286-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21287+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21288 // reserved. Use of this source code is governed by a BSD-style license that
21289 // can be found in the LICENSE file.
21290 //
21291@@ -9,7 +9,7 @@
21292 // implementations. See the translator.README.txt file in the tools directory
21293 // for more information.
21294 //
21295-// $hash=5dee9e8035c63468d7749612f94abf592ca2c2d9$
21296+// $hash=befb9e9bd438e431bb55b7c67413d9d7a7b263f2$
21297 //
21298
21299 #include "libcef_dll/ctocpp/extension_handler_ctocpp.h"
21300diff --git a/cef/libcef_dll/ctocpp/extension_handler_ctocpp.h b/cef/libcef_dll/ctocpp/extension_handler_ctocpp.h
21301index c825b14032..b8bd638ea6 100644
21302--- a/cef/libcef_dll/ctocpp/extension_handler_ctocpp.h
21303+++ b/cef/libcef_dll/ctocpp/extension_handler_ctocpp.h
21304@@ -1,4 +1,4 @@
21305-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21306+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21307 // reserved. Use of this source code is governed by a BSD-style license that
21308 // can be found in the LICENSE file.
21309 //
21310@@ -9,7 +9,7 @@
21311 // implementations. See the translator.README.txt file in the tools directory
21312 // for more information.
21313 //
21314-// $hash=8f93565c27a717559fea6e381b2f8d70fbf9d601$
21315+// $hash=147ef76bff631531a075ac9a2c823d3e9f84c409$
21316 //
21317
21318 #ifndef CEF_LIBCEF_DLL_CTOCPP_EXTENSION_HANDLER_CTOCPP_H_
21319diff --git a/cef/libcef_dll/ctocpp/file_dialog_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/file_dialog_callback_ctocpp.cc
21320index 822bc96057..3b90ba5a36 100644
21321--- a/cef/libcef_dll/ctocpp/file_dialog_callback_ctocpp.cc
21322+++ b/cef/libcef_dll/ctocpp/file_dialog_callback_ctocpp.cc
21323@@ -1,4 +1,4 @@
21324-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21325+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21326 // reserved. Use of this source code is governed by a BSD-style license that
21327 // can be found in the LICENSE file.
21328 //
21329@@ -9,7 +9,7 @@
21330 // implementations. See the translator.README.txt file in the tools directory
21331 // for more information.
21332 //
21333-// $hash=03ee4c71a45e6c010a1a5c16d42c8dc5b0e61658$
21334+// $hash=8fecb808fb6a84d630d1e8c5380a5ffd900b3654$
21335 //
21336
21337 #include "libcef_dll/ctocpp/file_dialog_callback_ctocpp.h"
21338diff --git a/cef/libcef_dll/ctocpp/file_dialog_callback_ctocpp.h b/cef/libcef_dll/ctocpp/file_dialog_callback_ctocpp.h
21339index 1d66f25d53..028ee3de68 100644
21340--- a/cef/libcef_dll/ctocpp/file_dialog_callback_ctocpp.h
21341+++ b/cef/libcef_dll/ctocpp/file_dialog_callback_ctocpp.h
21342@@ -1,4 +1,4 @@
21343-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21344+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21345 // reserved. Use of this source code is governed by a BSD-style license that
21346 // can be found in the LICENSE file.
21347 //
21348@@ -9,7 +9,7 @@
21349 // implementations. See the translator.README.txt file in the tools directory
21350 // for more information.
21351 //
21352-// $hash=333ff5ff1b7dacb0ef4aa1f025d97babd4c2f252$
21353+// $hash=155436adc4090718e65a2348fa60dbd393c6fe2e$
21354 //
21355
21356 #ifndef CEF_LIBCEF_DLL_CTOCPP_FILE_DIALOG_CALLBACK_CTOCPP_H_
21357diff --git a/cef/libcef_dll/ctocpp/find_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/find_handler_ctocpp.cc
21358index 3a01df75da..a12e2e089c 100644
21359--- a/cef/libcef_dll/ctocpp/find_handler_ctocpp.cc
21360+++ b/cef/libcef_dll/ctocpp/find_handler_ctocpp.cc
21361@@ -1,4 +1,4 @@
21362-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21363+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21364 // reserved. Use of this source code is governed by a BSD-style license that
21365 // can be found in the LICENSE file.
21366 //
21367@@ -9,7 +9,7 @@
21368 // implementations. See the translator.README.txt file in the tools directory
21369 // for more information.
21370 //
21371-// $hash=65c786d5d1090df5c1bf74d2fae323dc70fe05d3$
21372+// $hash=22af1e946668e89411cc87596b88c8a47880a78a$
21373 //
21374
21375 #include "libcef_dll/ctocpp/find_handler_ctocpp.h"
21376diff --git a/cef/libcef_dll/ctocpp/find_handler_ctocpp.h b/cef/libcef_dll/ctocpp/find_handler_ctocpp.h
21377index 21d89a53fb..ce9cffbae8 100644
21378--- a/cef/libcef_dll/ctocpp/find_handler_ctocpp.h
21379+++ b/cef/libcef_dll/ctocpp/find_handler_ctocpp.h
21380@@ -1,4 +1,4 @@
21381-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21382+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21383 // reserved. Use of this source code is governed by a BSD-style license that
21384 // can be found in the LICENSE file.
21385 //
21386@@ -9,7 +9,7 @@
21387 // implementations. See the translator.README.txt file in the tools directory
21388 // for more information.
21389 //
21390-// $hash=84888f5fdae1eb1f132f1fcbaae81f3b4f87353b$
21391+// $hash=d6ed1e4a341c9deecc217c49ecd52f444d18e236$
21392 //
21393
21394 #ifndef CEF_LIBCEF_DLL_CTOCPP_FIND_HANDLER_CTOCPP_H_
21395diff --git a/cef/libcef_dll/ctocpp/focus_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/focus_handler_ctocpp.cc
21396index da04ab7996..42f46d1d12 100644
21397--- a/cef/libcef_dll/ctocpp/focus_handler_ctocpp.cc
21398+++ b/cef/libcef_dll/ctocpp/focus_handler_ctocpp.cc
21399@@ -1,4 +1,4 @@
21400-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21401+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21402 // reserved. Use of this source code is governed by a BSD-style license that
21403 // can be found in the LICENSE file.
21404 //
21405@@ -9,7 +9,7 @@
21406 // implementations. See the translator.README.txt file in the tools directory
21407 // for more information.
21408 //
21409-// $hash=cbd8868643e361e9e9cd94bf2fadf91c2b7f4e47$
21410+// $hash=fe5dc43b11c24ea7a1e9a1c31846cd433a425a48$
21411 //
21412
21413 #include "libcef_dll/ctocpp/focus_handler_ctocpp.h"
21414diff --git a/cef/libcef_dll/ctocpp/focus_handler_ctocpp.h b/cef/libcef_dll/ctocpp/focus_handler_ctocpp.h
21415index 0ef4ce5814..0c31eca72d 100644
21416--- a/cef/libcef_dll/ctocpp/focus_handler_ctocpp.h
21417+++ b/cef/libcef_dll/ctocpp/focus_handler_ctocpp.h
21418@@ -1,4 +1,4 @@
21419-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21420+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21421 // reserved. Use of this source code is governed by a BSD-style license that
21422 // can be found in the LICENSE file.
21423 //
21424@@ -9,7 +9,7 @@
21425 // implementations. See the translator.README.txt file in the tools directory
21426 // for more information.
21427 //
21428-// $hash=1e99b84b9c7ed06898fe3db94c158f9a5db96ca9$
21429+// $hash=7a41bfc84063e89ae6a9a02ad4252b6145e06d48$
21430 //
21431
21432 #ifndef CEF_LIBCEF_DLL_CTOCPP_FOCUS_HANDLER_CTOCPP_H_
21433diff --git a/cef/libcef_dll/ctocpp/frame_ctocpp.cc b/cef/libcef_dll/ctocpp/frame_ctocpp.cc
21434index 4fd7242218..68afd7bd7b 100644
21435--- a/cef/libcef_dll/ctocpp/frame_ctocpp.cc
21436+++ b/cef/libcef_dll/ctocpp/frame_ctocpp.cc
21437@@ -1,4 +1,4 @@
21438-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21439+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21440 // reserved. Use of this source code is governed by a BSD-style license that
21441 // can be found in the LICENSE file.
21442 //
21443@@ -9,7 +9,7 @@
21444 // implementations. See the translator.README.txt file in the tools directory
21445 // for more information.
21446 //
21447-// $hash=18dfd50f3a29afda039123f968d8d3c93763682b$
21448+// $hash=58457cf1e745964f12e1266265fbc1fc1b0ebcd4$
21449 //
21450
21451 #include "libcef_dll/ctocpp/frame_ctocpp.h"
21452@@ -395,6 +395,24 @@ void CefFrameCToCpp::VisitDOM(CefRefPtr<CefDOMVisitor> visitor) {
21453   _struct->visit_dom(_struct, CefDOMVisitorCppToC::Wrap(visitor));
21454 }
21455
21456+NO_SANITIZE("cfi-icall")
21457+void CefFrameCToCpp::LoadHeaderUrl(const CefString& url,
21458+                                   const CefString& additionalHttpHeaders) {
21459+  shutdown_checker::AssertNotShutdown();
21460+
21461+  cef_frame_t* _struct = GetStruct();
21462+  if (CEF_MEMBER_MISSING(_struct, load_header_url))
21463+    return;
21464+
21465+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
21466+
21467+  // Unverified params: url, additionalHttpHeaders
21468+
21469+  // Execute
21470+  _struct->load_header_url(_struct, url.GetStruct(),
21471+                           additionalHttpHeaders.GetStruct());
21472+}
21473+
21474 NO_SANITIZE("cfi-icall")
21475 CefRefPtr<CefURLRequest> CefFrameCToCpp::CreateURLRequest(
21476     CefRefPtr<CefRequest> request,
21477diff --git a/cef/libcef_dll/ctocpp/frame_ctocpp.h b/cef/libcef_dll/ctocpp/frame_ctocpp.h
21478index 5201b14a60..b9eaf9d149 100644
21479--- a/cef/libcef_dll/ctocpp/frame_ctocpp.h
21480+++ b/cef/libcef_dll/ctocpp/frame_ctocpp.h
21481@@ -1,4 +1,4 @@
21482-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21483+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21484 // reserved. Use of this source code is governed by a BSD-style license that
21485 // can be found in the LICENSE file.
21486 //
21487@@ -9,7 +9,7 @@
21488 // implementations. See the translator.README.txt file in the tools directory
21489 // for more information.
21490 //
21491-// $hash=398e1f63c0456dac74d288e3dc7a7b23e488b78a$
21492+// $hash=adb1a1944137c612548a541cf350ea48c059c80d$
21493 //
21494
21495 #ifndef CEF_LIBCEF_DLL_CTOCPP_FRAME_CTOCPP_H_
21496@@ -64,6 +64,8 @@ class CefFrameCToCpp
21497   CefRefPtr<CefBrowser> GetBrowser() OVERRIDE;
21498   CefRefPtr<CefV8Context> GetV8Context() OVERRIDE;
21499   void VisitDOM(CefRefPtr<CefDOMVisitor> visitor) OVERRIDE;
21500+  void LoadHeaderUrl(const CefString& url,
21501+                     const CefString& additionalHttpHeaders) OVERRIDE;
21502   CefRefPtr<CefURLRequest> CreateURLRequest(
21503       CefRefPtr<CefRequest> request,
21504       CefRefPtr<CefURLRequestClient> client) OVERRIDE;
21505diff --git a/cef/libcef_dll/ctocpp/geolocation_acess_ctocpp.cc b/cef/libcef_dll/ctocpp/geolocation_acess_ctocpp.cc
21506new file mode 100644
21507index 0000000000..8be91dcf1a
21508--- /dev/null
21509+++ b/cef/libcef_dll/ctocpp/geolocation_acess_ctocpp.cc
21510@@ -0,0 +1,126 @@
21511+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21512+// reserved. Use of this source code is governed by a BSD-style license that
21513+// can be found in the LICENSE file.
21514+//
21515+// ---------------------------------------------------------------------------
21516+//
21517+// This file was generated by the CEF translator tool. If making changes by
21518+// hand only do so within the body of existing method and function
21519+// implementations. See the translator.README.txt file in the tools directory
21520+// for more information.
21521+//
21522+// $hash=3997657ceba0e011684fe481bdcc221dacd24369$
21523+//
21524+
21525+#include "libcef_dll/ctocpp/geolocation_acess_ctocpp.h"
21526+#include "libcef_dll/shutdown_checker.h"
21527+
21528+// VIRTUAL METHODS - Body may be edited by hand.
21529+
21530+NO_SANITIZE("cfi-icall")
21531+bool CefGeolocationAcessCToCpp::ContainOrigin(const CefString& origin) {
21532+  shutdown_checker::AssertNotShutdown();
21533+
21534+  cef_geolocation_acess_t* _struct = GetStruct();
21535+  if (CEF_MEMBER_MISSING(_struct, contain_origin))
21536+    return false;
21537+
21538+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
21539+
21540+  // Verify param: origin; type: string_byref_const
21541+  DCHECK(!origin.empty());
21542+  if (origin.empty())
21543+    return false;
21544+
21545+  // Execute
21546+  int _retval = _struct->contain_origin(_struct, origin.GetStruct());
21547+
21548+  // Return type: bool
21549+  return _retval ? true : false;
21550+}
21551+
21552+NO_SANITIZE("cfi-icall")
21553+bool CefGeolocationAcessCToCpp::IsOriginAccessEnabled(const CefString& origin) {
21554+  shutdown_checker::AssertNotShutdown();
21555+
21556+  cef_geolocation_acess_t* _struct = GetStruct();
21557+  if (CEF_MEMBER_MISSING(_struct, is_origin_access_enabled))
21558+    return false;
21559+
21560+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
21561+
21562+  // Verify param: origin; type: string_byref_const
21563+  DCHECK(!origin.empty());
21564+  if (origin.empty())
21565+    return false;
21566+
21567+  // Execute
21568+  int _retval = _struct->is_origin_access_enabled(_struct, origin.GetStruct());
21569+
21570+  // Return type: bool
21571+  return _retval ? true : false;
21572+}
21573+
21574+NO_SANITIZE("cfi-icall")
21575+void CefGeolocationAcessCToCpp::Enabled(const CefString& origin) {
21576+  shutdown_checker::AssertNotShutdown();
21577+
21578+  cef_geolocation_acess_t* _struct = GetStruct();
21579+  if (CEF_MEMBER_MISSING(_struct, enabled))
21580+    return;
21581+
21582+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
21583+
21584+  // Verify param: origin; type: string_byref_const
21585+  DCHECK(!origin.empty());
21586+  if (origin.empty())
21587+    return;
21588+
21589+  // Execute
21590+  _struct->enabled(_struct, origin.GetStruct());
21591+}
21592+
21593+NO_SANITIZE("cfi-icall")
21594+void CefGeolocationAcessCToCpp::Disabled(const CefString& origin) {
21595+  shutdown_checker::AssertNotShutdown();
21596+
21597+  cef_geolocation_acess_t* _struct = GetStruct();
21598+  if (CEF_MEMBER_MISSING(_struct, disabled))
21599+    return;
21600+
21601+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
21602+
21603+  // Verify param: origin; type: string_byref_const
21604+  DCHECK(!origin.empty());
21605+  if (origin.empty())
21606+    return;
21607+
21608+  // Execute
21609+  _struct->disabled(_struct, origin.GetStruct());
21610+}
21611+
21612+// CONSTRUCTOR - Do not edit by hand.
21613+
21614+CefGeolocationAcessCToCpp::CefGeolocationAcessCToCpp() {}
21615+
21616+// DESTRUCTOR - Do not edit by hand.
21617+
21618+CefGeolocationAcessCToCpp::~CefGeolocationAcessCToCpp() {
21619+  shutdown_checker::AssertNotShutdown();
21620+}
21621+
21622+template <>
21623+cef_geolocation_acess_t* CefCToCppRefCounted<
21624+    CefGeolocationAcessCToCpp,
21625+    CefGeolocationAcess,
21626+    cef_geolocation_acess_t>::UnwrapDerived(CefWrapperType type,
21627+                                            CefGeolocationAcess* c) {
21628+  NOTREACHED() << "Unexpected class type: " << type;
21629+  return nullptr;
21630+}
21631+
21632+template <>
21633+CefWrapperType CefCToCppRefCounted<CefGeolocationAcessCToCpp,
21634+                                   CefGeolocationAcess,
21635+                                   cef_geolocation_acess_t>::kWrapperType =
21636+    WT_GEOLOCATION_ACESS;
21637diff --git a/cef/libcef_dll/ctocpp/geolocation_acess_ctocpp.h b/cef/libcef_dll/ctocpp/geolocation_acess_ctocpp.h
21638new file mode 100644
21639index 0000000000..b1d761f88e
21640--- /dev/null
21641+++ b/cef/libcef_dll/ctocpp/geolocation_acess_ctocpp.h
21642@@ -0,0 +1,44 @@
21643+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21644+// reserved. Use of this source code is governed by a BSD-style license that
21645+// can be found in the LICENSE file.
21646+//
21647+// ---------------------------------------------------------------------------
21648+//
21649+// This file was generated by the CEF translator tool. If making changes by
21650+// hand only do so within the body of existing method and function
21651+// implementations. See the translator.README.txt file in the tools directory
21652+// for more information.
21653+//
21654+// $hash=f2ca67e142bb0f055586312cd94ae6fffd11215b$
21655+//
21656+
21657+#ifndef CEF_LIBCEF_DLL_CTOCPP_GEOLOCATION_ACESS_CTOCPP_H_
21658+#define CEF_LIBCEF_DLL_CTOCPP_GEOLOCATION_ACESS_CTOCPP_H_
21659+#pragma once
21660+
21661+#if !defined(WRAPPING_CEF_SHARED)
21662+#error This file can be included wrapper-side only
21663+#endif
21664+
21665+#include "include/capi/cef_permission_request_capi.h"
21666+#include "include/cef_permission_request.h"
21667+#include "libcef_dll/ctocpp/ctocpp_ref_counted.h"
21668+
21669+// Wrap a C structure with a C++ class.
21670+// This class may be instantiated and accessed wrapper-side only.
21671+class CefGeolocationAcessCToCpp
21672+    : public CefCToCppRefCounted<CefGeolocationAcessCToCpp,
21673+                                 CefGeolocationAcess,
21674+                                 cef_geolocation_acess_t> {
21675+ public:
21676+  CefGeolocationAcessCToCpp();
21677+  virtual ~CefGeolocationAcessCToCpp();
21678+
21679+  // CefGeolocationAcess methods.
21680+  bool ContainOrigin(const CefString& origin) OVERRIDE;
21681+  bool IsOriginAccessEnabled(const CefString& origin) OVERRIDE;
21682+  void Enabled(const CefString& origin) OVERRIDE;
21683+  void Disabled(const CefString& origin) OVERRIDE;
21684+};
21685+
21686+#endif  // CEF_LIBCEF_DLL_CTOCPP_GEOLOCATION_ACESS_CTOCPP_H_
21687diff --git a/cef/libcef_dll/ctocpp/geolocation_permissions_ctocpp.cc b/cef/libcef_dll/ctocpp/geolocation_permissions_ctocpp.cc
21688new file mode 100644
21689index 0000000000..7dd9b0ff06
21690--- /dev/null
21691+++ b/cef/libcef_dll/ctocpp/geolocation_permissions_ctocpp.cc
21692@@ -0,0 +1,128 @@
21693+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21694+// reserved. Use of this source code is governed by a BSD-style license that
21695+// can be found in the LICENSE file.
21696+//
21697+// ---------------------------------------------------------------------------
21698+//
21699+// This file was generated by the CEF translator tool. If making changes by
21700+// hand only do so within the body of existing method and function
21701+// implementations. See the translator.README.txt file in the tools directory
21702+// for more information.
21703+//
21704+// $hash=73842333eb5449db43ec1be9bc603b2c40509ed8$
21705+//
21706+
21707+#include "libcef_dll/ctocpp/geolocation_permissions_ctocpp.h"
21708+#include "libcef_dll/shutdown_checker.h"
21709+
21710+// VIRTUAL METHODS - Body may be edited by hand.
21711+
21712+NO_SANITIZE("cfi-icall")
21713+bool CefGeolocationPermissionsCToCpp::ContainOrigin(const CefString& origin) {
21714+  shutdown_checker::AssertNotShutdown();
21715+
21716+  cef_geolocation_permissions_t* _struct = GetStruct();
21717+  if (CEF_MEMBER_MISSING(_struct, has_origin))
21718+    return false;
21719+
21720+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
21721+
21722+  // Verify param: origin; type: string_byref_const
21723+  DCHECK(!origin.empty());
21724+  if (origin.empty())
21725+    return false;
21726+
21727+  // Execute
21728+  int _retval = _struct->has_origin(_struct, origin.GetStruct());
21729+
21730+  // Return type: bool
21731+  return _retval ? true : false;
21732+}
21733+
21734+NO_SANITIZE("cfi-icall")
21735+bool CefGeolocationPermissionsCToCpp::IsOriginAccessEnabled(const CefString& origin) {
21736+  shutdown_checker::AssertNotShutdown();
21737+
21738+  cef_geolocation_permissions_t* _struct = GetStruct();
21739+  if (CEF_MEMBER_MISSING(_struct, is_origin_allowed))
21740+    return false;
21741+
21742+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
21743+
21744+  // Verify param: origin; type: string_byref_const
21745+  DCHECK(!origin.empty());
21746+  if (origin.empty())
21747+    return false;
21748+
21749+  // Execute
21750+  int _retval = _struct->is_origin_allowed(_struct, origin.GetStruct());
21751+
21752+  // Return type: bool
21753+  return _retval ? true : false;
21754+}
21755+
21756+NO_SANITIZE("cfi-icall")
21757+void CefGeolocationPermissionsCToCpp::Enabled(const CefString& origin) {
21758+  shutdown_checker::AssertNotShutdown();
21759+
21760+  cef_geolocation_permissions_t* _struct = GetStruct();
21761+  if (CEF_MEMBER_MISSING(_struct, allow))
21762+    return;
21763+
21764+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
21765+
21766+  // Verify param: origin; type: string_byref_const
21767+  DCHECK(!origin.empty());
21768+  if (origin.empty())
21769+    return;
21770+
21771+  // Execute
21772+  _struct->allow(_struct, origin.GetStruct());
21773+}
21774+
21775+NO_SANITIZE("cfi-icall")
21776+void CefGeolocationPermissionsCToCpp::Disabled(const CefString& origin) {
21777+  shutdown_checker::AssertNotShutdown();
21778+
21779+  cef_geolocation_permissions_t* _struct = GetStruct();
21780+  if (CEF_MEMBER_MISSING(_struct, deny))
21781+    return;
21782+
21783+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
21784+
21785+  // Verify param: origin; type: string_byref_const
21786+  DCHECK(!origin.empty());
21787+  if (origin.empty())
21788+    return;
21789+
21790+  // Execute
21791+  _struct->deny(_struct, origin.GetStruct());
21792+}
21793+
21794+// CONSTRUCTOR - Do not edit by hand.
21795+
21796+CefGeolocationPermissionsCToCpp::CefGeolocationPermissionsCToCpp() {}
21797+
21798+// DESTRUCTOR - Do not edit by hand.
21799+
21800+CefGeolocationPermissionsCToCpp::~CefGeolocationPermissionsCToCpp() {
21801+  shutdown_checker::AssertNotShutdown();
21802+}
21803+
21804+template <>
21805+cef_geolocation_permissions_t* CefCToCppRefCounted<
21806+    CefGeolocationPermissionsCToCpp,
21807+    CefGeolocationAcess,
21808+    cef_geolocation_permissions_t>::UnwrapDerived(CefWrapperType type,
21809+                                                  CefGeolocationAcess*
21810+                                                      c) {
21811+  NOTREACHED() << "Unexpected class type: " << type;
21812+  return nullptr;
21813+}
21814+
21815+template <>
21816+CefWrapperType
21817+    CefCToCppRefCounted<CefGeolocationPermissionsCToCpp,
21818+                        CefGeolocationAcess,
21819+                        cef_geolocation_permissions_t>::kWrapperType =
21820+        WT_GEOLOCATION_PERMISSIONS;
21821diff --git a/cef/libcef_dll/ctocpp/geolocation_permissions_ctocpp.h b/cef/libcef_dll/ctocpp/geolocation_permissions_ctocpp.h
21822new file mode 100644
21823index 0000000000..96d242166d
21824--- /dev/null
21825+++ b/cef/libcef_dll/ctocpp/geolocation_permissions_ctocpp.h
21826@@ -0,0 +1,44 @@
21827+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21828+// reserved. Use of this source code is governed by a BSD-style license that
21829+// can be found in the LICENSE file.
21830+//
21831+// ---------------------------------------------------------------------------
21832+//
21833+// This file was generated by the CEF translator tool. If making changes by
21834+// hand only do so within the body of existing method and function
21835+// implementations. See the translator.README.txt file in the tools directory
21836+// for more information.
21837+//
21838+// $hash=5f3afeee4027ff42444edd3ec1616f93ce318300$
21839+//
21840+
21841+#ifndef CEF_LIBCEF_DLL_CTOCPP_GEOLOCATION_PERMISSIONS_CTOCPP_H_
21842+#define CEF_LIBCEF_DLL_CTOCPP_GEOLOCATION_PERMISSIONS_CTOCPP_H_
21843+#pragma once
21844+
21845+#if !defined(WRAPPING_CEF_SHARED)
21846+#error This file can be included wrapper-side only
21847+#endif
21848+
21849+#include "include/capi/cef_permission_request_capi.h"
21850+#include "include/cef_permission_request.h"
21851+#include "libcef_dll/ctocpp/ctocpp_ref_counted.h"
21852+
21853+// Wrap a C structure with a C++ class.
21854+// This class may be instantiated and accessed wrapper-side only.
21855+class CefGeolocationPermissionsCToCpp
21856+    : public CefCToCppRefCounted<CefGeolocationPermissionsCToCpp,
21857+                                 CefGeolocationAcess,
21858+                                 cef_geolocation_permissions_t> {
21859+ public:
21860+  CefGeolocationPermissionsCToCpp();
21861+  virtual ~CefGeolocationPermissionsCToCpp();
21862+
21863+  // CefGeolocationAcess methods.
21864+  bool ContainOrigin(const CefString& origin) OVERRIDE;
21865+  bool IsOriginAccessEnabled(const CefString& origin) OVERRIDE;
21866+  void Enabled(const CefString& origin) OVERRIDE;
21867+  void Disabled(const CefString& origin) OVERRIDE;
21868+};
21869+
21870+#endif  // CEF_LIBCEF_DLL_CTOCPP_GEOLOCATION_PERMISSIONS_CTOCPP_H_
21871diff --git a/cef/libcef_dll/ctocpp/get_extension_resource_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/get_extension_resource_callback_ctocpp.cc
21872index 944cd1a97d..faee8d5127 100644
21873--- a/cef/libcef_dll/ctocpp/get_extension_resource_callback_ctocpp.cc
21874+++ b/cef/libcef_dll/ctocpp/get_extension_resource_callback_ctocpp.cc
21875@@ -1,4 +1,4 @@
21876-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21877+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21878 // reserved. Use of this source code is governed by a BSD-style license that
21879 // can be found in the LICENSE file.
21880 //
21881@@ -9,7 +9,7 @@
21882 // implementations. See the translator.README.txt file in the tools directory
21883 // for more information.
21884 //
21885-// $hash=63092d32e63d924b5988159ff2bc522c9f260628$
21886+// $hash=2747a6d847a7abbc8adcde347308ff7826918884$
21887 //
21888
21889 #include "libcef_dll/ctocpp/get_extension_resource_callback_ctocpp.h"
21890diff --git a/cef/libcef_dll/ctocpp/get_extension_resource_callback_ctocpp.h b/cef/libcef_dll/ctocpp/get_extension_resource_callback_ctocpp.h
21891index b95acef386..e77b25bcc5 100644
21892--- a/cef/libcef_dll/ctocpp/get_extension_resource_callback_ctocpp.h
21893+++ b/cef/libcef_dll/ctocpp/get_extension_resource_callback_ctocpp.h
21894@@ -1,4 +1,4 @@
21895-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21896+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21897 // reserved. Use of this source code is governed by a BSD-style license that
21898 // can be found in the LICENSE file.
21899 //
21900@@ -9,7 +9,7 @@
21901 // implementations. See the translator.README.txt file in the tools directory
21902 // for more information.
21903 //
21904-// $hash=1e4ced3624db151e599c0928a7a87211d5dd8d57$
21905+// $hash=44da630a6ed47bd22d00d86535bbd9b1bf4dafec$
21906 //
21907
21908 #ifndef CEF_LIBCEF_DLL_CTOCPP_GET_EXTENSION_RESOURCE_CALLBACK_CTOCPP_H_
21909diff --git a/cef/libcef_dll/ctocpp/image_ctocpp.cc b/cef/libcef_dll/ctocpp/image_ctocpp.cc
21910index a7f6fa8b1a..b766c79cd0 100644
21911--- a/cef/libcef_dll/ctocpp/image_ctocpp.cc
21912+++ b/cef/libcef_dll/ctocpp/image_ctocpp.cc
21913@@ -1,4 +1,4 @@
21914-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21915+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21916 // reserved. Use of this source code is governed by a BSD-style license that
21917 // can be found in the LICENSE file.
21918 //
21919@@ -9,7 +9,7 @@
21920 // implementations. See the translator.README.txt file in the tools directory
21921 // for more information.
21922 //
21923-// $hash=d15699feba25e9efccdef1fc4d5f66d214aa9169$
21924+// $hash=33aeaefa103664f5cead6898d2f957d8a9a97a92$
21925 //
21926
21927 #include "libcef_dll/ctocpp/image_ctocpp.h"
21928diff --git a/cef/libcef_dll/ctocpp/image_ctocpp.h b/cef/libcef_dll/ctocpp/image_ctocpp.h
21929index 699a1286ea..53e33373ba 100644
21930--- a/cef/libcef_dll/ctocpp/image_ctocpp.h
21931+++ b/cef/libcef_dll/ctocpp/image_ctocpp.h
21932@@ -1,4 +1,4 @@
21933-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
21934+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21935 // reserved. Use of this source code is governed by a BSD-style license that
21936 // can be found in the LICENSE file.
21937 //
21938@@ -9,7 +9,7 @@
21939 // implementations. See the translator.README.txt file in the tools directory
21940 // for more information.
21941 //
21942-// $hash=417397bf09d546377dfa4c067d5c569b0348abff$
21943+// $hash=1c7c9cf8d572383333b3938c8c54e7a8a1437bdd$
21944 //
21945
21946 #ifndef CEF_LIBCEF_DLL_CTOCPP_IMAGE_CTOCPP_H_
21947diff --git a/cef/libcef_dll/ctocpp/java_script_result_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/java_script_result_callback_ctocpp.cc
21948new file mode 100644
21949index 0000000000..7e7ca331e7
21950--- /dev/null
21951+++ b/cef/libcef_dll/ctocpp/java_script_result_callback_ctocpp.cc
21952@@ -0,0 +1,65 @@
21953+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
21954+// reserved. Use of this source code is governed by a BSD-style license that
21955+// can be found in the LICENSE file.
21956+//
21957+// ---------------------------------------------------------------------------
21958+//
21959+// This file was generated by the CEF translator tool. If making changes by
21960+// hand only do so within the body of existing method and function
21961+// implementations. See the translator.README.txt file in the tools directory
21962+// for more information.
21963+//
21964+// $hash=d54225cb81f976412f5924f0342241e5e1c15604$
21965+//
21966+
21967+#include "libcef_dll/ctocpp/java_script_result_callback_ctocpp.h"
21968+#include "libcef_dll/shutdown_checker.h"
21969+
21970+// VIRTUAL METHODS - Body may be edited by hand.
21971+
21972+NO_SANITIZE("cfi-icall")
21973+void CefJavaScriptResultCallbackCToCpp::OnJavaScriptExeResult(
21974+    const CefString& result) {
21975+  shutdown_checker::AssertNotShutdown();
21976+
21977+  cef_java_script_result_callback_t* _struct = GetStruct();
21978+  if (CEF_MEMBER_MISSING(_struct, on_java_script_exe_result))
21979+    return;
21980+
21981+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
21982+
21983+  // Verify param: result; type: string_byref_const
21984+  DCHECK(!result.empty());
21985+  if (result.empty())
21986+    return;
21987+
21988+  // Execute
21989+  _struct->on_java_script_exe_result(_struct, result.GetStruct());
21990+}
21991+
21992+// CONSTRUCTOR - Do not edit by hand.
21993+
21994+CefJavaScriptResultCallbackCToCpp::CefJavaScriptResultCallbackCToCpp() {}
21995+
21996+// DESTRUCTOR - Do not edit by hand.
21997+
21998+CefJavaScriptResultCallbackCToCpp::~CefJavaScriptResultCallbackCToCpp() {
21999+  shutdown_checker::AssertNotShutdown();
22000+}
22001+
22002+template <>
22003+cef_java_script_result_callback_t*
22004+CefCToCppRefCounted<CefJavaScriptResultCallbackCToCpp,
22005+                    CefJavaScriptResultCallback,
22006+                    cef_java_script_result_callback_t>::
22007+    UnwrapDerived(CefWrapperType type, CefJavaScriptResultCallback* c) {
22008+  NOTREACHED() << "Unexpected class type: " << type;
22009+  return nullptr;
22010+}
22011+
22012+template <>
22013+CefWrapperType
22014+    CefCToCppRefCounted<CefJavaScriptResultCallbackCToCpp,
22015+                        CefJavaScriptResultCallback,
22016+                        cef_java_script_result_callback_t>::kWrapperType =
22017+        WT_JAVA_SCRIPT_RESULT_CALLBACK;
22018diff --git a/cef/libcef_dll/ctocpp/java_script_result_callback_ctocpp.h b/cef/libcef_dll/ctocpp/java_script_result_callback_ctocpp.h
22019new file mode 100644
22020index 0000000000..b09edef38a
22021--- /dev/null
22022+++ b/cef/libcef_dll/ctocpp/java_script_result_callback_ctocpp.h
22023@@ -0,0 +1,43 @@
22024+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22025+// reserved. Use of this source code is governed by a BSD-style license that
22026+// can be found in the LICENSE file.
22027+//
22028+// ---------------------------------------------------------------------------
22029+//
22030+// This file was generated by the CEF translator tool. If making changes by
22031+// hand only do so within the body of existing method and function
22032+// implementations. See the translator.README.txt file in the tools directory
22033+// for more information.
22034+//
22035+// $hash=2e761fc082e89fe46754e498234c96e873d519dc$
22036+//
22037+
22038+#ifndef CEF_LIBCEF_DLL_CTOCPP_JAVA_SCRIPT_RESULT_CALLBACK_CTOCPP_H_
22039+#define CEF_LIBCEF_DLL_CTOCPP_JAVA_SCRIPT_RESULT_CALLBACK_CTOCPP_H_
22040+#pragma once
22041+
22042+#if !defined(BUILDING_CEF_SHARED)
22043+#error This file can be included DLL-side only
22044+#endif
22045+
22046+#include "include/capi/cef_browser_capi.h"
22047+#include "include/capi/cef_client_capi.h"
22048+#include "include/cef_browser.h"
22049+#include "include/cef_client.h"
22050+#include "libcef_dll/ctocpp/ctocpp_ref_counted.h"
22051+
22052+// Wrap a C structure with a C++ class.
22053+// This class may be instantiated and accessed DLL-side only.
22054+class CefJavaScriptResultCallbackCToCpp
22055+    : public CefCToCppRefCounted<CefJavaScriptResultCallbackCToCpp,
22056+                                 CefJavaScriptResultCallback,
22057+                                 cef_java_script_result_callback_t> {
22058+ public:
22059+  CefJavaScriptResultCallbackCToCpp();
22060+  virtual ~CefJavaScriptResultCallbackCToCpp();
22061+
22062+  // CefJavaScriptResultCallback methods.
22063+  void OnJavaScriptExeResult(const CefString& result) override;
22064+};
22065+
22066+#endif  // CEF_LIBCEF_DLL_CTOCPP_JAVA_SCRIPT_RESULT_CALLBACK_CTOCPP_H_
22067diff --git a/cef/libcef_dll/ctocpp/jsdialog_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/jsdialog_callback_ctocpp.cc
22068index dce51979e4..ad5341aba0 100644
22069--- a/cef/libcef_dll/ctocpp/jsdialog_callback_ctocpp.cc
22070+++ b/cef/libcef_dll/ctocpp/jsdialog_callback_ctocpp.cc
22071@@ -1,4 +1,4 @@
22072-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22073+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22074 // reserved. Use of this source code is governed by a BSD-style license that
22075 // can be found in the LICENSE file.
22076 //
22077@@ -9,7 +9,7 @@
22078 // implementations. See the translator.README.txt file in the tools directory
22079 // for more information.
22080 //
22081-// $hash=7d7d71b2dfcf9b0ec721b2866bc6dd12c1738680$
22082+// $hash=8fa9cd400d5a9ecce87183cdbbee8673845b2228$
22083 //
22084
22085 #include "libcef_dll/ctocpp/jsdialog_callback_ctocpp.h"
22086diff --git a/cef/libcef_dll/ctocpp/jsdialog_callback_ctocpp.h b/cef/libcef_dll/ctocpp/jsdialog_callback_ctocpp.h
22087index bcce53f1dc..87c8897c35 100644
22088--- a/cef/libcef_dll/ctocpp/jsdialog_callback_ctocpp.h
22089+++ b/cef/libcef_dll/ctocpp/jsdialog_callback_ctocpp.h
22090@@ -1,4 +1,4 @@
22091-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22092+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22093 // reserved. Use of this source code is governed by a BSD-style license that
22094 // can be found in the LICENSE file.
22095 //
22096@@ -9,7 +9,7 @@
22097 // implementations. See the translator.README.txt file in the tools directory
22098 // for more information.
22099 //
22100-// $hash=036ba78ec1797ee75002a5562fd0b0b97dff7392$
22101+// $hash=8f7c82772ef53e16bb7ee2bd9eeb0b9c6753a9d0$
22102 //
22103
22104 #ifndef CEF_LIBCEF_DLL_CTOCPP_JSDIALOG_CALLBACK_CTOCPP_H_
22105diff --git a/cef/libcef_dll/ctocpp/jsdialog_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/jsdialog_handler_ctocpp.cc
22106index e6ed36dcc8..5293e9098d 100644
22107--- a/cef/libcef_dll/ctocpp/jsdialog_handler_ctocpp.cc
22108+++ b/cef/libcef_dll/ctocpp/jsdialog_handler_ctocpp.cc
22109@@ -1,4 +1,4 @@
22110-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22111+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22112 // reserved. Use of this source code is governed by a BSD-style license that
22113 // can be found in the LICENSE file.
22114 //
22115@@ -9,7 +9,7 @@
22116 // implementations. See the translator.README.txt file in the tools directory
22117 // for more information.
22118 //
22119-// $hash=7fa5b6402a5933b42f28ae3d3e3af21bd7a14f12$
22120+// $hash=cf3f4ea060216018445b03ed1626f0698c01839b$
22121 //
22122
22123 #include "libcef_dll/ctocpp/jsdialog_handler_ctocpp.h"
22124diff --git a/cef/libcef_dll/ctocpp/jsdialog_handler_ctocpp.h b/cef/libcef_dll/ctocpp/jsdialog_handler_ctocpp.h
22125index 907a65d638..24f690eafa 100644
22126--- a/cef/libcef_dll/ctocpp/jsdialog_handler_ctocpp.h
22127+++ b/cef/libcef_dll/ctocpp/jsdialog_handler_ctocpp.h
22128@@ -1,4 +1,4 @@
22129-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22130+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22131 // reserved. Use of this source code is governed by a BSD-style license that
22132 // can be found in the LICENSE file.
22133 //
22134@@ -9,7 +9,7 @@
22135 // implementations. See the translator.README.txt file in the tools directory
22136 // for more information.
22137 //
22138-// $hash=0982628dad4b4542003a6932c9bbca1b8bda438b$
22139+// $hash=d486b4a8044df978ea21be7c6a48841ea48d7ad7$
22140 //
22141
22142 #ifndef CEF_LIBCEF_DLL_CTOCPP_JSDIALOG_HANDLER_CTOCPP_H_
22143diff --git a/cef/libcef_dll/ctocpp/keyboard_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/keyboard_handler_ctocpp.cc
22144index 8d1d20f14e..c9c167cbcc 100644
22145--- a/cef/libcef_dll/ctocpp/keyboard_handler_ctocpp.cc
22146+++ b/cef/libcef_dll/ctocpp/keyboard_handler_ctocpp.cc
22147@@ -1,4 +1,4 @@
22148-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22149+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22150 // reserved. Use of this source code is governed by a BSD-style license that
22151 // can be found in the LICENSE file.
22152 //
22153@@ -9,7 +9,7 @@
22154 // implementations. See the translator.README.txt file in the tools directory
22155 // for more information.
22156 //
22157-// $hash=8b801f58d72582082384b6f712aaebc96d9e2d53$
22158+// $hash=d5ba873aeb2b734e753d47420bbe10e290e8658d$
22159 //
22160
22161 #include "libcef_dll/ctocpp/keyboard_handler_ctocpp.h"
22162diff --git a/cef/libcef_dll/ctocpp/keyboard_handler_ctocpp.h b/cef/libcef_dll/ctocpp/keyboard_handler_ctocpp.h
22163index b078dae840..48818cf815 100644
22164--- a/cef/libcef_dll/ctocpp/keyboard_handler_ctocpp.h
22165+++ b/cef/libcef_dll/ctocpp/keyboard_handler_ctocpp.h
22166@@ -1,4 +1,4 @@
22167-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22168+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22169 // reserved. Use of this source code is governed by a BSD-style license that
22170 // can be found in the LICENSE file.
22171 //
22172@@ -9,7 +9,7 @@
22173 // implementations. See the translator.README.txt file in the tools directory
22174 // for more information.
22175 //
22176-// $hash=c8c04ba8d1a0cce53417bf5824189288e0c38840$
22177+// $hash=ab70636733b9287db1e87f11f8c73610afa35337$
22178 //
22179
22180 #ifndef CEF_LIBCEF_DLL_CTOCPP_KEYBOARD_HANDLER_CTOCPP_H_
22181diff --git a/cef/libcef_dll/ctocpp/life_span_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/life_span_handler_ctocpp.cc
22182index 59c2378aca..7a94a3483c 100644
22183--- a/cef/libcef_dll/ctocpp/life_span_handler_ctocpp.cc
22184+++ b/cef/libcef_dll/ctocpp/life_span_handler_ctocpp.cc
22185@@ -1,4 +1,4 @@
22186-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22187+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22188 // reserved. Use of this source code is governed by a BSD-style license that
22189 // can be found in the LICENSE file.
22190 //
22191@@ -9,7 +9,7 @@
22192 // implementations. See the translator.README.txt file in the tools directory
22193 // for more information.
22194 //
22195-// $hash=0540cd6df681993544511bbd5dd8c8a40e0f8b9e$
22196+// $hash=374e065650a2c8fb36590542723d8e171f5de9ad$
22197 //
22198
22199 #include "libcef_dll/ctocpp/life_span_handler_ctocpp.h"
22200diff --git a/cef/libcef_dll/ctocpp/life_span_handler_ctocpp.h b/cef/libcef_dll/ctocpp/life_span_handler_ctocpp.h
22201index b014708d3b..da2893672d 100644
22202--- a/cef/libcef_dll/ctocpp/life_span_handler_ctocpp.h
22203+++ b/cef/libcef_dll/ctocpp/life_span_handler_ctocpp.h
22204@@ -1,4 +1,4 @@
22205-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22206+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22207 // reserved. Use of this source code is governed by a BSD-style license that
22208 // can be found in the LICENSE file.
22209 //
22210@@ -9,7 +9,7 @@
22211 // implementations. See the translator.README.txt file in the tools directory
22212 // for more information.
22213 //
22214-// $hash=7d7057b99a886fda1aefd86fe66591dc7f9f84f3$
22215+// $hash=0061dae2023d2285c9f3e3d2bd9bfa4603208535$
22216 //
22217
22218 #ifndef CEF_LIBCEF_DLL_CTOCPP_LIFE_SPAN_HANDLER_CTOCPP_H_
22219diff --git a/cef/libcef_dll/ctocpp/list_value_ctocpp.cc b/cef/libcef_dll/ctocpp/list_value_ctocpp.cc
22220index 72d0193dd2..9194d1da62 100644
22221--- a/cef/libcef_dll/ctocpp/list_value_ctocpp.cc
22222+++ b/cef/libcef_dll/ctocpp/list_value_ctocpp.cc
22223@@ -1,4 +1,4 @@
22224-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22225+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22226 // reserved. Use of this source code is governed by a BSD-style license that
22227 // can be found in the LICENSE file.
22228 //
22229@@ -9,7 +9,7 @@
22230 // implementations. See the translator.README.txt file in the tools directory
22231 // for more information.
22232 //
22233-// $hash=76b9241cf4cdceea6408f9404ccef0690e83e26f$
22234+// $hash=93f45c1e39dc2ba72a6cb44bc3d762f3870f2ef2$
22235 //
22236
22237 #include "libcef_dll/ctocpp/list_value_ctocpp.h"
22238diff --git a/cef/libcef_dll/ctocpp/list_value_ctocpp.h b/cef/libcef_dll/ctocpp/list_value_ctocpp.h
22239index e2d0e4fbe2..747a53dcf5 100644
22240--- a/cef/libcef_dll/ctocpp/list_value_ctocpp.h
22241+++ b/cef/libcef_dll/ctocpp/list_value_ctocpp.h
22242@@ -1,4 +1,4 @@
22243-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22244+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22245 // reserved. Use of this source code is governed by a BSD-style license that
22246 // can be found in the LICENSE file.
22247 //
22248@@ -9,7 +9,7 @@
22249 // implementations. See the translator.README.txt file in the tools directory
22250 // for more information.
22251 //
22252-// $hash=643127d0c9772dbab1980c797ceef47a12f00f48$
22253+// $hash=12ac5ebafd2e805008d3ed0f0b4ea562029d8ea3$
22254 //
22255
22256 #ifndef CEF_LIBCEF_DLL_CTOCPP_LIST_VALUE_CTOCPP_H_
22257diff --git a/cef/libcef_dll/ctocpp/load_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/load_handler_ctocpp.cc
22258index d81edc48e0..ea239aadf4 100644
22259--- a/cef/libcef_dll/ctocpp/load_handler_ctocpp.cc
22260+++ b/cef/libcef_dll/ctocpp/load_handler_ctocpp.cc
22261@@ -1,4 +1,4 @@
22262-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22263+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22264 // reserved. Use of this source code is governed by a BSD-style license that
22265 // can be found in the LICENSE file.
22266 //
22267@@ -9,12 +9,14 @@
22268 // implementations. See the translator.README.txt file in the tools directory
22269 // for more information.
22270 //
22271-// $hash=28e44ecfd603542d959a55d20af2ed8991b3e06d$
22272+// $hash=a815207886f2b474bff70f4f988a4407bcb3d42a$
22273 //
22274
22275 #include "libcef_dll/ctocpp/load_handler_ctocpp.h"
22276 #include "libcef_dll/cpptoc/browser_cpptoc.h"
22277 #include "libcef_dll/cpptoc/frame_cpptoc.h"
22278+#include "libcef_dll/cpptoc/request_cpptoc.h"
22279+#include "libcef_dll/cpptoc/response_cpptoc.h"
22280 #include "libcef_dll/shutdown_checker.h"
22281
22282 // VIRTUAL METHODS - Body may be edited by hand.
22283@@ -128,6 +130,63 @@ void CefLoadHandlerCToCpp::OnLoadError(CefRefPtr<CefBrowser> browser,
22284                          errorText.GetStruct(), failedUrl.GetStruct());
22285 }
22286
22287+NO_SANITIZE("cfi-icall")
22288+void CefLoadHandlerCToCpp::OnLoadErrorWithRequest(CefRefPtr<CefRequest> request,
22289+                                                  bool is_main_frame,
22290+                                                  bool has_user_gesture,
22291+                                                  int error_code,
22292+                                                  const CefString& error_text) {
22293+  shutdown_checker::AssertNotShutdown();
22294+
22295+  cef_load_handler_t* _struct = GetStruct();
22296+  if (CEF_MEMBER_MISSING(_struct, on_load_error_with_request))
22297+    return;
22298+
22299+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
22300+
22301+  // Verify param: request; type: refptr_diff
22302+  DCHECK(request.get());
22303+  if (!request.get())
22304+    return;
22305+  // Verify param: error_text; type: string_byref_const
22306+  DCHECK(!error_text.empty());
22307+  if (error_text.empty())
22308+    return;
22309+
22310+  // Execute
22311+  _struct->on_load_error_with_request(_struct, CefRequestCppToC::Wrap(request),
22312+                                      is_main_frame, has_user_gesture,
22313+                                      error_code, error_text.GetStruct());
22314+}
22315+
22316+NO_SANITIZE("cfi-icall")
22317+void CefLoadHandlerCToCpp::OnHttpError(CefRefPtr<CefRequest> request,
22318+                                       bool is_main_frame,
22319+                                       bool has_user_gesture,
22320+                                       CefRefPtr<CefResponse> response) {
22321+  shutdown_checker::AssertNotShutdown();
22322+
22323+  cef_load_handler_t* _struct = GetStruct();
22324+  if (CEF_MEMBER_MISSING(_struct, on_http_error))
22325+    return;
22326+
22327+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
22328+
22329+  // Verify param: request; type: refptr_diff
22330+  DCHECK(request.get());
22331+  if (!request.get())
22332+    return;
22333+  // Verify param: response; type: refptr_diff
22334+  DCHECK(response.get());
22335+  if (!response.get())
22336+    return;
22337+
22338+  // Execute
22339+  _struct->on_http_error(_struct, CefRequestCppToC::Wrap(request),
22340+                         is_main_frame, has_user_gesture,
22341+                         CefResponseCppToC::Wrap(response));
22342+}
22343+
22344 // CONSTRUCTOR - Do not edit by hand.
22345
22346 CefLoadHandlerCToCpp::CefLoadHandlerCToCpp() {}
22347diff --git a/cef/libcef_dll/ctocpp/load_handler_ctocpp.h b/cef/libcef_dll/ctocpp/load_handler_ctocpp.h
22348index 4bebc8723c..0ef91fc464 100644
22349--- a/cef/libcef_dll/ctocpp/load_handler_ctocpp.h
22350+++ b/cef/libcef_dll/ctocpp/load_handler_ctocpp.h
22351@@ -1,4 +1,4 @@
22352-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22353+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22354 // reserved. Use of this source code is governed by a BSD-style license that
22355 // can be found in the LICENSE file.
22356 //
22357@@ -9,7 +9,7 @@
22358 // implementations. See the translator.README.txt file in the tools directory
22359 // for more information.
22360 //
22361-// $hash=1f37820ecbaa80912b6d5659cc3d165a524eba4f$
22362+// $hash=dcaaaa3afd30e1e4be34e0d22cedacddc71e41d0$
22363 //
22364
22365 #ifndef CEF_LIBCEF_DLL_CTOCPP_LOAD_HANDLER_CTOCPP_H_
22366@@ -49,6 +49,15 @@ class CefLoadHandlerCToCpp : public CefCToCppRefCounted<CefLoadHandlerCToCpp,
22367                    ErrorCode errorCode,
22368                    const CefString& errorText,
22369                    const CefString& failedUrl) override;
22370+  void OnLoadErrorWithRequest(CefRefPtr<CefRequest> request,
22371+                              bool is_main_frame,
22372+                              bool has_user_gesture,
22373+                              int error_code,
22374+                              const CefString& error_text) override;
22375+  void OnHttpError(CefRefPtr<CefRequest> request,
22376+                   bool is_main_frame,
22377+                   bool has_user_gesture,
22378+                   CefRefPtr<CefResponse> response) override;
22379 };
22380
22381 #endif  // CEF_LIBCEF_DLL_CTOCPP_LOAD_HANDLER_CTOCPP_H_
22382diff --git a/cef/libcef_dll/ctocpp/media_observer_ctocpp.cc b/cef/libcef_dll/ctocpp/media_observer_ctocpp.cc
22383index d3bff26989..46d7c96f54 100644
22384--- a/cef/libcef_dll/ctocpp/media_observer_ctocpp.cc
22385+++ b/cef/libcef_dll/ctocpp/media_observer_ctocpp.cc
22386@@ -1,4 +1,4 @@
22387-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22388+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22389 // reserved. Use of this source code is governed by a BSD-style license that
22390 // can be found in the LICENSE file.
22391 //
22392@@ -9,7 +9,7 @@
22393 // implementations. See the translator.README.txt file in the tools directory
22394 // for more information.
22395 //
22396-// $hash=0b4d805c7313e553fe3b0f47905810172d666df7$
22397+// $hash=53afe2dd1a5d413790a04a6d622bf0175302da00$
22398 //
22399
22400 #include "libcef_dll/ctocpp/media_observer_ctocpp.h"
22401diff --git a/cef/libcef_dll/ctocpp/media_observer_ctocpp.h b/cef/libcef_dll/ctocpp/media_observer_ctocpp.h
22402index ef40b9226c..5e95fc5d76 100644
22403--- a/cef/libcef_dll/ctocpp/media_observer_ctocpp.h
22404+++ b/cef/libcef_dll/ctocpp/media_observer_ctocpp.h
22405@@ -1,4 +1,4 @@
22406-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22407+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22408 // reserved. Use of this source code is governed by a BSD-style license that
22409 // can be found in the LICENSE file.
22410 //
22411@@ -9,7 +9,7 @@
22412 // implementations. See the translator.README.txt file in the tools directory
22413 // for more information.
22414 //
22415-// $hash=39f0cc0430368e97f71cf2096b5e76e70a2445e5$
22416+// $hash=2ad630d884be7968333098308a5bb25c608a037e$
22417 //
22418
22419 #ifndef CEF_LIBCEF_DLL_CTOCPP_MEDIA_OBSERVER_CTOCPP_H_
22420diff --git a/cef/libcef_dll/ctocpp/media_route_create_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/media_route_create_callback_ctocpp.cc
22421index d5b844129f..a2db7997ff 100644
22422--- a/cef/libcef_dll/ctocpp/media_route_create_callback_ctocpp.cc
22423+++ b/cef/libcef_dll/ctocpp/media_route_create_callback_ctocpp.cc
22424@@ -1,4 +1,4 @@
22425-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22426+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22427 // reserved. Use of this source code is governed by a BSD-style license that
22428 // can be found in the LICENSE file.
22429 //
22430@@ -9,7 +9,7 @@
22431 // implementations. See the translator.README.txt file in the tools directory
22432 // for more information.
22433 //
22434-// $hash=ef5393916b6e3a97556d6d1e8c7b799a12f53f7b$
22435+// $hash=7766e19198313fadc94a2f99f5869a33b0c3069c$
22436 //
22437
22438 #include "libcef_dll/ctocpp/media_route_create_callback_ctocpp.h"
22439diff --git a/cef/libcef_dll/ctocpp/media_route_create_callback_ctocpp.h b/cef/libcef_dll/ctocpp/media_route_create_callback_ctocpp.h
22440index 78c837c757..5174c0260a 100644
22441--- a/cef/libcef_dll/ctocpp/media_route_create_callback_ctocpp.h
22442+++ b/cef/libcef_dll/ctocpp/media_route_create_callback_ctocpp.h
22443@@ -1,4 +1,4 @@
22444-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22445+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22446 // reserved. Use of this source code is governed by a BSD-style license that
22447 // can be found in the LICENSE file.
22448 //
22449@@ -9,7 +9,7 @@
22450 // implementations. See the translator.README.txt file in the tools directory
22451 // for more information.
22452 //
22453-// $hash=a8a6fac342156f3c8a2b6b0c9e6ecbcfed456334$
22454+// $hash=567434633bea7215a9cce6591342116152136320$
22455 //
22456
22457 #ifndef CEF_LIBCEF_DLL_CTOCPP_MEDIA_ROUTE_CREATE_CALLBACK_CTOCPP_H_
22458diff --git a/cef/libcef_dll/ctocpp/media_route_ctocpp.cc b/cef/libcef_dll/ctocpp/media_route_ctocpp.cc
22459index ccde1e2c3a..570931251d 100644
22460--- a/cef/libcef_dll/ctocpp/media_route_ctocpp.cc
22461+++ b/cef/libcef_dll/ctocpp/media_route_ctocpp.cc
22462@@ -1,4 +1,4 @@
22463-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22464+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22465 // reserved. Use of this source code is governed by a BSD-style license that
22466 // can be found in the LICENSE file.
22467 //
22468@@ -9,7 +9,7 @@
22469 // implementations. See the translator.README.txt file in the tools directory
22470 // for more information.
22471 //
22472-// $hash=1491fa52e0a88044e5902809fcc6e56da42f3216$
22473+// $hash=3df118413888e04f3e10121c80e68014de545462$
22474 //
22475
22476 #include "libcef_dll/ctocpp/media_route_ctocpp.h"
22477diff --git a/cef/libcef_dll/ctocpp/media_route_ctocpp.h b/cef/libcef_dll/ctocpp/media_route_ctocpp.h
22478index 036d7fb9de..c0d26ceb7d 100644
22479--- a/cef/libcef_dll/ctocpp/media_route_ctocpp.h
22480+++ b/cef/libcef_dll/ctocpp/media_route_ctocpp.h
22481@@ -1,4 +1,4 @@
22482-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22483+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22484 // reserved. Use of this source code is governed by a BSD-style license that
22485 // can be found in the LICENSE file.
22486 //
22487@@ -9,7 +9,7 @@
22488 // implementations. See the translator.README.txt file in the tools directory
22489 // for more information.
22490 //
22491-// $hash=2332af38a85b938ce097ee671f957fa20622004e$
22492+// $hash=7c90b25cbcf30d260f705680de21e3a114af7642$
22493 //
22494
22495 #ifndef CEF_LIBCEF_DLL_CTOCPP_MEDIA_ROUTE_CTOCPP_H_
22496diff --git a/cef/libcef_dll/ctocpp/media_router_ctocpp.cc b/cef/libcef_dll/ctocpp/media_router_ctocpp.cc
22497index 51e76b58fb..fe3aa2fb72 100644
22498--- a/cef/libcef_dll/ctocpp/media_router_ctocpp.cc
22499+++ b/cef/libcef_dll/ctocpp/media_router_ctocpp.cc
22500@@ -1,4 +1,4 @@
22501-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22502+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22503 // reserved. Use of this source code is governed by a BSD-style license that
22504 // can be found in the LICENSE file.
22505 //
22506@@ -9,7 +9,7 @@
22507 // implementations. See the translator.README.txt file in the tools directory
22508 // for more information.
22509 //
22510-// $hash=8e7b2e3e8124ede620b8a04116656550949f89f1$
22511+// $hash=33a691883b3956a4e2fa2937ab8dc42dc80d78c8$
22512 //
22513
22514 #include "libcef_dll/ctocpp/media_router_ctocpp.h"
22515diff --git a/cef/libcef_dll/ctocpp/media_router_ctocpp.h b/cef/libcef_dll/ctocpp/media_router_ctocpp.h
22516index c10562496b..ba12ab31a2 100644
22517--- a/cef/libcef_dll/ctocpp/media_router_ctocpp.h
22518+++ b/cef/libcef_dll/ctocpp/media_router_ctocpp.h
22519@@ -1,4 +1,4 @@
22520-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22521+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22522 // reserved. Use of this source code is governed by a BSD-style license that
22523 // can be found in the LICENSE file.
22524 //
22525@@ -9,7 +9,7 @@
22526 // implementations. See the translator.README.txt file in the tools directory
22527 // for more information.
22528 //
22529-// $hash=f17d39aa48d464eddc04143796492dd36563f773$
22530+// $hash=65b2a9af763c644cc0444314ef63b0c98c7e1c98$
22531 //
22532
22533 #ifndef CEF_LIBCEF_DLL_CTOCPP_MEDIA_ROUTER_CTOCPP_H_
22534diff --git a/cef/libcef_dll/ctocpp/media_sink_ctocpp.cc b/cef/libcef_dll/ctocpp/media_sink_ctocpp.cc
22535index e5d4fa9811..afd0dd2924 100644
22536--- a/cef/libcef_dll/ctocpp/media_sink_ctocpp.cc
22537+++ b/cef/libcef_dll/ctocpp/media_sink_ctocpp.cc
22538@@ -1,4 +1,4 @@
22539-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22540+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22541 // reserved. Use of this source code is governed by a BSD-style license that
22542 // can be found in the LICENSE file.
22543 //
22544@@ -9,7 +9,7 @@
22545 // implementations. See the translator.README.txt file in the tools directory
22546 // for more information.
22547 //
22548-// $hash=50a71dcdcaa9669a6ac927e5e555266fcadb6be3$
22549+// $hash=01d0b01e291c90ceba7c416ff9dd56c10eb46f3b$
22550 //
22551
22552 #include "libcef_dll/ctocpp/media_sink_ctocpp.h"
22553diff --git a/cef/libcef_dll/ctocpp/media_sink_ctocpp.h b/cef/libcef_dll/ctocpp/media_sink_ctocpp.h
22554index 909adabc67..2779315282 100644
22555--- a/cef/libcef_dll/ctocpp/media_sink_ctocpp.h
22556+++ b/cef/libcef_dll/ctocpp/media_sink_ctocpp.h
22557@@ -1,4 +1,4 @@
22558-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22559+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22560 // reserved. Use of this source code is governed by a BSD-style license that
22561 // can be found in the LICENSE file.
22562 //
22563@@ -9,7 +9,7 @@
22564 // implementations. See the translator.README.txt file in the tools directory
22565 // for more information.
22566 //
22567-// $hash=cd0189f46038a0f941bfd592127ce29866257b40$
22568+// $hash=1e9ba43e9c736e58e0ec49687408d7e44253f42a$
22569 //
22570
22571 #ifndef CEF_LIBCEF_DLL_CTOCPP_MEDIA_SINK_CTOCPP_H_
22572diff --git a/cef/libcef_dll/ctocpp/media_sink_device_info_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/media_sink_device_info_callback_ctocpp.cc
22573index 05f621e8d4..00a6de90ec 100644
22574--- a/cef/libcef_dll/ctocpp/media_sink_device_info_callback_ctocpp.cc
22575+++ b/cef/libcef_dll/ctocpp/media_sink_device_info_callback_ctocpp.cc
22576@@ -1,4 +1,4 @@
22577-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22578+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22579 // reserved. Use of this source code is governed by a BSD-style license that
22580 // can be found in the LICENSE file.
22581 //
22582@@ -9,7 +9,7 @@
22583 // implementations. See the translator.README.txt file in the tools directory
22584 // for more information.
22585 //
22586-// $hash=f04f1f70369822fc963af542e03e95db02d3c0de$
22587+// $hash=9664002969db52fb75ab4f02ecd72aa7c4473115$
22588 //
22589
22590 #include "libcef_dll/ctocpp/media_sink_device_info_callback_ctocpp.h"
22591diff --git a/cef/libcef_dll/ctocpp/media_sink_device_info_callback_ctocpp.h b/cef/libcef_dll/ctocpp/media_sink_device_info_callback_ctocpp.h
22592index 631d2ffab2..89104bccbb 100644
22593--- a/cef/libcef_dll/ctocpp/media_sink_device_info_callback_ctocpp.h
22594+++ b/cef/libcef_dll/ctocpp/media_sink_device_info_callback_ctocpp.h
22595@@ -1,4 +1,4 @@
22596-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22597+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22598 // reserved. Use of this source code is governed by a BSD-style license that
22599 // can be found in the LICENSE file.
22600 //
22601@@ -9,7 +9,7 @@
22602 // implementations. See the translator.README.txt file in the tools directory
22603 // for more information.
22604 //
22605-// $hash=fadb149e3874c78219a545fa3c373515e9ef8a0d$
22606+// $hash=7d9031bd579a9d4b9ee12b54d44ab0eb4aad62c3$
22607 //
22608
22609 #ifndef CEF_LIBCEF_DLL_CTOCPP_MEDIA_SINK_DEVICE_INFO_CALLBACK_CTOCPP_H_
22610diff --git a/cef/libcef_dll/ctocpp/media_source_ctocpp.cc b/cef/libcef_dll/ctocpp/media_source_ctocpp.cc
22611index c499eea012..75896db6f2 100644
22612--- a/cef/libcef_dll/ctocpp/media_source_ctocpp.cc
22613+++ b/cef/libcef_dll/ctocpp/media_source_ctocpp.cc
22614@@ -1,4 +1,4 @@
22615-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22616+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22617 // reserved. Use of this source code is governed by a BSD-style license that
22618 // can be found in the LICENSE file.
22619 //
22620@@ -9,7 +9,7 @@
22621 // implementations. See the translator.README.txt file in the tools directory
22622 // for more information.
22623 //
22624-// $hash=10b01c1ea00ea8a7ef4b1a26b6e227a93755d7e8$
22625+// $hash=aa6efd61a1ebf39506a9cb655dd1c07168dc3d33$
22626 //
22627
22628 #include "libcef_dll/ctocpp/media_source_ctocpp.h"
22629diff --git a/cef/libcef_dll/ctocpp/media_source_ctocpp.h b/cef/libcef_dll/ctocpp/media_source_ctocpp.h
22630index ee708064a4..05f0fd35e5 100644
22631--- a/cef/libcef_dll/ctocpp/media_source_ctocpp.h
22632+++ b/cef/libcef_dll/ctocpp/media_source_ctocpp.h
22633@@ -1,4 +1,4 @@
22634-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22635+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22636 // reserved. Use of this source code is governed by a BSD-style license that
22637 // can be found in the LICENSE file.
22638 //
22639@@ -9,7 +9,7 @@
22640 // implementations. See the translator.README.txt file in the tools directory
22641 // for more information.
22642 //
22643-// $hash=0f4a7c8d49d309dfcd2bbb739d0497c9e805678b$
22644+// $hash=33a042c9ae8867e363396723f3600554feee84da$
22645 //
22646
22647 #ifndef CEF_LIBCEF_DLL_CTOCPP_MEDIA_SOURCE_CTOCPP_H_
22648diff --git a/cef/libcef_dll/ctocpp/menu_model_ctocpp.cc b/cef/libcef_dll/ctocpp/menu_model_ctocpp.cc
22649index e098b87104..7bf4664867 100644
22650--- a/cef/libcef_dll/ctocpp/menu_model_ctocpp.cc
22651+++ b/cef/libcef_dll/ctocpp/menu_model_ctocpp.cc
22652@@ -1,4 +1,4 @@
22653-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22654+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22655 // reserved. Use of this source code is governed by a BSD-style license that
22656 // can be found in the LICENSE file.
22657 //
22658@@ -9,7 +9,7 @@
22659 // implementations. See the translator.README.txt file in the tools directory
22660 // for more information.
22661 //
22662-// $hash=3d73717837ad42de475cc883fbc0243072bd3a26$
22663+// $hash=16bf2696e26746eddb06f7c6003eec81d3fc1c23$
22664 //
22665
22666 #include "libcef_dll/ctocpp/menu_model_ctocpp.h"
22667diff --git a/cef/libcef_dll/ctocpp/menu_model_ctocpp.h b/cef/libcef_dll/ctocpp/menu_model_ctocpp.h
22668index 8544560047..34a47d0d49 100644
22669--- a/cef/libcef_dll/ctocpp/menu_model_ctocpp.h
22670+++ b/cef/libcef_dll/ctocpp/menu_model_ctocpp.h
22671@@ -1,4 +1,4 @@
22672-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22673+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22674 // reserved. Use of this source code is governed by a BSD-style license that
22675 // can be found in the LICENSE file.
22676 //
22677@@ -9,7 +9,7 @@
22678 // implementations. See the translator.README.txt file in the tools directory
22679 // for more information.
22680 //
22681-// $hash=46e412e9d4ce0d6af2b3c065e731b73e93d885d4$
22682+// $hash=7f9101216683ca800cfde376ddc3c8500d86d728$
22683 //
22684
22685 #ifndef CEF_LIBCEF_DLL_CTOCPP_MENU_MODEL_CTOCPP_H_
22686diff --git a/cef/libcef_dll/ctocpp/menu_model_delegate_ctocpp.cc b/cef/libcef_dll/ctocpp/menu_model_delegate_ctocpp.cc
22687index dafc7bd499..407692062f 100644
22688--- a/cef/libcef_dll/ctocpp/menu_model_delegate_ctocpp.cc
22689+++ b/cef/libcef_dll/ctocpp/menu_model_delegate_ctocpp.cc
22690@@ -1,4 +1,4 @@
22691-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22692+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22693 // reserved. Use of this source code is governed by a BSD-style license that
22694 // can be found in the LICENSE file.
22695 //
22696@@ -9,7 +9,7 @@
22697 // implementations. See the translator.README.txt file in the tools directory
22698 // for more information.
22699 //
22700-// $hash=90fe1e689682edacce57a4c24a1eeb08ff4afd7a$
22701+// $hash=09421982fe76735de86b67b1f7d8828a1cc36f6e$
22702 //
22703
22704 #include "libcef_dll/ctocpp/menu_model_delegate_ctocpp.h"
22705diff --git a/cef/libcef_dll/ctocpp/menu_model_delegate_ctocpp.h b/cef/libcef_dll/ctocpp/menu_model_delegate_ctocpp.h
22706index 1755872b1b..6fc6c44150 100644
22707--- a/cef/libcef_dll/ctocpp/menu_model_delegate_ctocpp.h
22708+++ b/cef/libcef_dll/ctocpp/menu_model_delegate_ctocpp.h
22709@@ -1,4 +1,4 @@
22710-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22711+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22712 // reserved. Use of this source code is governed by a BSD-style license that
22713 // can be found in the LICENSE file.
22714 //
22715@@ -9,7 +9,7 @@
22716 // implementations. See the translator.README.txt file in the tools directory
22717 // for more information.
22718 //
22719-// $hash=845390c0396c10c059a57f28bef6c8a3c2b684ae$
22720+// $hash=0dcaca76119b9db970c61a30ba90d841f2fb7186$
22721 //
22722
22723 #ifndef CEF_LIBCEF_DLL_CTOCPP_MENU_MODEL_DELEGATE_CTOCPP_H_
22724diff --git a/cef/libcef_dll/ctocpp/navigation_entry_ctocpp.cc b/cef/libcef_dll/ctocpp/navigation_entry_ctocpp.cc
22725index 1507666ebb..47cbe987d0 100644
22726--- a/cef/libcef_dll/ctocpp/navigation_entry_ctocpp.cc
22727+++ b/cef/libcef_dll/ctocpp/navigation_entry_ctocpp.cc
22728@@ -1,4 +1,4 @@
22729-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22730+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22731 // reserved. Use of this source code is governed by a BSD-style license that
22732 // can be found in the LICENSE file.
22733 //
22734@@ -9,7 +9,7 @@
22735 // implementations. See the translator.README.txt file in the tools directory
22736 // for more information.
22737 //
22738-// $hash=b522ba519ba41df6dd21c70ec49c385d3561d849$
22739+// $hash=824aed5040e7aee5f9bf2079eafdf6d612b7d2d0$
22740 //
22741
22742 #include "libcef_dll/ctocpp/navigation_entry_ctocpp.h"
22743diff --git a/cef/libcef_dll/ctocpp/navigation_entry_ctocpp.h b/cef/libcef_dll/ctocpp/navigation_entry_ctocpp.h
22744index 41d937da58..52e0b8c32a 100644
22745--- a/cef/libcef_dll/ctocpp/navigation_entry_ctocpp.h
22746+++ b/cef/libcef_dll/ctocpp/navigation_entry_ctocpp.h
22747@@ -1,4 +1,4 @@
22748-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22749+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22750 // reserved. Use of this source code is governed by a BSD-style license that
22751 // can be found in the LICENSE file.
22752 //
22753@@ -9,7 +9,7 @@
22754 // implementations. See the translator.README.txt file in the tools directory
22755 // for more information.
22756 //
22757-// $hash=990d05c70f40b68b043cac0ad1e13f7004864bbe$
22758+// $hash=7592055d6e74a862e5b0661966637527e2fd90d2$
22759 //
22760
22761 #ifndef CEF_LIBCEF_DLL_CTOCPP_NAVIGATION_ENTRY_CTOCPP_H_
22762diff --git a/cef/libcef_dll/ctocpp/navigation_entry_visitor_ctocpp.cc b/cef/libcef_dll/ctocpp/navigation_entry_visitor_ctocpp.cc
22763index 891380dbfe..e9f156b0bd 100644
22764--- a/cef/libcef_dll/ctocpp/navigation_entry_visitor_ctocpp.cc
22765+++ b/cef/libcef_dll/ctocpp/navigation_entry_visitor_ctocpp.cc
22766@@ -1,4 +1,4 @@
22767-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22768+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22769 // reserved. Use of this source code is governed by a BSD-style license that
22770 // can be found in the LICENSE file.
22771 //
22772@@ -9,7 +9,7 @@
22773 // implementations. See the translator.README.txt file in the tools directory
22774 // for more information.
22775 //
22776-// $hash=bf2e34ba5f2073b0f4662fff0fb14d9f27b0bc50$
22777+// $hash=057910c31bf56f3bb5def469638942802300c7d8$
22778 //
22779
22780 #include "libcef_dll/ctocpp/navigation_entry_visitor_ctocpp.h"
22781diff --git a/cef/libcef_dll/ctocpp/navigation_entry_visitor_ctocpp.h b/cef/libcef_dll/ctocpp/navigation_entry_visitor_ctocpp.h
22782index 39352267e3..f619bfc41d 100644
22783--- a/cef/libcef_dll/ctocpp/navigation_entry_visitor_ctocpp.h
22784+++ b/cef/libcef_dll/ctocpp/navigation_entry_visitor_ctocpp.h
22785@@ -1,4 +1,4 @@
22786-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22787+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22788 // reserved. Use of this source code is governed by a BSD-style license that
22789 // can be found in the LICENSE file.
22790 //
22791@@ -9,7 +9,7 @@
22792 // implementations. See the translator.README.txt file in the tools directory
22793 // for more information.
22794 //
22795-// $hash=e559882064e6791f9f755fa9958871e568ab9a92$
22796+// $hash=478d39c2ee5c0e2dcd0e0923d47b20bc05e8a3b7$
22797 //
22798
22799 #ifndef CEF_LIBCEF_DLL_CTOCPP_NAVIGATION_ENTRY_VISITOR_CTOCPP_H_
22800diff --git a/cef/libcef_dll/ctocpp/pdf_print_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/pdf_print_callback_ctocpp.cc
22801index 046a804fc4..74720e7fdc 100644
22802--- a/cef/libcef_dll/ctocpp/pdf_print_callback_ctocpp.cc
22803+++ b/cef/libcef_dll/ctocpp/pdf_print_callback_ctocpp.cc
22804@@ -1,4 +1,4 @@
22805-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22806+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22807 // reserved. Use of this source code is governed by a BSD-style license that
22808 // can be found in the LICENSE file.
22809 //
22810@@ -9,7 +9,7 @@
22811 // implementations. See the translator.README.txt file in the tools directory
22812 // for more information.
22813 //
22814-// $hash=2bc8707239e1177eb19ae4a16c0ebd0ce4516b93$
22815+// $hash=970ecf239bb133f5c62c372762e00ba913e492a2$
22816 //
22817
22818 #include "libcef_dll/ctocpp/pdf_print_callback_ctocpp.h"
22819diff --git a/cef/libcef_dll/ctocpp/pdf_print_callback_ctocpp.h b/cef/libcef_dll/ctocpp/pdf_print_callback_ctocpp.h
22820index fe3da7d7fa..ba235369d5 100644
22821--- a/cef/libcef_dll/ctocpp/pdf_print_callback_ctocpp.h
22822+++ b/cef/libcef_dll/ctocpp/pdf_print_callback_ctocpp.h
22823@@ -1,4 +1,4 @@
22824-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
22825+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22826 // reserved. Use of this source code is governed by a BSD-style license that
22827 // can be found in the LICENSE file.
22828 //
22829@@ -9,7 +9,7 @@
22830 // implementations. See the translator.README.txt file in the tools directory
22831 // for more information.
22832 //
22833-// $hash=c17abbf5797081fea86172c9e40165a9aeac7efc$
22834+// $hash=6ec768e5cc0ef58766105bee24c3841367995a1e$
22835 //
22836
22837 #ifndef CEF_LIBCEF_DLL_CTOCPP_PDF_PRINT_CALLBACK_CTOCPP_H_
22838diff --git a/cef/libcef_dll/ctocpp/permission_request_ctocpp.cc b/cef/libcef_dll/ctocpp/permission_request_ctocpp.cc
22839new file mode 100644
22840index 0000000000..1b5876d571
22841--- /dev/null
22842+++ b/cef/libcef_dll/ctocpp/permission_request_ctocpp.cc
22843@@ -0,0 +1,108 @@
22844+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22845+// reserved. Use of this source code is governed by a BSD-style license that
22846+// can be found in the LICENSE file.
22847+//
22848+// ---------------------------------------------------------------------------
22849+//
22850+// This file was generated by the CEF translator tool. If making changes by
22851+// hand only do so within the body of existing method and function
22852+// implementations. See the translator.README.txt file in the tools directory
22853+// for more information.
22854+//
22855+// $hash=12f03dbc264ba05a28f5dc8273117ca6c6c74b8b$
22856+//
22857+
22858+#include "libcef_dll/ctocpp/permission_request_ctocpp.h"
22859+#include "libcef_dll/cpptoc/access_request_cpptoc.h"
22860+
22861+// VIRTUAL METHODS - Body may be edited by hand.
22862+
22863+NO_SANITIZE("cfi-icall")
22864+void CefPermissionRequestCToCpp::OnGeolocationShow(const CefString& origin) {
22865+  cef_permission_request_t* _struct = GetStruct();
22866+  if (CEF_MEMBER_MISSING(_struct, on_geolocation_show))
22867+    return;
22868+
22869+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
22870+
22871+  // Verify param: origin; type: string_byref_const
22872+  DCHECK(!origin.empty());
22873+  if (origin.empty())
22874+    return;
22875+
22876+  // Execute
22877+  _struct->on_geolocation_show(_struct, origin.GetStruct());
22878+}
22879+
22880+NO_SANITIZE("cfi-icall") void CefPermissionRequestCToCpp::OnGeolocationHide() {
22881+  cef_permission_request_t* _struct = GetStruct();
22882+  if (CEF_MEMBER_MISSING(_struct, on_geolocation_hide))
22883+    return;
22884+
22885+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
22886+
22887+  // Execute
22888+  _struct->on_geolocation_hide(_struct);
22889+}
22890+
22891+NO_SANITIZE("cfi-icall")
22892+void CefPermissionRequestCToCpp::OnPermissionRequest(
22893+    CefRefPtr<CefAccessRequest> request) {
22894+  cef_permission_request_t* _struct = GetStruct();
22895+  if (CEF_MEMBER_MISSING(_struct, on_permission_request))
22896+    return;
22897+
22898+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
22899+
22900+  // Verify param: request; type: refptr_diff
22901+  DCHECK(request.get());
22902+  if (!request.get())
22903+    return;
22904+
22905+  // Execute
22906+  _struct->on_permission_request(_struct,
22907+                                 CefAccessRequestCppToC::Wrap(request));
22908+}
22909+
22910+NO_SANITIZE("cfi-icall")
22911+void CefPermissionRequestCToCpp::OnPermissionRequestCanceled(
22912+    CefRefPtr<CefAccessRequest> request) {
22913+  cef_permission_request_t* _struct = GetStruct();
22914+  if (CEF_MEMBER_MISSING(_struct, on_permission_request_canceled))
22915+    return;
22916+
22917+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
22918+
22919+  // Verify param: request; type: refptr_diff
22920+  DCHECK(request.get());
22921+  if (!request.get())
22922+    return;
22923+
22924+  // Execute
22925+  _struct->on_permission_request_canceled(
22926+      _struct, CefAccessRequestCppToC::Wrap(request));
22927+}
22928+
22929+// CONSTRUCTOR - Do not edit by hand.
22930+
22931+CefPermissionRequestCToCpp::CefPermissionRequestCToCpp() {}
22932+
22933+// DESTRUCTOR - Do not edit by hand.
22934+
22935+CefPermissionRequestCToCpp::~CefPermissionRequestCToCpp() {}
22936+
22937+template <>
22938+cef_permission_request_t* CefCToCppRefCounted<
22939+    CefPermissionRequestCToCpp,
22940+    CefPermissionRequest,
22941+    cef_permission_request_t>::UnwrapDerived(CefWrapperType type,
22942+                                             CefPermissionRequest* c) {
22943+  NOTREACHED() << "Unexpected class type: " << type;
22944+  return nullptr;
22945+}
22946+
22947+template <>
22948+CefWrapperType CefCToCppRefCounted<CefPermissionRequestCToCpp,
22949+                                   CefPermissionRequest,
22950+                                   cef_permission_request_t>::kWrapperType =
22951+    WT_PERMISSION_REQUEST;
22952diff --git a/cef/libcef_dll/ctocpp/permission_request_ctocpp.h b/cef/libcef_dll/ctocpp/permission_request_ctocpp.h
22953new file mode 100644
22954index 0000000000..2ed4bcebca
22955--- /dev/null
22956+++ b/cef/libcef_dll/ctocpp/permission_request_ctocpp.h
22957@@ -0,0 +1,45 @@
22958+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
22959+// reserved. Use of this source code is governed by a BSD-style license that
22960+// can be found in the LICENSE file.
22961+//
22962+// ---------------------------------------------------------------------------
22963+//
22964+// This file was generated by the CEF translator tool. If making changes by
22965+// hand only do so within the body of existing method and function
22966+// implementations. See the translator.README.txt file in the tools directory
22967+// for more information.
22968+//
22969+// $hash=d3dcf1dc594597e78adcd93c64e185a6223992d1$
22970+//
22971+
22972+#ifndef CEF_LIBCEF_DLL_CTOCPP_PERMISSION_REQUEST_CTOCPP_H_
22973+#define CEF_LIBCEF_DLL_CTOCPP_PERMISSION_REQUEST_CTOCPP_H_
22974+#pragma once
22975+
22976+#if !defined(BUILDING_CEF_SHARED)
22977+#error This file can be included DLL-side only
22978+#endif
22979+
22980+#include "include/capi/cef_permission_request_capi.h"
22981+#include "include/cef_permission_request.h"
22982+#include "libcef_dll/ctocpp/ctocpp_ref_counted.h"
22983+
22984+// Wrap a C structure with a C++ class.
22985+// This class may be instantiated and accessed DLL-side only.
22986+class CefPermissionRequestCToCpp
22987+    : public CefCToCppRefCounted<CefPermissionRequestCToCpp,
22988+                                 CefPermissionRequest,
22989+                                 cef_permission_request_t> {
22990+ public:
22991+  CefPermissionRequestCToCpp();
22992+  virtual ~CefPermissionRequestCToCpp();
22993+
22994+  // CefPermissionRequest methods.
22995+  void OnGeolocationShow(const CefString& origin) override;
22996+  void OnGeolocationHide() override;
22997+  void OnPermissionRequest(CefRefPtr<CefAccessRequest> request) override;
22998+  void OnPermissionRequestCanceled(
22999+      CefRefPtr<CefAccessRequest> request) override;
23000+};
23001+
23002+#endif  // CEF_LIBCEF_DLL_CTOCPP_PERMISSION_REQUEST_CTOCPP_H_
23003diff --git a/cef/libcef_dll/ctocpp/post_data_ctocpp.cc b/cef/libcef_dll/ctocpp/post_data_ctocpp.cc
23004index 28cbdf8e2b..123d5c364a 100644
23005--- a/cef/libcef_dll/ctocpp/post_data_ctocpp.cc
23006+++ b/cef/libcef_dll/ctocpp/post_data_ctocpp.cc
23007@@ -1,4 +1,4 @@
23008-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23009+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23010 // reserved. Use of this source code is governed by a BSD-style license that
23011 // can be found in the LICENSE file.
23012 //
23013@@ -9,7 +9,7 @@
23014 // implementations. See the translator.README.txt file in the tools directory
23015 // for more information.
23016 //
23017-// $hash=68732af95710438f0d2af338dd2b24d51c52f6b1$
23018+// $hash=7a24d4020666f0277e76e190926df2081637a174$
23019 //
23020
23021 #include "libcef_dll/ctocpp/post_data_ctocpp.h"
23022diff --git a/cef/libcef_dll/ctocpp/post_data_ctocpp.h b/cef/libcef_dll/ctocpp/post_data_ctocpp.h
23023index 8d7f1ae3ab..fbc141ceca 100644
23024--- a/cef/libcef_dll/ctocpp/post_data_ctocpp.h
23025+++ b/cef/libcef_dll/ctocpp/post_data_ctocpp.h
23026@@ -1,4 +1,4 @@
23027-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23028+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23029 // reserved. Use of this source code is governed by a BSD-style license that
23030 // can be found in the LICENSE file.
23031 //
23032@@ -9,7 +9,7 @@
23033 // implementations. See the translator.README.txt file in the tools directory
23034 // for more information.
23035 //
23036-// $hash=4f27c0931e83f3f5b140eaeeffaf976dd751b1d2$
23037+// $hash=12c1c14c4041b778fbcff69cd57ee3a41124b776$
23038 //
23039
23040 #ifndef CEF_LIBCEF_DLL_CTOCPP_POST_DATA_CTOCPP_H_
23041diff --git a/cef/libcef_dll/ctocpp/post_data_element_ctocpp.cc b/cef/libcef_dll/ctocpp/post_data_element_ctocpp.cc
23042index afc9d30e20..ac01ab2ad7 100644
23043--- a/cef/libcef_dll/ctocpp/post_data_element_ctocpp.cc
23044+++ b/cef/libcef_dll/ctocpp/post_data_element_ctocpp.cc
23045@@ -1,4 +1,4 @@
23046-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23047+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23048 // reserved. Use of this source code is governed by a BSD-style license that
23049 // can be found in the LICENSE file.
23050 //
23051@@ -9,7 +9,7 @@
23052 // implementations. See the translator.README.txt file in the tools directory
23053 // for more information.
23054 //
23055-// $hash=b2fbcfc48bc4b1969c28e8f10a998a003bacca77$
23056+// $hash=027842b89846614ba6d0e3056db65004bc3a6b06$
23057 //
23058
23059 #include "libcef_dll/ctocpp/post_data_element_ctocpp.h"
23060diff --git a/cef/libcef_dll/ctocpp/post_data_element_ctocpp.h b/cef/libcef_dll/ctocpp/post_data_element_ctocpp.h
23061index 21d2ff8863..85c1a46c26 100644
23062--- a/cef/libcef_dll/ctocpp/post_data_element_ctocpp.h
23063+++ b/cef/libcef_dll/ctocpp/post_data_element_ctocpp.h
23064@@ -1,4 +1,4 @@
23065-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23066+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23067 // reserved. Use of this source code is governed by a BSD-style license that
23068 // can be found in the LICENSE file.
23069 //
23070@@ -9,7 +9,7 @@
23071 // implementations. See the translator.README.txt file in the tools directory
23072 // for more information.
23073 //
23074-// $hash=6ba7cc0530f7160b93a18d692512755b3fcb633b$
23075+// $hash=9e1e390bfc2af0256f422ca204af60a53ce84292$
23076 //
23077
23078 #ifndef CEF_LIBCEF_DLL_CTOCPP_POST_DATA_ELEMENT_CTOCPP_H_
23079diff --git a/cef/libcef_dll/ctocpp/print_dialog_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/print_dialog_callback_ctocpp.cc
23080index c6ac75fecf..27c6e0b331 100644
23081--- a/cef/libcef_dll/ctocpp/print_dialog_callback_ctocpp.cc
23082+++ b/cef/libcef_dll/ctocpp/print_dialog_callback_ctocpp.cc
23083@@ -1,4 +1,4 @@
23084-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23085+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23086 // reserved. Use of this source code is governed by a BSD-style license that
23087 // can be found in the LICENSE file.
23088 //
23089@@ -9,7 +9,7 @@
23090 // implementations. See the translator.README.txt file in the tools directory
23091 // for more information.
23092 //
23093-// $hash=33b3e45502d0b48d2cc14aaa83373d12c3e0f1dc$
23094+// $hash=2e3cda6569368540518b84119205e1e5f6e0d36b$
23095 //
23096
23097 #include "libcef_dll/ctocpp/print_dialog_callback_ctocpp.h"
23098diff --git a/cef/libcef_dll/ctocpp/print_dialog_callback_ctocpp.h b/cef/libcef_dll/ctocpp/print_dialog_callback_ctocpp.h
23099index 20f3b63403..1777757d11 100644
23100--- a/cef/libcef_dll/ctocpp/print_dialog_callback_ctocpp.h
23101+++ b/cef/libcef_dll/ctocpp/print_dialog_callback_ctocpp.h
23102@@ -1,4 +1,4 @@
23103-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23104+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23105 // reserved. Use of this source code is governed by a BSD-style license that
23106 // can be found in the LICENSE file.
23107 //
23108@@ -9,7 +9,7 @@
23109 // implementations. See the translator.README.txt file in the tools directory
23110 // for more information.
23111 //
23112-// $hash=991c4e5902ba3fc4de818d4d124dccb10dfb5d52$
23113+// $hash=27350ac036c20ac24186e9250816873f9e4c0e35$
23114 //
23115
23116 #ifndef CEF_LIBCEF_DLL_CTOCPP_PRINT_DIALOG_CALLBACK_CTOCPP_H_
23117diff --git a/cef/libcef_dll/ctocpp/print_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/print_handler_ctocpp.cc
23118index 8f2025964d..b5f02d80bf 100644
23119--- a/cef/libcef_dll/ctocpp/print_handler_ctocpp.cc
23120+++ b/cef/libcef_dll/ctocpp/print_handler_ctocpp.cc
23121@@ -1,4 +1,4 @@
23122-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23123+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23124 // reserved. Use of this source code is governed by a BSD-style license that
23125 // can be found in the LICENSE file.
23126 //
23127@@ -9,7 +9,7 @@
23128 // implementations. See the translator.README.txt file in the tools directory
23129 // for more information.
23130 //
23131-// $hash=5c1f65c2b1b111d248d5b7b27ddcb59b06594923$
23132+// $hash=f81708853d5cb6ee2fb397f401787068b722b060$
23133 //
23134
23135 #include "libcef_dll/ctocpp/print_handler_ctocpp.h"
23136diff --git a/cef/libcef_dll/ctocpp/print_handler_ctocpp.h b/cef/libcef_dll/ctocpp/print_handler_ctocpp.h
23137index 204d9e5044..e82154e3e7 100644
23138--- a/cef/libcef_dll/ctocpp/print_handler_ctocpp.h
23139+++ b/cef/libcef_dll/ctocpp/print_handler_ctocpp.h
23140@@ -1,4 +1,4 @@
23141-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23142+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23143 // reserved. Use of this source code is governed by a BSD-style license that
23144 // can be found in the LICENSE file.
23145 //
23146@@ -9,7 +9,7 @@
23147 // implementations. See the translator.README.txt file in the tools directory
23148 // for more information.
23149 //
23150-// $hash=5592945a1621a79ccff78a053a98e68bf08d9a8b$
23151+// $hash=861bf98595a13f8c42a23b5742471332c066b57a$
23152 //
23153
23154 #ifndef CEF_LIBCEF_DLL_CTOCPP_PRINT_HANDLER_CTOCPP_H_
23155diff --git a/cef/libcef_dll/ctocpp/print_job_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/print_job_callback_ctocpp.cc
23156index a8768c7355..072666c9d1 100644
23157--- a/cef/libcef_dll/ctocpp/print_job_callback_ctocpp.cc
23158+++ b/cef/libcef_dll/ctocpp/print_job_callback_ctocpp.cc
23159@@ -1,4 +1,4 @@
23160-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23161+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23162 // reserved. Use of this source code is governed by a BSD-style license that
23163 // can be found in the LICENSE file.
23164 //
23165@@ -9,7 +9,7 @@
23166 // implementations. See the translator.README.txt file in the tools directory
23167 // for more information.
23168 //
23169-// $hash=5be7390f9203b4e881de1fcb69f835f19818a2f3$
23170+// $hash=c952b7985eb56fd18e552e4905a5563380277bac$
23171 //
23172
23173 #include "libcef_dll/ctocpp/print_job_callback_ctocpp.h"
23174diff --git a/cef/libcef_dll/ctocpp/print_job_callback_ctocpp.h b/cef/libcef_dll/ctocpp/print_job_callback_ctocpp.h
23175index c219017800..fe03116440 100644
23176--- a/cef/libcef_dll/ctocpp/print_job_callback_ctocpp.h
23177+++ b/cef/libcef_dll/ctocpp/print_job_callback_ctocpp.h
23178@@ -1,4 +1,4 @@
23179-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23180+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23181 // reserved. Use of this source code is governed by a BSD-style license that
23182 // can be found in the LICENSE file.
23183 //
23184@@ -9,7 +9,7 @@
23185 // implementations. See the translator.README.txt file in the tools directory
23186 // for more information.
23187 //
23188-// $hash=0c54d50effa8f690b879fd6ba0cdc1b3221c1cf5$
23189+// $hash=991490679f135c2cbda7e0f22dba88e162440ed2$
23190 //
23191
23192 #ifndef CEF_LIBCEF_DLL_CTOCPP_PRINT_JOB_CALLBACK_CTOCPP_H_
23193diff --git a/cef/libcef_dll/ctocpp/print_settings_ctocpp.cc b/cef/libcef_dll/ctocpp/print_settings_ctocpp.cc
23194index 0706a56459..04880402b9 100644
23195--- a/cef/libcef_dll/ctocpp/print_settings_ctocpp.cc
23196+++ b/cef/libcef_dll/ctocpp/print_settings_ctocpp.cc
23197@@ -1,4 +1,4 @@
23198-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23199+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23200 // reserved. Use of this source code is governed by a BSD-style license that
23201 // can be found in the LICENSE file.
23202 //
23203@@ -9,7 +9,7 @@
23204 // implementations. See the translator.README.txt file in the tools directory
23205 // for more information.
23206 //
23207-// $hash=81d4ac9fdd16de0622995a85cc463ca4b118139f$
23208+// $hash=70eeeda85eb67d546066854051f2f921fadcca18$
23209 //
23210
23211 #include "libcef_dll/ctocpp/print_settings_ctocpp.h"
23212diff --git a/cef/libcef_dll/ctocpp/print_settings_ctocpp.h b/cef/libcef_dll/ctocpp/print_settings_ctocpp.h
23213index 81f152aa8c..b4d4b53ae4 100644
23214--- a/cef/libcef_dll/ctocpp/print_settings_ctocpp.h
23215+++ b/cef/libcef_dll/ctocpp/print_settings_ctocpp.h
23216@@ -1,4 +1,4 @@
23217-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23218+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23219 // reserved. Use of this source code is governed by a BSD-style license that
23220 // can be found in the LICENSE file.
23221 //
23222@@ -9,7 +9,7 @@
23223 // implementations. See the translator.README.txt file in the tools directory
23224 // for more information.
23225 //
23226-// $hash=9e906ae27be45f6d7996a566cf6d43060dd87069$
23227+// $hash=66dddeb455e83f4a56d68eaea4d402267729c47a$
23228 //
23229
23230 #ifndef CEF_LIBCEF_DLL_CTOCPP_PRINT_SETTINGS_CTOCPP_H_
23231diff --git a/cef/libcef_dll/ctocpp/process_message_ctocpp.cc b/cef/libcef_dll/ctocpp/process_message_ctocpp.cc
23232index c7652aa6e1..afa319731a 100644
23233--- a/cef/libcef_dll/ctocpp/process_message_ctocpp.cc
23234+++ b/cef/libcef_dll/ctocpp/process_message_ctocpp.cc
23235@@ -1,4 +1,4 @@
23236-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23237+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23238 // reserved. Use of this source code is governed by a BSD-style license that
23239 // can be found in the LICENSE file.
23240 //
23241@@ -9,7 +9,7 @@
23242 // implementations. See the translator.README.txt file in the tools directory
23243 // for more information.
23244 //
23245-// $hash=4c4e96f11773cedab61cd03417534348d4d69711$
23246+// $hash=7ab779c6c98a1bd2385f14d514304a28ef58717f$
23247 //
23248
23249 #include "libcef_dll/ctocpp/process_message_ctocpp.h"
23250diff --git a/cef/libcef_dll/ctocpp/process_message_ctocpp.h b/cef/libcef_dll/ctocpp/process_message_ctocpp.h
23251index b0d50061c9..e06f471cf7 100644
23252--- a/cef/libcef_dll/ctocpp/process_message_ctocpp.h
23253+++ b/cef/libcef_dll/ctocpp/process_message_ctocpp.h
23254@@ -1,4 +1,4 @@
23255-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23256+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23257 // reserved. Use of this source code is governed by a BSD-style license that
23258 // can be found in the LICENSE file.
23259 //
23260@@ -9,7 +9,7 @@
23261 // implementations. See the translator.README.txt file in the tools directory
23262 // for more information.
23263 //
23264-// $hash=c6de5a60b4d438f164b9915b9adc1e1c319c0f53$
23265+// $hash=046196d936aa82e7581a7387b2f6dd27e9f3a90e$
23266 //
23267
23268 #ifndef CEF_LIBCEF_DLL_CTOCPP_PROCESS_MESSAGE_CTOCPP_H_
23269diff --git a/cef/libcef_dll/ctocpp/read_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/read_handler_ctocpp.cc
23270index 188b913a24..858a1cc301 100644
23271--- a/cef/libcef_dll/ctocpp/read_handler_ctocpp.cc
23272+++ b/cef/libcef_dll/ctocpp/read_handler_ctocpp.cc
23273@@ -1,4 +1,4 @@
23274-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23275+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23276 // reserved. Use of this source code is governed by a BSD-style license that
23277 // can be found in the LICENSE file.
23278 //
23279@@ -9,7 +9,7 @@
23280 // implementations. See the translator.README.txt file in the tools directory
23281 // for more information.
23282 //
23283-// $hash=cae87f4fd617852ca5e45aea6fea51bc85317b67$
23284+// $hash=0332caff5ce6230d2cb2d7663fc0bbfac8e45069$
23285 //
23286
23287 #include "libcef_dll/ctocpp/read_handler_ctocpp.h"
23288diff --git a/cef/libcef_dll/ctocpp/read_handler_ctocpp.h b/cef/libcef_dll/ctocpp/read_handler_ctocpp.h
23289index fa874fb180..a1b88e03fb 100644
23290--- a/cef/libcef_dll/ctocpp/read_handler_ctocpp.h
23291+++ b/cef/libcef_dll/ctocpp/read_handler_ctocpp.h
23292@@ -1,4 +1,4 @@
23293-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23294+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23295 // reserved. Use of this source code is governed by a BSD-style license that
23296 // can be found in the LICENSE file.
23297 //
23298@@ -9,7 +9,7 @@
23299 // implementations. See the translator.README.txt file in the tools directory
23300 // for more information.
23301 //
23302-// $hash=4f3dd3394b3ae65c936602bd537e105ea1b030fc$
23303+// $hash=f3d43ae771f8e17084fd9397fd4e2bef9471ea73$
23304 //
23305
23306 #ifndef CEF_LIBCEF_DLL_CTOCPP_READ_HANDLER_CTOCPP_H_
23307diff --git a/cef/libcef_dll/ctocpp/register_cdm_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/register_cdm_callback_ctocpp.cc
23308index 694ae365e4..10b68c07ef 100644
23309--- a/cef/libcef_dll/ctocpp/register_cdm_callback_ctocpp.cc
23310+++ b/cef/libcef_dll/ctocpp/register_cdm_callback_ctocpp.cc
23311@@ -1,4 +1,4 @@
23312-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23313+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23314 // reserved. Use of this source code is governed by a BSD-style license that
23315 // can be found in the LICENSE file.
23316 //
23317@@ -9,7 +9,7 @@
23318 // implementations. See the translator.README.txt file in the tools directory
23319 // for more information.
23320 //
23321-// $hash=cf53fb30f47eeda9354fa60731d554ea757a47ac$
23322+// $hash=40583eaf5b031c6f6d149e4b78f731c40fc84d18$
23323 //
23324
23325 #include "libcef_dll/ctocpp/register_cdm_callback_ctocpp.h"
23326diff --git a/cef/libcef_dll/ctocpp/register_cdm_callback_ctocpp.h b/cef/libcef_dll/ctocpp/register_cdm_callback_ctocpp.h
23327index 9775e9ec40..6289167d79 100644
23328--- a/cef/libcef_dll/ctocpp/register_cdm_callback_ctocpp.h
23329+++ b/cef/libcef_dll/ctocpp/register_cdm_callback_ctocpp.h
23330@@ -1,4 +1,4 @@
23331-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23332+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23333 // reserved. Use of this source code is governed by a BSD-style license that
23334 // can be found in the LICENSE file.
23335 //
23336@@ -9,7 +9,7 @@
23337 // implementations. See the translator.README.txt file in the tools directory
23338 // for more information.
23339 //
23340-// $hash=202e9ab7dd5d4dc53daa2f716e0dd74c623ecd8c$
23341+// $hash=19283660196a59102c9acf03565a932026f6062b$
23342 //
23343
23344 #ifndef CEF_LIBCEF_DLL_CTOCPP_REGISTER_CDM_CALLBACK_CTOCPP_H_
23345diff --git a/cef/libcef_dll/ctocpp/registration_ctocpp.cc b/cef/libcef_dll/ctocpp/registration_ctocpp.cc
23346index ea1bf2ba4a..fad182ef7b 100644
23347--- a/cef/libcef_dll/ctocpp/registration_ctocpp.cc
23348+++ b/cef/libcef_dll/ctocpp/registration_ctocpp.cc
23349@@ -1,4 +1,4 @@
23350-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23351+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23352 // reserved. Use of this source code is governed by a BSD-style license that
23353 // can be found in the LICENSE file.
23354 //
23355@@ -9,7 +9,7 @@
23356 // implementations. See the translator.README.txt file in the tools directory
23357 // for more information.
23358 //
23359-// $hash=7f10b2c40262aaaf1b2943a28e468e87667d57b5$
23360+// $hash=36f275457b15025ac7b979eca3179cd127f45ffb$
23361 //
23362
23363 #include "libcef_dll/ctocpp/registration_ctocpp.h"
23364diff --git a/cef/libcef_dll/ctocpp/registration_ctocpp.h b/cef/libcef_dll/ctocpp/registration_ctocpp.h
23365index 1fff4da7ad..00c48e0213 100644
23366--- a/cef/libcef_dll/ctocpp/registration_ctocpp.h
23367+++ b/cef/libcef_dll/ctocpp/registration_ctocpp.h
23368@@ -1,4 +1,4 @@
23369-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23370+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23371 // reserved. Use of this source code is governed by a BSD-style license that
23372 // can be found in the LICENSE file.
23373 //
23374@@ -9,7 +9,7 @@
23375 // implementations. See the translator.README.txt file in the tools directory
23376 // for more information.
23377 //
23378-// $hash=bd5157a829fab277a56e86b8f70deb7eae16fb38$
23379+// $hash=84ca9a25ae345642994cc1b44cd71f90e7406f19$
23380 //
23381
23382 #ifndef CEF_LIBCEF_DLL_CTOCPP_REGISTRATION_CTOCPP_H_
23383diff --git a/cef/libcef_dll/ctocpp/render_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/render_handler_ctocpp.cc
23384index 5bda63ac50..2840c8e455 100644
23385--- a/cef/libcef_dll/ctocpp/render_handler_ctocpp.cc
23386+++ b/cef/libcef_dll/ctocpp/render_handler_ctocpp.cc
23387@@ -1,4 +1,4 @@
23388-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23389+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23390 // reserved. Use of this source code is governed by a BSD-style license that
23391 // can be found in the LICENSE file.
23392 //
23393@@ -9,7 +9,7 @@
23394 // implementations. See the translator.README.txt file in the tools directory
23395 // for more information.
23396 //
23397-// $hash=9eb4dcf3fdacae57758ab29d6dc457e6d9ea92a9$
23398+// $hash=c49c659f1eb3f77224ec5a1bb68b2c1b1cd0d955$
23399 //
23400
23401 #include "libcef_dll/ctocpp/render_handler_ctocpp.h"
23402@@ -341,6 +341,28 @@ void CefRenderHandlerCToCpp::OnScrollOffsetChanged(
23403                                     y);
23404 }
23405
23406+NO_SANITIZE("cfi-icall")
23407+void CefRenderHandlerCToCpp::OnRootLayerChanged(CefRefPtr<CefBrowser> browser,
23408+                                                int height,
23409+                                                int width) {
23410+  shutdown_checker::AssertNotShutdown();
23411+
23412+  cef_render_handler_t* _struct = GetStruct();
23413+  if (CEF_MEMBER_MISSING(_struct, on_root_layer_changed))
23414+    return;
23415+
23416+  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
23417+
23418+  // Verify param: browser; type: refptr_diff
23419+  DCHECK(browser.get());
23420+  if (!browser.get())
23421+    return;
23422+
23423+  // Execute
23424+  _struct->on_root_layer_changed(_struct, CefBrowserCppToC::Wrap(browser),
23425+                                 height, width);
23426+}
23427+
23428 NO_SANITIZE("cfi-icall")
23429 void CefRenderHandlerCToCpp::OnImeCompositionRangeChanged(
23430     CefRefPtr<CefBrowser> browser,
23431diff --git a/cef/libcef_dll/ctocpp/render_handler_ctocpp.h b/cef/libcef_dll/ctocpp/render_handler_ctocpp.h
23432index 3f32296ec8..dfeed9cc6e 100644
23433--- a/cef/libcef_dll/ctocpp/render_handler_ctocpp.h
23434+++ b/cef/libcef_dll/ctocpp/render_handler_ctocpp.h
23435@@ -1,4 +1,4 @@
23436-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23437+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23438 // reserved. Use of this source code is governed by a BSD-style license that
23439 // can be found in the LICENSE file.
23440 //
23441@@ -9,7 +9,7 @@
23442 // implementations. See the translator.README.txt file in the tools directory
23443 // for more information.
23444 //
23445-// $hash=250d5b59061799513e4aeaab46ca728082127806$
23446+// $hash=be7d8da1b315dfa07566846d90b95848fae0f83b$
23447 //
23448
23449 #ifndef CEF_LIBCEF_DLL_CTOCPP_RENDER_HANDLER_CTOCPP_H_
23450@@ -67,6 +67,9 @@ class CefRenderHandlerCToCpp
23451   void OnScrollOffsetChanged(CefRefPtr<CefBrowser> browser,
23452                              double x,
23453                              double y) override;
23454+  void OnRootLayerChanged(CefRefPtr<CefBrowser> browser,
23455+                          int height,
23456+                          int width) override;
23457   void OnImeCompositionRangeChanged(CefRefPtr<CefBrowser> browser,
23458                                     const CefRange& selected_range,
23459                                     const RectList& character_bounds) override;
23460diff --git a/cef/libcef_dll/ctocpp/render_process_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/render_process_handler_ctocpp.cc
23461index 4d4e1f4d52..e7143908f2 100644
23462--- a/cef/libcef_dll/ctocpp/render_process_handler_ctocpp.cc
23463+++ b/cef/libcef_dll/ctocpp/render_process_handler_ctocpp.cc
23464@@ -1,4 +1,4 @@
23465-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23466+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23467 // reserved. Use of this source code is governed by a BSD-style license that
23468 // can be found in the LICENSE file.
23469 //
23470@@ -9,7 +9,7 @@
23471 // implementations. See the translator.README.txt file in the tools directory
23472 // for more information.
23473 //
23474-// $hash=4cc516704229f90c49852b46f932b8882b4bf8d4$
23475+// $hash=ff8f6b33244916e65041e46461e5f1129c2c242d$
23476 //
23477
23478 #include "libcef_dll/ctocpp/render_process_handler_ctocpp.h"
23479diff --git a/cef/libcef_dll/ctocpp/render_process_handler_ctocpp.h b/cef/libcef_dll/ctocpp/render_process_handler_ctocpp.h
23480index c5d808a3e3..b587be7aa2 100644
23481--- a/cef/libcef_dll/ctocpp/render_process_handler_ctocpp.h
23482+++ b/cef/libcef_dll/ctocpp/render_process_handler_ctocpp.h
23483@@ -1,4 +1,4 @@
23484-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23485+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23486 // reserved. Use of this source code is governed by a BSD-style license that
23487 // can be found in the LICENSE file.
23488 //
23489@@ -9,7 +9,7 @@
23490 // implementations. See the translator.README.txt file in the tools directory
23491 // for more information.
23492 //
23493-// $hash=b6af4ad8b6507e539170e35b6c6e16c58c921eb9$
23494+// $hash=c87a2a5637615d6b7994f80cef17651c73cdb8e2$
23495 //
23496
23497 #ifndef CEF_LIBCEF_DLL_CTOCPP_RENDER_PROCESS_HANDLER_CTOCPP_H_
23498diff --git a/cef/libcef_dll/ctocpp/request_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/request_callback_ctocpp.cc
23499index 3e552308dd..7f912043aa 100644
23500--- a/cef/libcef_dll/ctocpp/request_callback_ctocpp.cc
23501+++ b/cef/libcef_dll/ctocpp/request_callback_ctocpp.cc
23502@@ -1,4 +1,4 @@
23503-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23504+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23505 // reserved. Use of this source code is governed by a BSD-style license that
23506 // can be found in the LICENSE file.
23507 //
23508@@ -9,7 +9,7 @@
23509 // implementations. See the translator.README.txt file in the tools directory
23510 // for more information.
23511 //
23512-// $hash=9fb040d47f4b6627904cc50518d0293bfe11d25d$
23513+// $hash=e562ec21e0cd256643af02c7794dcba9a8447918$
23514 //
23515
23516 #include "libcef_dll/ctocpp/request_callback_ctocpp.h"
23517diff --git a/cef/libcef_dll/ctocpp/request_callback_ctocpp.h b/cef/libcef_dll/ctocpp/request_callback_ctocpp.h
23518index 7666530356..4a7a987c89 100644
23519--- a/cef/libcef_dll/ctocpp/request_callback_ctocpp.h
23520+++ b/cef/libcef_dll/ctocpp/request_callback_ctocpp.h
23521@@ -1,4 +1,4 @@
23522-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23523+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23524 // reserved. Use of this source code is governed by a BSD-style license that
23525 // can be found in the LICENSE file.
23526 //
23527@@ -9,7 +9,7 @@
23528 // implementations. See the translator.README.txt file in the tools directory
23529 // for more information.
23530 //
23531-// $hash=1ede257dfc48418e456f733bff7a062e8b841efe$
23532+// $hash=21b9b01cafe388bfca99042b72b70a16f8704bca$
23533 //
23534
23535 #ifndef CEF_LIBCEF_DLL_CTOCPP_REQUEST_CALLBACK_CTOCPP_H_
23536diff --git a/cef/libcef_dll/ctocpp/request_context_ctocpp.cc b/cef/libcef_dll/ctocpp/request_context_ctocpp.cc
23537index d358aed81e..c1297f2a05 100644
23538--- a/cef/libcef_dll/ctocpp/request_context_ctocpp.cc
23539+++ b/cef/libcef_dll/ctocpp/request_context_ctocpp.cc
23540@@ -1,4 +1,4 @@
23541-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23542+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23543 // reserved. Use of this source code is governed by a BSD-style license that
23544 // can be found in the LICENSE file.
23545 //
23546@@ -9,7 +9,7 @@
23547 // implementations. See the translator.README.txt file in the tools directory
23548 // for more information.
23549 //
23550-// $hash=67bc021917c8f7d1e386859bbfae6e007b292f45$
23551+// $hash=856dc903108cc2e295f4ddc67f820d36a1896472$
23552 //
23553
23554 #include "libcef_dll/ctocpp/request_context_ctocpp.h"
23555diff --git a/cef/libcef_dll/ctocpp/request_context_ctocpp.h b/cef/libcef_dll/ctocpp/request_context_ctocpp.h
23556index 314110af2f..a8abb88cef 100644
23557--- a/cef/libcef_dll/ctocpp/request_context_ctocpp.h
23558+++ b/cef/libcef_dll/ctocpp/request_context_ctocpp.h
23559@@ -1,4 +1,4 @@
23560-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23561+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23562 // reserved. Use of this source code is governed by a BSD-style license that
23563 // can be found in the LICENSE file.
23564 //
23565@@ -9,7 +9,7 @@
23566 // implementations. See the translator.README.txt file in the tools directory
23567 // for more information.
23568 //
23569-// $hash=0aff81f2ccc5881001e9fd61cc6e349253fb2ac5$
23570+// $hash=e0837e0c338f59260e5c52a490edfbbb82490e01$
23571 //
23572
23573 #ifndef CEF_LIBCEF_DLL_CTOCPP_REQUEST_CONTEXT_CTOCPP_H_
23574diff --git a/cef/libcef_dll/ctocpp/request_context_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/request_context_handler_ctocpp.cc
23575index 3e744f2582..28953ad9f3 100644
23576--- a/cef/libcef_dll/ctocpp/request_context_handler_ctocpp.cc
23577+++ b/cef/libcef_dll/ctocpp/request_context_handler_ctocpp.cc
23578@@ -1,4 +1,4 @@
23579-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23580+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23581 // reserved. Use of this source code is governed by a BSD-style license that
23582 // can be found in the LICENSE file.
23583 //
23584@@ -9,7 +9,7 @@
23585 // implementations. See the translator.README.txt file in the tools directory
23586 // for more information.
23587 //
23588-// $hash=e857bba04c337c16c2ea4ebce2e99c00d10280e1$
23589+// $hash=7d59490393a71bacad28096ecf95211d1f3c3303$
23590 //
23591
23592 #include "libcef_dll/ctocpp/request_context_handler_ctocpp.h"
23593diff --git a/cef/libcef_dll/ctocpp/request_context_handler_ctocpp.h b/cef/libcef_dll/ctocpp/request_context_handler_ctocpp.h
23594index b4d5b92bc1..76b73e91d0 100644
23595--- a/cef/libcef_dll/ctocpp/request_context_handler_ctocpp.h
23596+++ b/cef/libcef_dll/ctocpp/request_context_handler_ctocpp.h
23597@@ -1,4 +1,4 @@
23598-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23599+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23600 // reserved. Use of this source code is governed by a BSD-style license that
23601 // can be found in the LICENSE file.
23602 //
23603@@ -9,7 +9,7 @@
23604 // implementations. See the translator.README.txt file in the tools directory
23605 // for more information.
23606 //
23607-// $hash=448e862b43cb41f8f01519501733ef9bbe0d1607$
23608+// $hash=7e6ec1e205a0f3b516d8c503bdaa10f5e7bcc274$
23609 //
23610
23611 #ifndef CEF_LIBCEF_DLL_CTOCPP_REQUEST_CONTEXT_HANDLER_CTOCPP_H_
23612diff --git a/cef/libcef_dll/ctocpp/request_ctocpp.cc b/cef/libcef_dll/ctocpp/request_ctocpp.cc
23613index 3be0627c98..5626e4c25d 100644
23614--- a/cef/libcef_dll/ctocpp/request_ctocpp.cc
23615+++ b/cef/libcef_dll/ctocpp/request_ctocpp.cc
23616@@ -1,4 +1,4 @@
23617-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23618+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23619 // reserved. Use of this source code is governed by a BSD-style license that
23620 // can be found in the LICENSE file.
23621 //
23622@@ -9,7 +9,7 @@
23623 // implementations. See the translator.README.txt file in the tools directory
23624 // for more information.
23625 //
23626-// $hash=82d97339b034e8ba484ecca0ed92d6b0c13f21b3$
23627+// $hash=b1dd4486a797ac139f453e02e3a49c74b7568ca8$
23628 //
23629
23630 #include "libcef_dll/ctocpp/request_ctocpp.h"
23631diff --git a/cef/libcef_dll/ctocpp/request_ctocpp.h b/cef/libcef_dll/ctocpp/request_ctocpp.h
23632index a53848cb43..dd2b599ea5 100644
23633--- a/cef/libcef_dll/ctocpp/request_ctocpp.h
23634+++ b/cef/libcef_dll/ctocpp/request_ctocpp.h
23635@@ -1,4 +1,4 @@
23636-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23637+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23638 // reserved. Use of this source code is governed by a BSD-style license that
23639 // can be found in the LICENSE file.
23640 //
23641@@ -9,7 +9,7 @@
23642 // implementations. See the translator.README.txt file in the tools directory
23643 // for more information.
23644 //
23645-// $hash=77fee821efba296de9f9c01aa42f77596fb381d1$
23646+// $hash=c4b9e409b8ebcd1d460b66913e81742ab7c92782$
23647 //
23648
23649 #ifndef CEF_LIBCEF_DLL_CTOCPP_REQUEST_CTOCPP_H_
23650diff --git a/cef/libcef_dll/ctocpp/request_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/request_handler_ctocpp.cc
23651index a6d88fc4dd..aaa756b980 100644
23652--- a/cef/libcef_dll/ctocpp/request_handler_ctocpp.cc
23653+++ b/cef/libcef_dll/ctocpp/request_handler_ctocpp.cc
23654@@ -1,4 +1,4 @@
23655-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23656+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23657 // reserved. Use of this source code is governed by a BSD-style license that
23658 // can be found in the LICENSE file.
23659 //
23660@@ -9,7 +9,7 @@
23661 // implementations. See the translator.README.txt file in the tools directory
23662 // for more information.
23663 //
23664-// $hash=cac9a84a4ddb5aa01e9c6fc97f5c4bcb4f4c368f$
23665+// $hash=5df945d13e76eb21611ae848d99505eaae5e7602$
23666 //
23667
23668 #include "libcef_dll/ctocpp/request_handler_ctocpp.h"
23669diff --git a/cef/libcef_dll/ctocpp/request_handler_ctocpp.h b/cef/libcef_dll/ctocpp/request_handler_ctocpp.h
23670index ef74cbc8bc..32b5dac844 100644
23671--- a/cef/libcef_dll/ctocpp/request_handler_ctocpp.h
23672+++ b/cef/libcef_dll/ctocpp/request_handler_ctocpp.h
23673@@ -1,4 +1,4 @@
23674-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23675+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23676 // reserved. Use of this source code is governed by a BSD-style license that
23677 // can be found in the LICENSE file.
23678 //
23679@@ -9,7 +9,7 @@
23680 // implementations. See the translator.README.txt file in the tools directory
23681 // for more information.
23682 //
23683-// $hash=771c124f112f02314f57b5f9bd475afe6cef3242$
23684+// $hash=dff7280d248bbc08733c6765a3ddfe5ae3978348$
23685 //
23686
23687 #ifndef CEF_LIBCEF_DLL_CTOCPP_REQUEST_HANDLER_CTOCPP_H_
23688diff --git a/cef/libcef_dll/ctocpp/resolve_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/resolve_callback_ctocpp.cc
23689index d0f1c0099e..d348c199a6 100644
23690--- a/cef/libcef_dll/ctocpp/resolve_callback_ctocpp.cc
23691+++ b/cef/libcef_dll/ctocpp/resolve_callback_ctocpp.cc
23692@@ -1,4 +1,4 @@
23693-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23694+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23695 // reserved. Use of this source code is governed by a BSD-style license that
23696 // can be found in the LICENSE file.
23697 //
23698@@ -9,7 +9,7 @@
23699 // implementations. See the translator.README.txt file in the tools directory
23700 // for more information.
23701 //
23702-// $hash=80b9eb74012b88e0d43fc4d4996130aac8fc0511$
23703+// $hash=c71d6fd8b0ee493102fdae90612f15b01e4a9f6b$
23704 //
23705
23706 #include "libcef_dll/ctocpp/resolve_callback_ctocpp.h"
23707diff --git a/cef/libcef_dll/ctocpp/resolve_callback_ctocpp.h b/cef/libcef_dll/ctocpp/resolve_callback_ctocpp.h
23708index c94c9a4ab5..b1f00880bc 100644
23709--- a/cef/libcef_dll/ctocpp/resolve_callback_ctocpp.h
23710+++ b/cef/libcef_dll/ctocpp/resolve_callback_ctocpp.h
23711@@ -1,4 +1,4 @@
23712-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23713+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23714 // reserved. Use of this source code is governed by a BSD-style license that
23715 // can be found in the LICENSE file.
23716 //
23717@@ -9,7 +9,7 @@
23718 // implementations. See the translator.README.txt file in the tools directory
23719 // for more information.
23720 //
23721-// $hash=1f07689db3a9b68d0fb50aef636486885aef6ea0$
23722+// $hash=493826dcfb1c8e1b46489225a74332552d591d63$
23723 //
23724
23725 #ifndef CEF_LIBCEF_DLL_CTOCPP_RESOLVE_CALLBACK_CTOCPP_H_
23726diff --git a/cef/libcef_dll/ctocpp/resource_bundle_ctocpp.cc b/cef/libcef_dll/ctocpp/resource_bundle_ctocpp.cc
23727index 6a5fc7cd37..66bc65cc31 100644
23728--- a/cef/libcef_dll/ctocpp/resource_bundle_ctocpp.cc
23729+++ b/cef/libcef_dll/ctocpp/resource_bundle_ctocpp.cc
23730@@ -1,4 +1,4 @@
23731-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23732+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23733 // reserved. Use of this source code is governed by a BSD-style license that
23734 // can be found in the LICENSE file.
23735 //
23736@@ -9,7 +9,7 @@
23737 // implementations. See the translator.README.txt file in the tools directory
23738 // for more information.
23739 //
23740-// $hash=01882602db6e3a075edeceecec82063f1e3a4d8f$
23741+// $hash=a62aa669321b0f86ea3508ce31ea5b1a0bc3f9b5$
23742 //
23743
23744 #include "libcef_dll/ctocpp/resource_bundle_ctocpp.h"
23745diff --git a/cef/libcef_dll/ctocpp/resource_bundle_ctocpp.h b/cef/libcef_dll/ctocpp/resource_bundle_ctocpp.h
23746index 072ad85949..2687e1046e 100644
23747--- a/cef/libcef_dll/ctocpp/resource_bundle_ctocpp.h
23748+++ b/cef/libcef_dll/ctocpp/resource_bundle_ctocpp.h
23749@@ -1,4 +1,4 @@
23750-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23751+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23752 // reserved. Use of this source code is governed by a BSD-style license that
23753 // can be found in the LICENSE file.
23754 //
23755@@ -9,7 +9,7 @@
23756 // implementations. See the translator.README.txt file in the tools directory
23757 // for more information.
23758 //
23759-// $hash=00c386274cefb6ae461544f93cea6df7d2a6f367$
23760+// $hash=245ec814ff08ef80a2c11830e0d4493150544ede$
23761 //
23762
23763 #ifndef CEF_LIBCEF_DLL_CTOCPP_RESOURCE_BUNDLE_CTOCPP_H_
23764diff --git a/cef/libcef_dll/ctocpp/resource_bundle_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/resource_bundle_handler_ctocpp.cc
23765index e5ba02f3c8..722f909420 100644
23766--- a/cef/libcef_dll/ctocpp/resource_bundle_handler_ctocpp.cc
23767+++ b/cef/libcef_dll/ctocpp/resource_bundle_handler_ctocpp.cc
23768@@ -1,4 +1,4 @@
23769-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23770+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23771 // reserved. Use of this source code is governed by a BSD-style license that
23772 // can be found in the LICENSE file.
23773 //
23774@@ -9,7 +9,7 @@
23775 // implementations. See the translator.README.txt file in the tools directory
23776 // for more information.
23777 //
23778-// $hash=202d1371e39e1211d2db18afcc0610a341725b2b$
23779+// $hash=12556834893a7ae50b8f8bef2b71915fa1a141ca$
23780 //
23781
23782 #include "libcef_dll/ctocpp/resource_bundle_handler_ctocpp.h"
23783diff --git a/cef/libcef_dll/ctocpp/resource_bundle_handler_ctocpp.h b/cef/libcef_dll/ctocpp/resource_bundle_handler_ctocpp.h
23784index c689054e22..354a15e078 100644
23785--- a/cef/libcef_dll/ctocpp/resource_bundle_handler_ctocpp.h
23786+++ b/cef/libcef_dll/ctocpp/resource_bundle_handler_ctocpp.h
23787@@ -1,4 +1,4 @@
23788-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23789+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23790 // reserved. Use of this source code is governed by a BSD-style license that
23791 // can be found in the LICENSE file.
23792 //
23793@@ -9,7 +9,7 @@
23794 // implementations. See the translator.README.txt file in the tools directory
23795 // for more information.
23796 //
23797-// $hash=bb6805610f1eb4d2bf1931dbf910b4603786ef4f$
23798+// $hash=ba179fe7fc169637ab6f1727351a81952c82826d$
23799 //
23800
23801 #ifndef CEF_LIBCEF_DLL_CTOCPP_RESOURCE_BUNDLE_HANDLER_CTOCPP_H_
23802diff --git a/cef/libcef_dll/ctocpp/resource_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/resource_handler_ctocpp.cc
23803index aae931436c..4396a57db1 100644
23804--- a/cef/libcef_dll/ctocpp/resource_handler_ctocpp.cc
23805+++ b/cef/libcef_dll/ctocpp/resource_handler_ctocpp.cc
23806@@ -1,4 +1,4 @@
23807-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23808+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23809 // reserved. Use of this source code is governed by a BSD-style license that
23810 // can be found in the LICENSE file.
23811 //
23812@@ -9,7 +9,7 @@
23813 // implementations. See the translator.README.txt file in the tools directory
23814 // for more information.
23815 //
23816-// $hash=3167c77e6d2a2fc436fd3691b2f6681bccba3fd1$
23817+// $hash=16d3a6bd2555917b295d7dbb3ccd95ccfc35b111$
23818 //
23819
23820 #include "libcef_dll/ctocpp/resource_handler_ctocpp.h"
23821diff --git a/cef/libcef_dll/ctocpp/resource_handler_ctocpp.h b/cef/libcef_dll/ctocpp/resource_handler_ctocpp.h
23822index e90d7d6c59..ae74e58fd3 100644
23823--- a/cef/libcef_dll/ctocpp/resource_handler_ctocpp.h
23824+++ b/cef/libcef_dll/ctocpp/resource_handler_ctocpp.h
23825@@ -1,4 +1,4 @@
23826-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23827+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23828 // reserved. Use of this source code is governed by a BSD-style license that
23829 // can be found in the LICENSE file.
23830 //
23831@@ -9,7 +9,7 @@
23832 // implementations. See the translator.README.txt file in the tools directory
23833 // for more information.
23834 //
23835-// $hash=bd1bde0a4122e06dfccc7cf8ad47448ed6276a35$
23836+// $hash=2b60744909728ffbff2e846438bf122a61fec5c7$
23837 //
23838
23839 #ifndef CEF_LIBCEF_DLL_CTOCPP_RESOURCE_HANDLER_CTOCPP_H_
23840diff --git a/cef/libcef_dll/ctocpp/resource_read_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/resource_read_callback_ctocpp.cc
23841index f0c94d8cd1..1e9523ef77 100644
23842--- a/cef/libcef_dll/ctocpp/resource_read_callback_ctocpp.cc
23843+++ b/cef/libcef_dll/ctocpp/resource_read_callback_ctocpp.cc
23844@@ -1,4 +1,4 @@
23845-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23846+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23847 // reserved. Use of this source code is governed by a BSD-style license that
23848 // can be found in the LICENSE file.
23849 //
23850@@ -9,7 +9,7 @@
23851 // implementations. See the translator.README.txt file in the tools directory
23852 // for more information.
23853 //
23854-// $hash=cbb99c39dde3ebfe149fa2051c63c813f86f3926$
23855+// $hash=c251aa59688ffe5c12d2ec3c8a4a896d016e86a0$
23856 //
23857
23858 #include "libcef_dll/ctocpp/resource_read_callback_ctocpp.h"
23859diff --git a/cef/libcef_dll/ctocpp/resource_read_callback_ctocpp.h b/cef/libcef_dll/ctocpp/resource_read_callback_ctocpp.h
23860index f1115e7747..3a38441651 100644
23861--- a/cef/libcef_dll/ctocpp/resource_read_callback_ctocpp.h
23862+++ b/cef/libcef_dll/ctocpp/resource_read_callback_ctocpp.h
23863@@ -1,4 +1,4 @@
23864-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23865+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23866 // reserved. Use of this source code is governed by a BSD-style license that
23867 // can be found in the LICENSE file.
23868 //
23869@@ -9,7 +9,7 @@
23870 // implementations. See the translator.README.txt file in the tools directory
23871 // for more information.
23872 //
23873-// $hash=1678dd45fdeac3cf3f0674138791fa2eb51f08e2$
23874+// $hash=5225eea48911cd7a7df5f6b6d2ddc1c445d7e460$
23875 //
23876
23877 #ifndef CEF_LIBCEF_DLL_CTOCPP_RESOURCE_READ_CALLBACK_CTOCPP_H_
23878diff --git a/cef/libcef_dll/ctocpp/resource_request_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/resource_request_handler_ctocpp.cc
23879index 8937d0c9a9..096427d9db 100644
23880--- a/cef/libcef_dll/ctocpp/resource_request_handler_ctocpp.cc
23881+++ b/cef/libcef_dll/ctocpp/resource_request_handler_ctocpp.cc
23882@@ -1,4 +1,4 @@
23883-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23884+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23885 // reserved. Use of this source code is governed by a BSD-style license that
23886 // can be found in the LICENSE file.
23887 //
23888@@ -9,7 +9,7 @@
23889 // implementations. See the translator.README.txt file in the tools directory
23890 // for more information.
23891 //
23892-// $hash=a53f4f53f8063044f5c82870f2cef1ef89a91d83$
23893+// $hash=451a51625d4a8e229e9f29dba9148314d126cfb0$
23894 //
23895
23896 #include "libcef_dll/ctocpp/resource_request_handler_ctocpp.h"
23897diff --git a/cef/libcef_dll/ctocpp/resource_request_handler_ctocpp.h b/cef/libcef_dll/ctocpp/resource_request_handler_ctocpp.h
23898index 4f7636eb2e..4fa41c22a6 100644
23899--- a/cef/libcef_dll/ctocpp/resource_request_handler_ctocpp.h
23900+++ b/cef/libcef_dll/ctocpp/resource_request_handler_ctocpp.h
23901@@ -1,4 +1,4 @@
23902-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23903+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23904 // reserved. Use of this source code is governed by a BSD-style license that
23905 // can be found in the LICENSE file.
23906 //
23907@@ -9,7 +9,7 @@
23908 // implementations. See the translator.README.txt file in the tools directory
23909 // for more information.
23910 //
23911-// $hash=0168c1a4e9321014b8a0a9434ea85f89de100cc7$
23912+// $hash=f5d801ab34b0a86b9c19ce0bcaeb97a965785705$
23913 //
23914
23915 #ifndef CEF_LIBCEF_DLL_CTOCPP_RESOURCE_REQUEST_HANDLER_CTOCPP_H_
23916diff --git a/cef/libcef_dll/ctocpp/resource_skip_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/resource_skip_callback_ctocpp.cc
23917index 6321981860..cdafb7bea0 100644
23918--- a/cef/libcef_dll/ctocpp/resource_skip_callback_ctocpp.cc
23919+++ b/cef/libcef_dll/ctocpp/resource_skip_callback_ctocpp.cc
23920@@ -1,4 +1,4 @@
23921-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23922+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23923 // reserved. Use of this source code is governed by a BSD-style license that
23924 // can be found in the LICENSE file.
23925 //
23926@@ -9,7 +9,7 @@
23927 // implementations. See the translator.README.txt file in the tools directory
23928 // for more information.
23929 //
23930-// $hash=b2d1fb3d20a88e971781e3fea9034b579b73b33e$
23931+// $hash=df7b14a723e4f2b9dd7946fddfbe8dc9652ccb75$
23932 //
23933
23934 #include "libcef_dll/ctocpp/resource_skip_callback_ctocpp.h"
23935diff --git a/cef/libcef_dll/ctocpp/resource_skip_callback_ctocpp.h b/cef/libcef_dll/ctocpp/resource_skip_callback_ctocpp.h
23936index 0e90c6fa0a..b9a274f045 100644
23937--- a/cef/libcef_dll/ctocpp/resource_skip_callback_ctocpp.h
23938+++ b/cef/libcef_dll/ctocpp/resource_skip_callback_ctocpp.h
23939@@ -1,4 +1,4 @@
23940-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23941+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23942 // reserved. Use of this source code is governed by a BSD-style license that
23943 // can be found in the LICENSE file.
23944 //
23945@@ -9,7 +9,7 @@
23946 // implementations. See the translator.README.txt file in the tools directory
23947 // for more information.
23948 //
23949-// $hash=e5f6f5e49687972c21461aa8055a17aa73d9f5dc$
23950+// $hash=6f3f45c5e29c0d6b3b3bf59e0dad240c6850aad4$
23951 //
23952
23953 #ifndef CEF_LIBCEF_DLL_CTOCPP_RESOURCE_SKIP_CALLBACK_CTOCPP_H_
23954diff --git a/cef/libcef_dll/ctocpp/response_ctocpp.cc b/cef/libcef_dll/ctocpp/response_ctocpp.cc
23955index 0d127812bc..e34c60e857 100644
23956--- a/cef/libcef_dll/ctocpp/response_ctocpp.cc
23957+++ b/cef/libcef_dll/ctocpp/response_ctocpp.cc
23958@@ -1,4 +1,4 @@
23959-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23960+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23961 // reserved. Use of this source code is governed by a BSD-style license that
23962 // can be found in the LICENSE file.
23963 //
23964@@ -9,7 +9,7 @@
23965 // implementations. See the translator.README.txt file in the tools directory
23966 // for more information.
23967 //
23968-// $hash=095a5d712639de515ace623f92b3098b029936c8$
23969+// $hash=ac30aa16fee147cd041b64db7f2743d578dc6384$
23970 //
23971
23972 #include "libcef_dll/ctocpp/response_ctocpp.h"
23973diff --git a/cef/libcef_dll/ctocpp/response_ctocpp.h b/cef/libcef_dll/ctocpp/response_ctocpp.h
23974index a1b1a5dcb5..4d89fbcf51 100644
23975--- a/cef/libcef_dll/ctocpp/response_ctocpp.h
23976+++ b/cef/libcef_dll/ctocpp/response_ctocpp.h
23977@@ -1,4 +1,4 @@
23978-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23979+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23980 // reserved. Use of this source code is governed by a BSD-style license that
23981 // can be found in the LICENSE file.
23982 //
23983@@ -9,7 +9,7 @@
23984 // implementations. See the translator.README.txt file in the tools directory
23985 // for more information.
23986 //
23987-// $hash=82ca98c4f8fbbac643f826f882ae4e4efe80e821$
23988+// $hash=39a5419239b8bb9345d71ad873cab02adc682f71$
23989 //
23990
23991 #ifndef CEF_LIBCEF_DLL_CTOCPP_RESPONSE_CTOCPP_H_
23992diff --git a/cef/libcef_dll/ctocpp/response_filter_ctocpp.cc b/cef/libcef_dll/ctocpp/response_filter_ctocpp.cc
23993index 0d46d8814b..90d82249ae 100644
23994--- a/cef/libcef_dll/ctocpp/response_filter_ctocpp.cc
23995+++ b/cef/libcef_dll/ctocpp/response_filter_ctocpp.cc
23996@@ -1,4 +1,4 @@
23997-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
23998+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
23999 // reserved. Use of this source code is governed by a BSD-style license that
24000 // can be found in the LICENSE file.
24001 //
24002@@ -9,7 +9,7 @@
24003 // implementations. See the translator.README.txt file in the tools directory
24004 // for more information.
24005 //
24006-// $hash=b3f3fa1f1cb167a65ad7e968b5b3c62354e83e32$
24007+// $hash=ddb4710d1e5bc73df68f132d56661b0d22520ad9$
24008 //
24009
24010 #include "libcef_dll/ctocpp/response_filter_ctocpp.h"
24011diff --git a/cef/libcef_dll/ctocpp/response_filter_ctocpp.h b/cef/libcef_dll/ctocpp/response_filter_ctocpp.h
24012index 5e94723ec1..a1f7a5eff4 100644
24013--- a/cef/libcef_dll/ctocpp/response_filter_ctocpp.h
24014+++ b/cef/libcef_dll/ctocpp/response_filter_ctocpp.h
24015@@ -1,4 +1,4 @@
24016-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24017+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24018 // reserved. Use of this source code is governed by a BSD-style license that
24019 // can be found in the LICENSE file.
24020 //
24021@@ -9,7 +9,7 @@
24022 // implementations. See the translator.README.txt file in the tools directory
24023 // for more information.
24024 //
24025-// $hash=e8747c2fe177d25d623680bd6144e179a50df203$
24026+// $hash=3e7c6b0f991e335db755172d65e2a03e5e00a270$
24027 //
24028
24029 #ifndef CEF_LIBCEF_DLL_CTOCPP_RESPONSE_FILTER_CTOCPP_H_
24030diff --git a/cef/libcef_dll/ctocpp/run_context_menu_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/run_context_menu_callback_ctocpp.cc
24031index 664e8d1c71..dede7b1aab 100644
24032--- a/cef/libcef_dll/ctocpp/run_context_menu_callback_ctocpp.cc
24033+++ b/cef/libcef_dll/ctocpp/run_context_menu_callback_ctocpp.cc
24034@@ -1,4 +1,4 @@
24035-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24036+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24037 // reserved. Use of this source code is governed by a BSD-style license that
24038 // can be found in the LICENSE file.
24039 //
24040@@ -9,7 +9,7 @@
24041 // implementations. See the translator.README.txt file in the tools directory
24042 // for more information.
24043 //
24044-// $hash=63a8d238ef8d6d46bc4950db235b5960d2eb42a2$
24045+// $hash=f77743d285768c21bd89b9955d47176ef52f1e1a$
24046 //
24047
24048 #include "libcef_dll/ctocpp/run_context_menu_callback_ctocpp.h"
24049diff --git a/cef/libcef_dll/ctocpp/run_context_menu_callback_ctocpp.h b/cef/libcef_dll/ctocpp/run_context_menu_callback_ctocpp.h
24050index e9c82b7ad6..58ed604c56 100644
24051--- a/cef/libcef_dll/ctocpp/run_context_menu_callback_ctocpp.h
24052+++ b/cef/libcef_dll/ctocpp/run_context_menu_callback_ctocpp.h
24053@@ -1,4 +1,4 @@
24054-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24055+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24056 // reserved. Use of this source code is governed by a BSD-style license that
24057 // can be found in the LICENSE file.
24058 //
24059@@ -9,7 +9,7 @@
24060 // implementations. See the translator.README.txt file in the tools directory
24061 // for more information.
24062 //
24063-// $hash=15e8c2e8426ce3f7ea6662aa7dc1a51bf541a3d2$
24064+// $hash=837fb72b6eccf8e7048e1ba8017846b261a4c3b2$
24065 //
24066
24067 #ifndef CEF_LIBCEF_DLL_CTOCPP_RUN_CONTEXT_MENU_CALLBACK_CTOCPP_H_
24068diff --git a/cef/libcef_dll/ctocpp/run_file_dialog_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/run_file_dialog_callback_ctocpp.cc
24069index ce41c989aa..fb42b0d4cf 100644
24070--- a/cef/libcef_dll/ctocpp/run_file_dialog_callback_ctocpp.cc
24071+++ b/cef/libcef_dll/ctocpp/run_file_dialog_callback_ctocpp.cc
24072@@ -1,4 +1,4 @@
24073-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24074+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24075 // reserved. Use of this source code is governed by a BSD-style license that
24076 // can be found in the LICENSE file.
24077 //
24078@@ -9,7 +9,7 @@
24079 // implementations. See the translator.README.txt file in the tools directory
24080 // for more information.
24081 //
24082-// $hash=dd5b08b33086b2ef0c9899029228c615bd75555d$
24083+// $hash=cb29585261ed25ddd2ee1b4b5c890565e72e5d22$
24084 //
24085
24086 #include "libcef_dll/ctocpp/run_file_dialog_callback_ctocpp.h"
24087diff --git a/cef/libcef_dll/ctocpp/run_file_dialog_callback_ctocpp.h b/cef/libcef_dll/ctocpp/run_file_dialog_callback_ctocpp.h
24088index 5af79fbfed..2b4fc7dde8 100644
24089--- a/cef/libcef_dll/ctocpp/run_file_dialog_callback_ctocpp.h
24090+++ b/cef/libcef_dll/ctocpp/run_file_dialog_callback_ctocpp.h
24091@@ -1,4 +1,4 @@
24092-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24093+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24094 // reserved. Use of this source code is governed by a BSD-style license that
24095 // can be found in the LICENSE file.
24096 //
24097@@ -9,7 +9,7 @@
24098 // implementations. See the translator.README.txt file in the tools directory
24099 // for more information.
24100 //
24101-// $hash=cf11a44cbafd136e5c36633b393bc2f49685cb10$
24102+// $hash=63d2d1da715395296899acc4ed165cf7dae4d78c$
24103 //
24104
24105 #ifndef CEF_LIBCEF_DLL_CTOCPP_RUN_FILE_DIALOG_CALLBACK_CTOCPP_H_
24106diff --git a/cef/libcef_dll/ctocpp/scheme_handler_factory_ctocpp.cc b/cef/libcef_dll/ctocpp/scheme_handler_factory_ctocpp.cc
24107index c2219f471b..9be13e699b 100644
24108--- a/cef/libcef_dll/ctocpp/scheme_handler_factory_ctocpp.cc
24109+++ b/cef/libcef_dll/ctocpp/scheme_handler_factory_ctocpp.cc
24110@@ -1,4 +1,4 @@
24111-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24112+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24113 // reserved. Use of this source code is governed by a BSD-style license that
24114 // can be found in the LICENSE file.
24115 //
24116@@ -9,7 +9,7 @@
24117 // implementations. See the translator.README.txt file in the tools directory
24118 // for more information.
24119 //
24120-// $hash=a81d84e127dfa02a8093d6144b934b1528e63792$
24121+// $hash=5e94a999784332a91c40a4608644bf7dc36e0729$
24122 //
24123
24124 #include "libcef_dll/ctocpp/scheme_handler_factory_ctocpp.h"
24125diff --git a/cef/libcef_dll/ctocpp/scheme_handler_factory_ctocpp.h b/cef/libcef_dll/ctocpp/scheme_handler_factory_ctocpp.h
24126index 1783069491..8e1d45052d 100644
24127--- a/cef/libcef_dll/ctocpp/scheme_handler_factory_ctocpp.h
24128+++ b/cef/libcef_dll/ctocpp/scheme_handler_factory_ctocpp.h
24129@@ -1,4 +1,4 @@
24130-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24131+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24132 // reserved. Use of this source code is governed by a BSD-style license that
24133 // can be found in the LICENSE file.
24134 //
24135@@ -9,7 +9,7 @@
24136 // implementations. See the translator.README.txt file in the tools directory
24137 // for more information.
24138 //
24139-// $hash=2e8b90402803dda047746a07de047eeb28836386$
24140+// $hash=ff0cb366799a5abce0f4e43bd98fcaf993fad77d$
24141 //
24142
24143 #ifndef CEF_LIBCEF_DLL_CTOCPP_SCHEME_HANDLER_FACTORY_CTOCPP_H_
24144diff --git a/cef/libcef_dll/ctocpp/scheme_registrar_ctocpp.cc b/cef/libcef_dll/ctocpp/scheme_registrar_ctocpp.cc
24145index 10c474483d..c86d129734 100644
24146--- a/cef/libcef_dll/ctocpp/scheme_registrar_ctocpp.cc
24147+++ b/cef/libcef_dll/ctocpp/scheme_registrar_ctocpp.cc
24148@@ -1,4 +1,4 @@
24149-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24150+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24151 // reserved. Use of this source code is governed by a BSD-style license that
24152 // can be found in the LICENSE file.
24153 //
24154@@ -9,7 +9,7 @@
24155 // implementations. See the translator.README.txt file in the tools directory
24156 // for more information.
24157 //
24158-// $hash=7e35edcef126b362aef8f288a1bdbb516ac2d9b3$
24159+// $hash=3f55a43485f2833e5000e7444d57ef47ff7af0e9$
24160 //
24161
24162 #include "libcef_dll/ctocpp/scheme_registrar_ctocpp.h"
24163diff --git a/cef/libcef_dll/ctocpp/scheme_registrar_ctocpp.h b/cef/libcef_dll/ctocpp/scheme_registrar_ctocpp.h
24164index d5109a7085..b2d1d7bed6 100644
24165--- a/cef/libcef_dll/ctocpp/scheme_registrar_ctocpp.h
24166+++ b/cef/libcef_dll/ctocpp/scheme_registrar_ctocpp.h
24167@@ -1,4 +1,4 @@
24168-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24169+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24170 // reserved. Use of this source code is governed by a BSD-style license that
24171 // can be found in the LICENSE file.
24172 //
24173@@ -9,7 +9,7 @@
24174 // implementations. See the translator.README.txt file in the tools directory
24175 // for more information.
24176 //
24177-// $hash=ca1012f1234d42169d2f513c39f05866cdc24f02$
24178+// $hash=1155632639cae3bcc3923fd590c5712359c4908e$
24179 //
24180
24181 #ifndef CEF_LIBCEF_DLL_CTOCPP_SCHEME_REGISTRAR_CTOCPP_H_
24182diff --git a/cef/libcef_dll/ctocpp/select_client_certificate_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/select_client_certificate_callback_ctocpp.cc
24183index 8c8f234926..6d2ac0ee92 100644
24184--- a/cef/libcef_dll/ctocpp/select_client_certificate_callback_ctocpp.cc
24185+++ b/cef/libcef_dll/ctocpp/select_client_certificate_callback_ctocpp.cc
24186@@ -1,4 +1,4 @@
24187-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24188+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24189 // reserved. Use of this source code is governed by a BSD-style license that
24190 // can be found in the LICENSE file.
24191 //
24192@@ -9,7 +9,7 @@
24193 // implementations. See the translator.README.txt file in the tools directory
24194 // for more information.
24195 //
24196-// $hash=0f367fb3849adf120197cf9dc38f91ea1d050abd$
24197+// $hash=97852992a8406868d2b0dedf08a538a78b1cde9c$
24198 //
24199
24200 #include "libcef_dll/ctocpp/select_client_certificate_callback_ctocpp.h"
24201diff --git a/cef/libcef_dll/ctocpp/select_client_certificate_callback_ctocpp.h b/cef/libcef_dll/ctocpp/select_client_certificate_callback_ctocpp.h
24202index bf055d8cb8..d3d36a9fcb 100644
24203--- a/cef/libcef_dll/ctocpp/select_client_certificate_callback_ctocpp.h
24204+++ b/cef/libcef_dll/ctocpp/select_client_certificate_callback_ctocpp.h
24205@@ -1,4 +1,4 @@
24206-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24207+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24208 // reserved. Use of this source code is governed by a BSD-style license that
24209 // can be found in the LICENSE file.
24210 //
24211@@ -9,7 +9,7 @@
24212 // implementations. See the translator.README.txt file in the tools directory
24213 // for more information.
24214 //
24215-// $hash=868c4d33bd4776ca5f2044d2707f2a78f16bd074$
24216+// $hash=d18f32f1cb6917a6f6e83be4321e36aad309ea8b$
24217 //
24218
24219 #ifndef CEF_LIBCEF_DLL_CTOCPP_SELECT_CLIENT_CERTIFICATE_CALLBACK_CTOCPP_H_
24220diff --git a/cef/libcef_dll/ctocpp/server_ctocpp.cc b/cef/libcef_dll/ctocpp/server_ctocpp.cc
24221index 1891681396..51fe2ead4b 100644
24222--- a/cef/libcef_dll/ctocpp/server_ctocpp.cc
24223+++ b/cef/libcef_dll/ctocpp/server_ctocpp.cc
24224@@ -1,4 +1,4 @@
24225-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24226+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24227 // reserved. Use of this source code is governed by a BSD-style license that
24228 // can be found in the LICENSE file.
24229 //
24230@@ -9,7 +9,7 @@
24231 // implementations. See the translator.README.txt file in the tools directory
24232 // for more information.
24233 //
24234-// $hash=080b8ca695bf378c062506977ebe001297effdb5$
24235+// $hash=d8cfb6cafc2a9aa0cffe4a998071e8a96b04740b$
24236 //
24237
24238 #include "libcef_dll/ctocpp/server_ctocpp.h"
24239diff --git a/cef/libcef_dll/ctocpp/server_ctocpp.h b/cef/libcef_dll/ctocpp/server_ctocpp.h
24240index 1f92857cb7..113dc4b5ff 100644
24241--- a/cef/libcef_dll/ctocpp/server_ctocpp.h
24242+++ b/cef/libcef_dll/ctocpp/server_ctocpp.h
24243@@ -1,4 +1,4 @@
24244-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24245+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24246 // reserved. Use of this source code is governed by a BSD-style license that
24247 // can be found in the LICENSE file.
24248 //
24249@@ -9,7 +9,7 @@
24250 // implementations. See the translator.README.txt file in the tools directory
24251 // for more information.
24252 //
24253-// $hash=0e1ecc65bf21127a32292fe7e84378bacbf649ed$
24254+// $hash=0669fa6732d15e3079341843673c17f4578c3747$
24255 //
24256
24257 #ifndef CEF_LIBCEF_DLL_CTOCPP_SERVER_CTOCPP_H_
24258diff --git a/cef/libcef_dll/ctocpp/server_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/server_handler_ctocpp.cc
24259index 217882a5f3..b82fd8f5b1 100644
24260--- a/cef/libcef_dll/ctocpp/server_handler_ctocpp.cc
24261+++ b/cef/libcef_dll/ctocpp/server_handler_ctocpp.cc
24262@@ -1,4 +1,4 @@
24263-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24264+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24265 // reserved. Use of this source code is governed by a BSD-style license that
24266 // can be found in the LICENSE file.
24267 //
24268@@ -9,7 +9,7 @@
24269 // implementations. See the translator.README.txt file in the tools directory
24270 // for more information.
24271 //
24272-// $hash=ee34f4005745102926018e7c4bdeef7fcb16ca32$
24273+// $hash=a14c40cc86f5fd61d548d981c99c59a559619eda$
24274 //
24275
24276 #include "libcef_dll/ctocpp/server_handler_ctocpp.h"
24277diff --git a/cef/libcef_dll/ctocpp/server_handler_ctocpp.h b/cef/libcef_dll/ctocpp/server_handler_ctocpp.h
24278index 227847b544..08df48f950 100644
24279--- a/cef/libcef_dll/ctocpp/server_handler_ctocpp.h
24280+++ b/cef/libcef_dll/ctocpp/server_handler_ctocpp.h
24281@@ -1,4 +1,4 @@
24282-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24283+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24284 // reserved. Use of this source code is governed by a BSD-style license that
24285 // can be found in the LICENSE file.
24286 //
24287@@ -9,7 +9,7 @@
24288 // implementations. See the translator.README.txt file in the tools directory
24289 // for more information.
24290 //
24291-// $hash=20281fa6c712f4f712e6371dfed2e184227ff89c$
24292+// $hash=b9b38b204c2b9d385ebefb11aa0b45efcd684cbc$
24293 //
24294
24295 #ifndef CEF_LIBCEF_DLL_CTOCPP_SERVER_HANDLER_CTOCPP_H_
24296diff --git a/cef/libcef_dll/ctocpp/set_cookie_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/set_cookie_callback_ctocpp.cc
24297index 53c2486cd9..63048eec4b 100644
24298--- a/cef/libcef_dll/ctocpp/set_cookie_callback_ctocpp.cc
24299+++ b/cef/libcef_dll/ctocpp/set_cookie_callback_ctocpp.cc
24300@@ -1,4 +1,4 @@
24301-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24302+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24303 // reserved. Use of this source code is governed by a BSD-style license that
24304 // can be found in the LICENSE file.
24305 //
24306@@ -9,7 +9,7 @@
24307 // implementations. See the translator.README.txt file in the tools directory
24308 // for more information.
24309 //
24310-// $hash=4dc50d118e2ee97dff3eadbb8474743c873b1b7f$
24311+// $hash=5767c600167159c0ad3f5d10461f1bf107c668cc$
24312 //
24313
24314 #include "libcef_dll/ctocpp/set_cookie_callback_ctocpp.h"
24315diff --git a/cef/libcef_dll/ctocpp/set_cookie_callback_ctocpp.h b/cef/libcef_dll/ctocpp/set_cookie_callback_ctocpp.h
24316index 69d695f626..f4ca2b5612 100644
24317--- a/cef/libcef_dll/ctocpp/set_cookie_callback_ctocpp.h
24318+++ b/cef/libcef_dll/ctocpp/set_cookie_callback_ctocpp.h
24319@@ -1,4 +1,4 @@
24320-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24321+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24322 // reserved. Use of this source code is governed by a BSD-style license that
24323 // can be found in the LICENSE file.
24324 //
24325@@ -9,7 +9,7 @@
24326 // implementations. See the translator.README.txt file in the tools directory
24327 // for more information.
24328 //
24329-// $hash=8c3441fdc78f2f566903a7c2dbb8660954e677cc$
24330+// $hash=83c8143e3d126fca9a02f8e5ffa75bf99d291518$
24331 //
24332
24333 #ifndef CEF_LIBCEF_DLL_CTOCPP_SET_COOKIE_CALLBACK_CTOCPP_H_
24334diff --git a/cef/libcef_dll/ctocpp/sslinfo_ctocpp.cc b/cef/libcef_dll/ctocpp/sslinfo_ctocpp.cc
24335index a173d2d0f2..81512b8b69 100644
24336--- a/cef/libcef_dll/ctocpp/sslinfo_ctocpp.cc
24337+++ b/cef/libcef_dll/ctocpp/sslinfo_ctocpp.cc
24338@@ -1,4 +1,4 @@
24339-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24340+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24341 // reserved. Use of this source code is governed by a BSD-style license that
24342 // can be found in the LICENSE file.
24343 //
24344@@ -9,7 +9,7 @@
24345 // implementations. See the translator.README.txt file in the tools directory
24346 // for more information.
24347 //
24348-// $hash=ce4a97355d799789b70c90757138b5c639da55a8$
24349+// $hash=67037943cdfae2a56924694d302a4b5697dc9a22$
24350 //
24351
24352 #include "libcef_dll/ctocpp/sslinfo_ctocpp.h"
24353diff --git a/cef/libcef_dll/ctocpp/sslinfo_ctocpp.h b/cef/libcef_dll/ctocpp/sslinfo_ctocpp.h
24354index f3326b17fb..a0bc9e7f5b 100644
24355--- a/cef/libcef_dll/ctocpp/sslinfo_ctocpp.h
24356+++ b/cef/libcef_dll/ctocpp/sslinfo_ctocpp.h
24357@@ -1,4 +1,4 @@
24358-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24359+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24360 // reserved. Use of this source code is governed by a BSD-style license that
24361 // can be found in the LICENSE file.
24362 //
24363@@ -9,7 +9,7 @@
24364 // implementations. See the translator.README.txt file in the tools directory
24365 // for more information.
24366 //
24367-// $hash=ce3dfac0c94806a0e33ba0783482c3c3f2dada1c$
24368+// $hash=2ed723f95adb888bd72792ea622f466d27eff641$
24369 //
24370
24371 #ifndef CEF_LIBCEF_DLL_CTOCPP_SSLINFO_CTOCPP_H_
24372diff --git a/cef/libcef_dll/ctocpp/sslstatus_ctocpp.cc b/cef/libcef_dll/ctocpp/sslstatus_ctocpp.cc
24373index cf40a1c9b9..b0392d95c4 100644
24374--- a/cef/libcef_dll/ctocpp/sslstatus_ctocpp.cc
24375+++ b/cef/libcef_dll/ctocpp/sslstatus_ctocpp.cc
24376@@ -1,4 +1,4 @@
24377-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24378+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24379 // reserved. Use of this source code is governed by a BSD-style license that
24380 // can be found in the LICENSE file.
24381 //
24382@@ -9,7 +9,7 @@
24383 // implementations. See the translator.README.txt file in the tools directory
24384 // for more information.
24385 //
24386-// $hash=037e9e9e94f032a78fa6b2f870b1959b3c41a854$
24387+// $hash=18492d14d83b0dfd272ddd9dd95a2fc292bf8904$
24388 //
24389
24390 #include "libcef_dll/ctocpp/sslstatus_ctocpp.h"
24391diff --git a/cef/libcef_dll/ctocpp/sslstatus_ctocpp.h b/cef/libcef_dll/ctocpp/sslstatus_ctocpp.h
24392index 246fb8c0f1..66a1b4e238 100644
24393--- a/cef/libcef_dll/ctocpp/sslstatus_ctocpp.h
24394+++ b/cef/libcef_dll/ctocpp/sslstatus_ctocpp.h
24395@@ -1,4 +1,4 @@
24396-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24397+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24398 // reserved. Use of this source code is governed by a BSD-style license that
24399 // can be found in the LICENSE file.
24400 //
24401@@ -9,7 +9,7 @@
24402 // implementations. See the translator.README.txt file in the tools directory
24403 // for more information.
24404 //
24405-// $hash=a3876890dd91d430af51c1f0ce639e8449453bc3$
24406+// $hash=36e17cab076ba840f97b3c90045548b2d47c0c3a$
24407 //
24408
24409 #ifndef CEF_LIBCEF_DLL_CTOCPP_SSLSTATUS_CTOCPP_H_
24410diff --git a/cef/libcef_dll/ctocpp/stream_reader_ctocpp.cc b/cef/libcef_dll/ctocpp/stream_reader_ctocpp.cc
24411index 92a009d4a8..522ebdea88 100644
24412--- a/cef/libcef_dll/ctocpp/stream_reader_ctocpp.cc
24413+++ b/cef/libcef_dll/ctocpp/stream_reader_ctocpp.cc
24414@@ -1,4 +1,4 @@
24415-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24416+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24417 // reserved. Use of this source code is governed by a BSD-style license that
24418 // can be found in the LICENSE file.
24419 //
24420@@ -9,7 +9,7 @@
24421 // implementations. See the translator.README.txt file in the tools directory
24422 // for more information.
24423 //
24424-// $hash=8f50e68fb34d73fef8f33ce31423ac74bbd4841b$
24425+// $hash=964179bd73f8b5fa8d8adbd955deb7e720caaca7$
24426 //
24427
24428 #include "libcef_dll/ctocpp/stream_reader_ctocpp.h"
24429diff --git a/cef/libcef_dll/ctocpp/stream_reader_ctocpp.h b/cef/libcef_dll/ctocpp/stream_reader_ctocpp.h
24430index cb25318df3..8aa36e1e84 100644
24431--- a/cef/libcef_dll/ctocpp/stream_reader_ctocpp.h
24432+++ b/cef/libcef_dll/ctocpp/stream_reader_ctocpp.h
24433@@ -1,4 +1,4 @@
24434-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24435+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24436 // reserved. Use of this source code is governed by a BSD-style license that
24437 // can be found in the LICENSE file.
24438 //
24439@@ -9,7 +9,7 @@
24440 // implementations. See the translator.README.txt file in the tools directory
24441 // for more information.
24442 //
24443-// $hash=9e52f14c3559e2cc88c422105b9cea12a5be65b9$
24444+// $hash=9797745dea00aea7c768c2ed96c6c05af8053d20$
24445 //
24446
24447 #ifndef CEF_LIBCEF_DLL_CTOCPP_STREAM_READER_CTOCPP_H_
24448diff --git a/cef/libcef_dll/ctocpp/stream_writer_ctocpp.cc b/cef/libcef_dll/ctocpp/stream_writer_ctocpp.cc
24449index f43660df52..d11649c31b 100644
24450--- a/cef/libcef_dll/ctocpp/stream_writer_ctocpp.cc
24451+++ b/cef/libcef_dll/ctocpp/stream_writer_ctocpp.cc
24452@@ -1,4 +1,4 @@
24453-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24454+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24455 // reserved. Use of this source code is governed by a BSD-style license that
24456 // can be found in the LICENSE file.
24457 //
24458@@ -9,7 +9,7 @@
24459 // implementations. See the translator.README.txt file in the tools directory
24460 // for more information.
24461 //
24462-// $hash=f79416c520b2744118ca54319dc1ce0d57ca10b8$
24463+// $hash=e32b4745b887e33f589cb04e8b46a7317686e4c2$
24464 //
24465
24466 #include "libcef_dll/ctocpp/stream_writer_ctocpp.h"
24467diff --git a/cef/libcef_dll/ctocpp/stream_writer_ctocpp.h b/cef/libcef_dll/ctocpp/stream_writer_ctocpp.h
24468index 7ef7648650..40eee3aaf9 100644
24469--- a/cef/libcef_dll/ctocpp/stream_writer_ctocpp.h
24470+++ b/cef/libcef_dll/ctocpp/stream_writer_ctocpp.h
24471@@ -1,4 +1,4 @@
24472-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24473+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24474 // reserved. Use of this source code is governed by a BSD-style license that
24475 // can be found in the LICENSE file.
24476 //
24477@@ -9,7 +9,7 @@
24478 // implementations. See the translator.README.txt file in the tools directory
24479 // for more information.
24480 //
24481-// $hash=35633443453d19b5089b4bfa493b42f1497064f6$
24482+// $hash=7aca7e4794048577217de35c3a8eab52ab4ab9b7$
24483 //
24484
24485 #ifndef CEF_LIBCEF_DLL_CTOCPP_STREAM_WRITER_CTOCPP_H_
24486diff --git a/cef/libcef_dll/ctocpp/string_visitor_ctocpp.cc b/cef/libcef_dll/ctocpp/string_visitor_ctocpp.cc
24487index 55279345da..c1ece7b76f 100644
24488--- a/cef/libcef_dll/ctocpp/string_visitor_ctocpp.cc
24489+++ b/cef/libcef_dll/ctocpp/string_visitor_ctocpp.cc
24490@@ -1,4 +1,4 @@
24491-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24492+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24493 // reserved. Use of this source code is governed by a BSD-style license that
24494 // can be found in the LICENSE file.
24495 //
24496@@ -9,7 +9,7 @@
24497 // implementations. See the translator.README.txt file in the tools directory
24498 // for more information.
24499 //
24500-// $hash=f9a94b45084ce5da324706dcc36605d478e200b3$
24501+// $hash=97c52e0e29be9e4452825fb57d4014221c537baa$
24502 //
24503
24504 #include "libcef_dll/ctocpp/string_visitor_ctocpp.h"
24505diff --git a/cef/libcef_dll/ctocpp/string_visitor_ctocpp.h b/cef/libcef_dll/ctocpp/string_visitor_ctocpp.h
24506index bf57acd90c..c107e783ea 100644
24507--- a/cef/libcef_dll/ctocpp/string_visitor_ctocpp.h
24508+++ b/cef/libcef_dll/ctocpp/string_visitor_ctocpp.h
24509@@ -1,4 +1,4 @@
24510-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24511+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24512 // reserved. Use of this source code is governed by a BSD-style license that
24513 // can be found in the LICENSE file.
24514 //
24515@@ -9,7 +9,7 @@
24516 // implementations. See the translator.README.txt file in the tools directory
24517 // for more information.
24518 //
24519-// $hash=f9e763cd2d5babce18e4584c315ee279bb2ed7c5$
24520+// $hash=470dd514d2a3091216588819ee28296424649b57$
24521 //
24522
24523 #ifndef CEF_LIBCEF_DLL_CTOCPP_STRING_VISITOR_CTOCPP_H_
24524diff --git a/cef/libcef_dll/ctocpp/task_ctocpp.cc b/cef/libcef_dll/ctocpp/task_ctocpp.cc
24525index 1909003d20..d621f77995 100644
24526--- a/cef/libcef_dll/ctocpp/task_ctocpp.cc
24527+++ b/cef/libcef_dll/ctocpp/task_ctocpp.cc
24528@@ -1,4 +1,4 @@
24529-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24530+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24531 // reserved. Use of this source code is governed by a BSD-style license that
24532 // can be found in the LICENSE file.
24533 //
24534@@ -9,7 +9,7 @@
24535 // implementations. See the translator.README.txt file in the tools directory
24536 // for more information.
24537 //
24538-// $hash=9e0bf935d4cb59b78ea08501b990ba401a3bc4fd$
24539+// $hash=b99582b454aa33c5e9b2fa3f891ed0754621c377$
24540 //
24541
24542 #include "libcef_dll/ctocpp/task_ctocpp.h"
24543diff --git a/cef/libcef_dll/ctocpp/task_ctocpp.h b/cef/libcef_dll/ctocpp/task_ctocpp.h
24544index 58d24bafb2..0fdb427d2e 100644
24545--- a/cef/libcef_dll/ctocpp/task_ctocpp.h
24546+++ b/cef/libcef_dll/ctocpp/task_ctocpp.h
24547@@ -1,4 +1,4 @@
24548-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24549+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24550 // reserved. Use of this source code is governed by a BSD-style license that
24551 // can be found in the LICENSE file.
24552 //
24553@@ -9,7 +9,7 @@
24554 // implementations. See the translator.README.txt file in the tools directory
24555 // for more information.
24556 //
24557-// $hash=cdf9967908bbc36202fab5804cf12566f3743527$
24558+// $hash=ec78aa696165cd02a3b7f19e877b89d58518d5ad$
24559 //
24560
24561 #ifndef CEF_LIBCEF_DLL_CTOCPP_TASK_CTOCPP_H_
24562diff --git a/cef/libcef_dll/ctocpp/task_runner_ctocpp.cc b/cef/libcef_dll/ctocpp/task_runner_ctocpp.cc
24563index 449335bd2f..89bf91e95c 100644
24564--- a/cef/libcef_dll/ctocpp/task_runner_ctocpp.cc
24565+++ b/cef/libcef_dll/ctocpp/task_runner_ctocpp.cc
24566@@ -1,4 +1,4 @@
24567-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24568+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24569 // reserved. Use of this source code is governed by a BSD-style license that
24570 // can be found in the LICENSE file.
24571 //
24572@@ -9,7 +9,7 @@
24573 // implementations. See the translator.README.txt file in the tools directory
24574 // for more information.
24575 //
24576-// $hash=f103c70132477cac5ba83a5a5a33d73d94fb84c0$
24577+// $hash=c4e54b985b45c9cf57f70a3c560fb1d6c5230f9a$
24578 //
24579
24580 #include "libcef_dll/ctocpp/task_runner_ctocpp.h"
24581diff --git a/cef/libcef_dll/ctocpp/task_runner_ctocpp.h b/cef/libcef_dll/ctocpp/task_runner_ctocpp.h
24582index d5e031e973..02fd8ed932 100644
24583--- a/cef/libcef_dll/ctocpp/task_runner_ctocpp.h
24584+++ b/cef/libcef_dll/ctocpp/task_runner_ctocpp.h
24585@@ -1,4 +1,4 @@
24586-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24587+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24588 // reserved. Use of this source code is governed by a BSD-style license that
24589 // can be found in the LICENSE file.
24590 //
24591@@ -9,7 +9,7 @@
24592 // implementations. See the translator.README.txt file in the tools directory
24593 // for more information.
24594 //
24595-// $hash=2f61617ce59c2fe7ac1ad6f9944646ca712931cf$
24596+// $hash=ed29a7e48a3c44c14ad26a22fe2dbd595a253724$
24597 //
24598
24599 #ifndef CEF_LIBCEF_DLL_CTOCPP_TASK_RUNNER_CTOCPP_H_
24600diff --git a/cef/libcef_dll/ctocpp/test/translator_test_ctocpp.cc b/cef/libcef_dll/ctocpp/test/translator_test_ctocpp.cc
24601index af3527075f..2c354cd6ee 100644
24602--- a/cef/libcef_dll/ctocpp/test/translator_test_ctocpp.cc
24603+++ b/cef/libcef_dll/ctocpp/test/translator_test_ctocpp.cc
24604@@ -1,4 +1,4 @@
24605-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24606+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24607 // reserved. Use of this source code is governed by a BSD-style license that
24608 // can be found in the LICENSE file.
24609 //
24610@@ -9,7 +9,7 @@
24611 // implementations. See the translator.README.txt file in the tools directory
24612 // for more information.
24613 //
24614-// $hash=ff27c226ced0b2651b858eadea688d164dfa777e$
24615+// $hash=43f755239342406e0300dc9508b0c52a8a6fe8e8$
24616 //
24617
24618 #include "libcef_dll/ctocpp/test/translator_test_ctocpp.h"
24619diff --git a/cef/libcef_dll/ctocpp/test/translator_test_ctocpp.h b/cef/libcef_dll/ctocpp/test/translator_test_ctocpp.h
24620index 9a2ff9e3fe..01596482ff 100644
24621--- a/cef/libcef_dll/ctocpp/test/translator_test_ctocpp.h
24622+++ b/cef/libcef_dll/ctocpp/test/translator_test_ctocpp.h
24623@@ -1,4 +1,4 @@
24624-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24625+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24626 // reserved. Use of this source code is governed by a BSD-style license that
24627 // can be found in the LICENSE file.
24628 //
24629@@ -9,7 +9,7 @@
24630 // implementations. See the translator.README.txt file in the tools directory
24631 // for more information.
24632 //
24633-// $hash=db05a06c80f30f0d25b2eec12b50bbf0310e36fb$
24634+// $hash=b58ddca240db2fb0fc1bdedf70c64b7b21f30e69$
24635 //
24636
24637 #ifndef CEF_LIBCEF_DLL_CTOCPP_TEST_TRANSLATOR_TEST_CTOCPP_H_
24638diff --git a/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_client_child_ctocpp.cc b/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_client_child_ctocpp.cc
24639index 2d89e7ac7b..89c9f27dba 100644
24640--- a/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_client_child_ctocpp.cc
24641+++ b/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_client_child_ctocpp.cc
24642@@ -1,4 +1,4 @@
24643-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24644+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24645 // reserved. Use of this source code is governed by a BSD-style license that
24646 // can be found in the LICENSE file.
24647 //
24648@@ -9,7 +9,7 @@
24649 // implementations. See the translator.README.txt file in the tools directory
24650 // for more information.
24651 //
24652-// $hash=a92a6f312228d01293ecb6197e7105d8f1c9fc19$
24653+// $hash=6aacf410858db1defe08179c985f4466fca2751f$
24654 //
24655
24656 #include "libcef_dll/ctocpp/test/translator_test_ref_ptr_client_child_ctocpp.h"
24657diff --git a/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_client_child_ctocpp.h b/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_client_child_ctocpp.h
24658index 62bc2be0af..944ad33402 100644
24659--- a/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_client_child_ctocpp.h
24660+++ b/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_client_child_ctocpp.h
24661@@ -1,4 +1,4 @@
24662-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24663+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24664 // reserved. Use of this source code is governed by a BSD-style license that
24665 // can be found in the LICENSE file.
24666 //
24667@@ -9,7 +9,7 @@
24668 // implementations. See the translator.README.txt file in the tools directory
24669 // for more information.
24670 //
24671-// $hash=451ca857138ff1d4540a0626549f9ecb0b391e59$
24672+// $hash=f3c4158147b008b8fff038ff6f731419a9950c4d$
24673 //
24674
24675 #ifndef CEF_LIBCEF_DLL_CTOCPP_TEST_TRANSLATOR_TEST_REF_PTR_CLIENT_CHILD_CTOCPP_H_
24676diff --git a/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_client_ctocpp.cc b/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_client_ctocpp.cc
24677index 0720373300..014e615300 100644
24678--- a/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_client_ctocpp.cc
24679+++ b/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_client_ctocpp.cc
24680@@ -1,4 +1,4 @@
24681-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24682+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24683 // reserved. Use of this source code is governed by a BSD-style license that
24684 // can be found in the LICENSE file.
24685 //
24686@@ -9,7 +9,7 @@
24687 // implementations. See the translator.README.txt file in the tools directory
24688 // for more information.
24689 //
24690-// $hash=3e4c3d73f50654bf23ff5e23ec18102818f60f00$
24691+// $hash=ca187683ddab3822fcf3d957c76ed27db6e8e433$
24692 //
24693
24694 #include "libcef_dll/ctocpp/test/translator_test_ref_ptr_client_ctocpp.h"
24695diff --git a/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_client_ctocpp.h b/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_client_ctocpp.h
24696index ab2970c1da..0c06f5828d 100644
24697--- a/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_client_ctocpp.h
24698+++ b/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_client_ctocpp.h
24699@@ -1,4 +1,4 @@
24700-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24701+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24702 // reserved. Use of this source code is governed by a BSD-style license that
24703 // can be found in the LICENSE file.
24704 //
24705@@ -9,7 +9,7 @@
24706 // implementations. See the translator.README.txt file in the tools directory
24707 // for more information.
24708 //
24709-// $hash=c4901e13820abd27a4ac5e9a67a9a94f08ca8a11$
24710+// $hash=2e2a98039972801804b3b4d7b1d1220406489ad3$
24711 //
24712
24713 #ifndef CEF_LIBCEF_DLL_CTOCPP_TEST_TRANSLATOR_TEST_REF_PTR_CLIENT_CTOCPP_H_
24714diff --git a/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_child_child_ctocpp.cc b/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_child_child_ctocpp.cc
24715index a4f56c3051..8713b04d02 100644
24716--- a/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_child_child_ctocpp.cc
24717+++ b/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_child_child_ctocpp.cc
24718@@ -1,4 +1,4 @@
24719-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24720+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24721 // reserved. Use of this source code is governed by a BSD-style license that
24722 // can be found in the LICENSE file.
24723 //
24724@@ -9,7 +9,7 @@
24725 // implementations. See the translator.README.txt file in the tools directory
24726 // for more information.
24727 //
24728-// $hash=86fc8175e83449b99699a879e1b2a9279058704f$
24729+// $hash=5e599a9605e47372695d89a86eab37827e5971f2$
24730 //
24731
24732 #include "libcef_dll/ctocpp/test/translator_test_ref_ptr_library_child_child_ctocpp.h"
24733diff --git a/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_child_child_ctocpp.h b/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_child_child_ctocpp.h
24734index 3599497403..b404a984d3 100644
24735--- a/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_child_child_ctocpp.h
24736+++ b/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_child_child_ctocpp.h
24737@@ -1,4 +1,4 @@
24738-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24739+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24740 // reserved. Use of this source code is governed by a BSD-style license that
24741 // can be found in the LICENSE file.
24742 //
24743@@ -9,7 +9,7 @@
24744 // implementations. See the translator.README.txt file in the tools directory
24745 // for more information.
24746 //
24747-// $hash=6a66e2e38975072adf919a3b585ce94b254a7639$
24748+// $hash=6879832c76fd2d8c82259db714adac84c71d8913$
24749 //
24750
24751 #ifndef CEF_LIBCEF_DLL_CTOCPP_TEST_TRANSLATOR_TEST_REF_PTR_LIBRARY_CHILD_CHILD_CTOCPP_H_
24752diff --git a/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_child_ctocpp.cc b/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_child_ctocpp.cc
24753index a4b1f2f7c3..de345e9eed 100644
24754--- a/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_child_ctocpp.cc
24755+++ b/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_child_ctocpp.cc
24756@@ -1,4 +1,4 @@
24757-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24758+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24759 // reserved. Use of this source code is governed by a BSD-style license that
24760 // can be found in the LICENSE file.
24761 //
24762@@ -9,7 +9,7 @@
24763 // implementations. See the translator.README.txt file in the tools directory
24764 // for more information.
24765 //
24766-// $hash=b5974d668995480f482832f5e64c212b82c715d1$
24767+// $hash=8559b9fd1e73bb91333d687174f5730e67f1f0f2$
24768 //
24769
24770 #include "libcef_dll/ctocpp/test/translator_test_ref_ptr_library_child_ctocpp.h"
24771diff --git a/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_child_ctocpp.h b/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_child_ctocpp.h
24772index 4e44691bc8..36cf35a8f8 100644
24773--- a/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_child_ctocpp.h
24774+++ b/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_child_ctocpp.h
24775@@ -1,4 +1,4 @@
24776-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24777+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24778 // reserved. Use of this source code is governed by a BSD-style license that
24779 // can be found in the LICENSE file.
24780 //
24781@@ -9,7 +9,7 @@
24782 // implementations. See the translator.README.txt file in the tools directory
24783 // for more information.
24784 //
24785-// $hash=0d111f8f1933fc569fa28128a85c269fb6b0e173$
24786+// $hash=0fad7ec9b17e6ccd0af8f32290745438e1c11b91$
24787 //
24788
24789 #ifndef CEF_LIBCEF_DLL_CTOCPP_TEST_TRANSLATOR_TEST_REF_PTR_LIBRARY_CHILD_CTOCPP_H_
24790diff --git a/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_ctocpp.cc b/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_ctocpp.cc
24791index 0f681f8f2d..52a05afcb8 100644
24792--- a/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_ctocpp.cc
24793+++ b/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_ctocpp.cc
24794@@ -1,4 +1,4 @@
24795-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24796+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24797 // reserved. Use of this source code is governed by a BSD-style license that
24798 // can be found in the LICENSE file.
24799 //
24800@@ -9,7 +9,7 @@
24801 // implementations. See the translator.README.txt file in the tools directory
24802 // for more information.
24803 //
24804-// $hash=3885a1c1f273b7a7558fbd3128636b9cfa23b791$
24805+// $hash=f320ce71f5396e28767dfdb2292c87a8c2396cf8$
24806 //
24807
24808 #include "libcef_dll/ctocpp/test/translator_test_ref_ptr_library_ctocpp.h"
24809diff --git a/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_ctocpp.h b/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_ctocpp.h
24810index 28d51db42a..847b296fc4 100644
24811--- a/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_ctocpp.h
24812+++ b/cef/libcef_dll/ctocpp/test/translator_test_ref_ptr_library_ctocpp.h
24813@@ -1,4 +1,4 @@
24814-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24815+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24816 // reserved. Use of this source code is governed by a BSD-style license that
24817 // can be found in the LICENSE file.
24818 //
24819@@ -9,7 +9,7 @@
24820 // implementations. See the translator.README.txt file in the tools directory
24821 // for more information.
24822 //
24823-// $hash=abede61a749b1cbb1f546918c32601cb707a6ed7$
24824+// $hash=7e04728098bdaabddebe04874ee5b90acc87109b$
24825 //
24826
24827 #ifndef CEF_LIBCEF_DLL_CTOCPP_TEST_TRANSLATOR_TEST_REF_PTR_LIBRARY_CTOCPP_H_
24828diff --git a/cef/libcef_dll/ctocpp/test/translator_test_scoped_client_child_ctocpp.cc b/cef/libcef_dll/ctocpp/test/translator_test_scoped_client_child_ctocpp.cc
24829index 650cbf185c..2d9a98250d 100644
24830--- a/cef/libcef_dll/ctocpp/test/translator_test_scoped_client_child_ctocpp.cc
24831+++ b/cef/libcef_dll/ctocpp/test/translator_test_scoped_client_child_ctocpp.cc
24832@@ -1,4 +1,4 @@
24833-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24834+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24835 // reserved. Use of this source code is governed by a BSD-style license that
24836 // can be found in the LICENSE file.
24837 //
24838@@ -9,7 +9,7 @@
24839 // implementations. See the translator.README.txt file in the tools directory
24840 // for more information.
24841 //
24842-// $hash=1750bdef7a5b01b56a7c7bd34aeb22994434f436$
24843+// $hash=fa5ba1bf14400032e49a447b7fe9dbe9cf1ba397$
24844 //
24845
24846 #include "libcef_dll/ctocpp/test/translator_test_scoped_client_child_ctocpp.h"
24847diff --git a/cef/libcef_dll/ctocpp/test/translator_test_scoped_client_child_ctocpp.h b/cef/libcef_dll/ctocpp/test/translator_test_scoped_client_child_ctocpp.h
24848index 6bb32d555c..7476a3f9cf 100644
24849--- a/cef/libcef_dll/ctocpp/test/translator_test_scoped_client_child_ctocpp.h
24850+++ b/cef/libcef_dll/ctocpp/test/translator_test_scoped_client_child_ctocpp.h
24851@@ -1,4 +1,4 @@
24852-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24853+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24854 // reserved. Use of this source code is governed by a BSD-style license that
24855 // can be found in the LICENSE file.
24856 //
24857@@ -9,7 +9,7 @@
24858 // implementations. See the translator.README.txt file in the tools directory
24859 // for more information.
24860 //
24861-// $hash=572919914dd3e3c22d62a34c203ca73831cdb732$
24862+// $hash=4ab24d3002067939ef0106a8686ca59559b2270e$
24863 //
24864
24865 #ifndef CEF_LIBCEF_DLL_CTOCPP_TEST_TRANSLATOR_TEST_SCOPED_CLIENT_CHILD_CTOCPP_H_
24866diff --git a/cef/libcef_dll/ctocpp/test/translator_test_scoped_client_ctocpp.cc b/cef/libcef_dll/ctocpp/test/translator_test_scoped_client_ctocpp.cc
24867index c32a2f90aa..431593d8bb 100644
24868--- a/cef/libcef_dll/ctocpp/test/translator_test_scoped_client_ctocpp.cc
24869+++ b/cef/libcef_dll/ctocpp/test/translator_test_scoped_client_ctocpp.cc
24870@@ -1,4 +1,4 @@
24871-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24872+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24873 // reserved. Use of this source code is governed by a BSD-style license that
24874 // can be found in the LICENSE file.
24875 //
24876@@ -9,7 +9,7 @@
24877 // implementations. See the translator.README.txt file in the tools directory
24878 // for more information.
24879 //
24880-// $hash=bfa7d52202c1d09dfa86e05df4f60f3b9264e19c$
24881+// $hash=47bbdadfb28bf00824856270be679932f99df645$
24882 //
24883
24884 #include "libcef_dll/ctocpp/test/translator_test_scoped_client_ctocpp.h"
24885diff --git a/cef/libcef_dll/ctocpp/test/translator_test_scoped_client_ctocpp.h b/cef/libcef_dll/ctocpp/test/translator_test_scoped_client_ctocpp.h
24886index 1f384e914a..8ca713b78e 100644
24887--- a/cef/libcef_dll/ctocpp/test/translator_test_scoped_client_ctocpp.h
24888+++ b/cef/libcef_dll/ctocpp/test/translator_test_scoped_client_ctocpp.h
24889@@ -1,4 +1,4 @@
24890-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24891+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24892 // reserved. Use of this source code is governed by a BSD-style license that
24893 // can be found in the LICENSE file.
24894 //
24895@@ -9,7 +9,7 @@
24896 // implementations. See the translator.README.txt file in the tools directory
24897 // for more information.
24898 //
24899-// $hash=d5b70ad6c7c25b3edfefd8f058d814943ed386d0$
24900+// $hash=d0a9d6ca17834c09fbd63e06ebb38c337dc64f62$
24901 //
24902
24903 #ifndef CEF_LIBCEF_DLL_CTOCPP_TEST_TRANSLATOR_TEST_SCOPED_CLIENT_CTOCPP_H_
24904diff --git a/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_child_child_ctocpp.cc b/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_child_child_ctocpp.cc
24905index cd5e9f8308..491addae2c 100644
24906--- a/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_child_child_ctocpp.cc
24907+++ b/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_child_child_ctocpp.cc
24908@@ -1,4 +1,4 @@
24909-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24910+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24911 // reserved. Use of this source code is governed by a BSD-style license that
24912 // can be found in the LICENSE file.
24913 //
24914@@ -9,7 +9,7 @@
24915 // implementations. See the translator.README.txt file in the tools directory
24916 // for more information.
24917 //
24918-// $hash=ede3c78c823b9db15c86b9e25dd666a516237541$
24919+// $hash=2663f92f7373738d13ee8d194684e6f818afa950$
24920 //
24921
24922 #include "libcef_dll/ctocpp/test/translator_test_scoped_library_child_child_ctocpp.h"
24923diff --git a/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_child_child_ctocpp.h b/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_child_child_ctocpp.h
24924index a8215a9fe4..ef6f048ff8 100644
24925--- a/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_child_child_ctocpp.h
24926+++ b/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_child_child_ctocpp.h
24927@@ -1,4 +1,4 @@
24928-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24929+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24930 // reserved. Use of this source code is governed by a BSD-style license that
24931 // can be found in the LICENSE file.
24932 //
24933@@ -9,7 +9,7 @@
24934 // implementations. See the translator.README.txt file in the tools directory
24935 // for more information.
24936 //
24937-// $hash=3cbadd1fe76cfdd2cdc69bf74ef5cecded4678a0$
24938+// $hash=f79248bfdf3bf130b2bef7e2f7d682cfb01bf315$
24939 //
24940
24941 #ifndef CEF_LIBCEF_DLL_CTOCPP_TEST_TRANSLATOR_TEST_SCOPED_LIBRARY_CHILD_CHILD_CTOCPP_H_
24942diff --git a/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_child_ctocpp.cc b/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_child_ctocpp.cc
24943index aed7fc4549..4e2761c3e7 100644
24944--- a/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_child_ctocpp.cc
24945+++ b/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_child_ctocpp.cc
24946@@ -1,4 +1,4 @@
24947-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24948+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24949 // reserved. Use of this source code is governed by a BSD-style license that
24950 // can be found in the LICENSE file.
24951 //
24952@@ -9,7 +9,7 @@
24953 // implementations. See the translator.README.txt file in the tools directory
24954 // for more information.
24955 //
24956-// $hash=3218861c702d3419a97a3a49b87898e1afc3d55e$
24957+// $hash=8d662be456cc9fb61fba3adfe7661079c7207444$
24958 //
24959
24960 #include "libcef_dll/ctocpp/test/translator_test_scoped_library_child_ctocpp.h"
24961diff --git a/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_child_ctocpp.h b/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_child_ctocpp.h
24962index 52cd06e156..239ea596ab 100644
24963--- a/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_child_ctocpp.h
24964+++ b/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_child_ctocpp.h
24965@@ -1,4 +1,4 @@
24966-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24967+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24968 // reserved. Use of this source code is governed by a BSD-style license that
24969 // can be found in the LICENSE file.
24970 //
24971@@ -9,7 +9,7 @@
24972 // implementations. See the translator.README.txt file in the tools directory
24973 // for more information.
24974 //
24975-// $hash=f7643df00ccbcefbbca15979c07763502de4af2e$
24976+// $hash=6acbb967fdae293649ef3f86fd44bb51a6bdacf1$
24977 //
24978
24979 #ifndef CEF_LIBCEF_DLL_CTOCPP_TEST_TRANSLATOR_TEST_SCOPED_LIBRARY_CHILD_CTOCPP_H_
24980diff --git a/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_ctocpp.cc b/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_ctocpp.cc
24981index 324b1d51cc..981a595cd1 100644
24982--- a/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_ctocpp.cc
24983+++ b/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_ctocpp.cc
24984@@ -1,4 +1,4 @@
24985-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
24986+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
24987 // reserved. Use of this source code is governed by a BSD-style license that
24988 // can be found in the LICENSE file.
24989 //
24990@@ -9,7 +9,7 @@
24991 // implementations. See the translator.README.txt file in the tools directory
24992 // for more information.
24993 //
24994-// $hash=93bec9c1c78c75b71ca887b790977d027f197a79$
24995+// $hash=a064c6cc20c7399979309f9bdd471272bb37747a$
24996 //
24997
24998 #include "libcef_dll/ctocpp/test/translator_test_scoped_library_ctocpp.h"
24999diff --git a/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_ctocpp.h b/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_ctocpp.h
25000index 2cbf56e9c2..f650acdbf8 100644
25001--- a/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_ctocpp.h
25002+++ b/cef/libcef_dll/ctocpp/test/translator_test_scoped_library_ctocpp.h
25003@@ -1,4 +1,4 @@
25004-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25005+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25006 // reserved. Use of this source code is governed by a BSD-style license that
25007 // can be found in the LICENSE file.
25008 //
25009@@ -9,7 +9,7 @@
25010 // implementations. See the translator.README.txt file in the tools directory
25011 // for more information.
25012 //
25013-// $hash=32beea0e95a0acdbf22d552970d719382785554a$
25014+// $hash=0935d3f5ae7629fb1c05b3fee01992af3148c15b$
25015 //
25016
25017 #ifndef CEF_LIBCEF_DLL_CTOCPP_TEST_TRANSLATOR_TEST_SCOPED_LIBRARY_CTOCPP_H_
25018diff --git a/cef/libcef_dll/ctocpp/thread_ctocpp.cc b/cef/libcef_dll/ctocpp/thread_ctocpp.cc
25019index 2cdfa05c20..9409fb6c2d 100644
25020--- a/cef/libcef_dll/ctocpp/thread_ctocpp.cc
25021+++ b/cef/libcef_dll/ctocpp/thread_ctocpp.cc
25022@@ -1,4 +1,4 @@
25023-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25024+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25025 // reserved. Use of this source code is governed by a BSD-style license that
25026 // can be found in the LICENSE file.
25027 //
25028@@ -9,7 +9,7 @@
25029 // implementations. See the translator.README.txt file in the tools directory
25030 // for more information.
25031 //
25032-// $hash=e5d301643a4d2a5e6af8566f30d76ecf798ddee9$
25033+// $hash=207fe292d5fec167e20971c9948d0b183e6b3b20$
25034 //
25035
25036 #include "libcef_dll/ctocpp/thread_ctocpp.h"
25037diff --git a/cef/libcef_dll/ctocpp/thread_ctocpp.h b/cef/libcef_dll/ctocpp/thread_ctocpp.h
25038index ce8f0ceb19..9176d2325f 100644
25039--- a/cef/libcef_dll/ctocpp/thread_ctocpp.h
25040+++ b/cef/libcef_dll/ctocpp/thread_ctocpp.h
25041@@ -1,4 +1,4 @@
25042-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25043+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25044 // reserved. Use of this source code is governed by a BSD-style license that
25045 // can be found in the LICENSE file.
25046 //
25047@@ -9,7 +9,7 @@
25048 // implementations. See the translator.README.txt file in the tools directory
25049 // for more information.
25050 //
25051-// $hash=67c710cc8e62052d841bcadb7aacc1ccddb4b54f$
25052+// $hash=a6e88ef581ddca2825ad28105dd77f31b71c50c9$
25053 //
25054
25055 #ifndef CEF_LIBCEF_DLL_CTOCPP_THREAD_CTOCPP_H_
25056diff --git a/cef/libcef_dll/ctocpp/urlrequest_client_ctocpp.cc b/cef/libcef_dll/ctocpp/urlrequest_client_ctocpp.cc
25057index e112598ed2..8e6bf46caf 100644
25058--- a/cef/libcef_dll/ctocpp/urlrequest_client_ctocpp.cc
25059+++ b/cef/libcef_dll/ctocpp/urlrequest_client_ctocpp.cc
25060@@ -1,4 +1,4 @@
25061-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25062+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25063 // reserved. Use of this source code is governed by a BSD-style license that
25064 // can be found in the LICENSE file.
25065 //
25066@@ -9,7 +9,7 @@
25067 // implementations. See the translator.README.txt file in the tools directory
25068 // for more information.
25069 //
25070-// $hash=741dc4b7ad30068a5334f7aad44018dbaa4e1c29$
25071+// $hash=54962c13fcad1a38aaad37a7dae6744090ebee97$
25072 //
25073
25074 #include "libcef_dll/ctocpp/urlrequest_client_ctocpp.h"
25075diff --git a/cef/libcef_dll/ctocpp/urlrequest_client_ctocpp.h b/cef/libcef_dll/ctocpp/urlrequest_client_ctocpp.h
25076index 9b5ba975e7..7cef3061cc 100644
25077--- a/cef/libcef_dll/ctocpp/urlrequest_client_ctocpp.h
25078+++ b/cef/libcef_dll/ctocpp/urlrequest_client_ctocpp.h
25079@@ -1,4 +1,4 @@
25080-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25081+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25082 // reserved. Use of this source code is governed by a BSD-style license that
25083 // can be found in the LICENSE file.
25084 //
25085@@ -9,7 +9,7 @@
25086 // implementations. See the translator.README.txt file in the tools directory
25087 // for more information.
25088 //
25089-// $hash=3d73c0e6186268e2b01fdea08c6b0568a7e83531$
25090+// $hash=31b2f537bea0b8088a861224b42c313ee87927d6$
25091 //
25092
25093 #ifndef CEF_LIBCEF_DLL_CTOCPP_URLREQUEST_CLIENT_CTOCPP_H_
25094diff --git a/cef/libcef_dll/ctocpp/urlrequest_ctocpp.cc b/cef/libcef_dll/ctocpp/urlrequest_ctocpp.cc
25095index 7144ad1b6a..6acd4a9cd2 100644
25096--- a/cef/libcef_dll/ctocpp/urlrequest_ctocpp.cc
25097+++ b/cef/libcef_dll/ctocpp/urlrequest_ctocpp.cc
25098@@ -1,4 +1,4 @@
25099-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25100+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25101 // reserved. Use of this source code is governed by a BSD-style license that
25102 // can be found in the LICENSE file.
25103 //
25104@@ -9,7 +9,7 @@
25105 // implementations. See the translator.README.txt file in the tools directory
25106 // for more information.
25107 //
25108-// $hash=38e348c618868d4a2d018f8d6dbb4bae36e98c6e$
25109+// $hash=d3d0a83754df9a39d8f951ea488dd5417d20e9b2$
25110 //
25111
25112 #include "libcef_dll/ctocpp/urlrequest_ctocpp.h"
25113diff --git a/cef/libcef_dll/ctocpp/urlrequest_ctocpp.h b/cef/libcef_dll/ctocpp/urlrequest_ctocpp.h
25114index 80ac486213..2e88c99c41 100644
25115--- a/cef/libcef_dll/ctocpp/urlrequest_ctocpp.h
25116+++ b/cef/libcef_dll/ctocpp/urlrequest_ctocpp.h
25117@@ -1,4 +1,4 @@
25118-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25119+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25120 // reserved. Use of this source code is governed by a BSD-style license that
25121 // can be found in the LICENSE file.
25122 //
25123@@ -9,7 +9,7 @@
25124 // implementations. See the translator.README.txt file in the tools directory
25125 // for more information.
25126 //
25127-// $hash=7751e600cb13017cbdfac3eae39dc7c94d2afec9$
25128+// $hash=b35cb83be82518c5b1a9d95e3062a9748bfa1c62$
25129 //
25130
25131 #ifndef CEF_LIBCEF_DLL_CTOCPP_URLREQUEST_CTOCPP_H_
25132diff --git a/cef/libcef_dll/ctocpp/v8accessor_ctocpp.cc b/cef/libcef_dll/ctocpp/v8accessor_ctocpp.cc
25133index 52f291f93b..8b6fd3bd71 100644
25134--- a/cef/libcef_dll/ctocpp/v8accessor_ctocpp.cc
25135+++ b/cef/libcef_dll/ctocpp/v8accessor_ctocpp.cc
25136@@ -1,4 +1,4 @@
25137-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25138+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25139 // reserved. Use of this source code is governed by a BSD-style license that
25140 // can be found in the LICENSE file.
25141 //
25142@@ -9,7 +9,7 @@
25143 // implementations. See the translator.README.txt file in the tools directory
25144 // for more information.
25145 //
25146-// $hash=e2d3ed0d58c0888c784526deaf4d36bb04765939$
25147+// $hash=c2815712e9960e6850bb646ba0009fe42e8a2624$
25148 //
25149
25150 #include "libcef_dll/ctocpp/v8accessor_ctocpp.h"
25151diff --git a/cef/libcef_dll/ctocpp/v8accessor_ctocpp.h b/cef/libcef_dll/ctocpp/v8accessor_ctocpp.h
25152index 7bcd78745f..6b552a781e 100644
25153--- a/cef/libcef_dll/ctocpp/v8accessor_ctocpp.h
25154+++ b/cef/libcef_dll/ctocpp/v8accessor_ctocpp.h
25155@@ -1,4 +1,4 @@
25156-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25157+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25158 // reserved. Use of this source code is governed by a BSD-style license that
25159 // can be found in the LICENSE file.
25160 //
25161@@ -9,7 +9,7 @@
25162 // implementations. See the translator.README.txt file in the tools directory
25163 // for more information.
25164 //
25165-// $hash=b3cdc33e16cb7a55d0b249a9a7a0bd90563ce264$
25166+// $hash=0c7b83fe013c87d35cf3c944e53ec7afef0ac11a$
25167 //
25168
25169 #ifndef CEF_LIBCEF_DLL_CTOCPP_V8ACCESSOR_CTOCPP_H_
25170diff --git a/cef/libcef_dll/ctocpp/v8array_buffer_release_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/v8array_buffer_release_callback_ctocpp.cc
25171index dc3b820ea6..aa062aa4a6 100644
25172--- a/cef/libcef_dll/ctocpp/v8array_buffer_release_callback_ctocpp.cc
25173+++ b/cef/libcef_dll/ctocpp/v8array_buffer_release_callback_ctocpp.cc
25174@@ -1,4 +1,4 @@
25175-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25176+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25177 // reserved. Use of this source code is governed by a BSD-style license that
25178 // can be found in the LICENSE file.
25179 //
25180@@ -9,7 +9,7 @@
25181 // implementations. See the translator.README.txt file in the tools directory
25182 // for more information.
25183 //
25184-// $hash=fe202cc53e5a33730f30d401042e712da0f67aaa$
25185+// $hash=04697e01edeb16ce60053867fa2b11d03dec3427$
25186 //
25187
25188 #include "libcef_dll/ctocpp/v8array_buffer_release_callback_ctocpp.h"
25189diff --git a/cef/libcef_dll/ctocpp/v8array_buffer_release_callback_ctocpp.h b/cef/libcef_dll/ctocpp/v8array_buffer_release_callback_ctocpp.h
25190index 7ed88cf727..b1d10766a0 100644
25191--- a/cef/libcef_dll/ctocpp/v8array_buffer_release_callback_ctocpp.h
25192+++ b/cef/libcef_dll/ctocpp/v8array_buffer_release_callback_ctocpp.h
25193@@ -1,4 +1,4 @@
25194-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25195+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25196 // reserved. Use of this source code is governed by a BSD-style license that
25197 // can be found in the LICENSE file.
25198 //
25199@@ -9,7 +9,7 @@
25200 // implementations. See the translator.README.txt file in the tools directory
25201 // for more information.
25202 //
25203-// $hash=1711598fdde49e880b5f7cb99da4517f1d3c8f09$
25204+// $hash=e494919a69c37ed2aa5dcd0f8ddfcbbdafba2ebb$
25205 //
25206
25207 #ifndef CEF_LIBCEF_DLL_CTOCPP_V8ARRAY_BUFFER_RELEASE_CALLBACK_CTOCPP_H_
25208diff --git a/cef/libcef_dll/ctocpp/v8context_ctocpp.cc b/cef/libcef_dll/ctocpp/v8context_ctocpp.cc
25209index e0dae6b3cd..d6f4bdc054 100644
25210--- a/cef/libcef_dll/ctocpp/v8context_ctocpp.cc
25211+++ b/cef/libcef_dll/ctocpp/v8context_ctocpp.cc
25212@@ -1,4 +1,4 @@
25213-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25214+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25215 // reserved. Use of this source code is governed by a BSD-style license that
25216 // can be found in the LICENSE file.
25217 //
25218@@ -9,7 +9,7 @@
25219 // implementations. See the translator.README.txt file in the tools directory
25220 // for more information.
25221 //
25222-// $hash=f35a129486c5242f3f2063b529b8c2cf97a6faed$
25223+// $hash=8d8c4cf20f877a5eb60b47fb55d938940bb10c82$
25224 //
25225
25226 #include "libcef_dll/ctocpp/v8context_ctocpp.h"
25227diff --git a/cef/libcef_dll/ctocpp/v8context_ctocpp.h b/cef/libcef_dll/ctocpp/v8context_ctocpp.h
25228index 08857be37c..36cd939b66 100644
25229--- a/cef/libcef_dll/ctocpp/v8context_ctocpp.h
25230+++ b/cef/libcef_dll/ctocpp/v8context_ctocpp.h
25231@@ -1,4 +1,4 @@
25232-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25233+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25234 // reserved. Use of this source code is governed by a BSD-style license that
25235 // can be found in the LICENSE file.
25236 //
25237@@ -9,7 +9,7 @@
25238 // implementations. See the translator.README.txt file in the tools directory
25239 // for more information.
25240 //
25241-// $hash=033d22b4a0516a84c2b319ee46a033af7a8009b2$
25242+// $hash=fa43162137ab92deca52489511794e1c9cd28d0c$
25243 //
25244
25245 #ifndef CEF_LIBCEF_DLL_CTOCPP_V8CONTEXT_CTOCPP_H_
25246diff --git a/cef/libcef_dll/ctocpp/v8exception_ctocpp.cc b/cef/libcef_dll/ctocpp/v8exception_ctocpp.cc
25247index 78410437b8..374d81edc7 100644
25248--- a/cef/libcef_dll/ctocpp/v8exception_ctocpp.cc
25249+++ b/cef/libcef_dll/ctocpp/v8exception_ctocpp.cc
25250@@ -1,4 +1,4 @@
25251-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25252+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25253 // reserved. Use of this source code is governed by a BSD-style license that
25254 // can be found in the LICENSE file.
25255 //
25256@@ -9,7 +9,7 @@
25257 // implementations. See the translator.README.txt file in the tools directory
25258 // for more information.
25259 //
25260-// $hash=6a0c3e4e5cb161ed124b5688ce3719d44588d1b0$
25261+// $hash=49589f2e4ad8e5598df9411f613dd717fe6a3852$
25262 //
25263
25264 #include "libcef_dll/ctocpp/v8exception_ctocpp.h"
25265diff --git a/cef/libcef_dll/ctocpp/v8exception_ctocpp.h b/cef/libcef_dll/ctocpp/v8exception_ctocpp.h
25266index 2aefb41483..199ffda98e 100644
25267--- a/cef/libcef_dll/ctocpp/v8exception_ctocpp.h
25268+++ b/cef/libcef_dll/ctocpp/v8exception_ctocpp.h
25269@@ -1,4 +1,4 @@
25270-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25271+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25272 // reserved. Use of this source code is governed by a BSD-style license that
25273 // can be found in the LICENSE file.
25274 //
25275@@ -9,7 +9,7 @@
25276 // implementations. See the translator.README.txt file in the tools directory
25277 // for more information.
25278 //
25279-// $hash=b6fc50fa3a6e0156743a5c3fce97b1a683e1720a$
25280+// $hash=e4e96d04ed604a7628db640e7e4cd9f219aabf03$
25281 //
25282
25283 #ifndef CEF_LIBCEF_DLL_CTOCPP_V8EXCEPTION_CTOCPP_H_
25284diff --git a/cef/libcef_dll/ctocpp/v8handler_ctocpp.cc b/cef/libcef_dll/ctocpp/v8handler_ctocpp.cc
25285index c97d632f61..47bc30d371 100644
25286--- a/cef/libcef_dll/ctocpp/v8handler_ctocpp.cc
25287+++ b/cef/libcef_dll/ctocpp/v8handler_ctocpp.cc
25288@@ -1,4 +1,4 @@
25289-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25290+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25291 // reserved. Use of this source code is governed by a BSD-style license that
25292 // can be found in the LICENSE file.
25293 //
25294@@ -9,7 +9,7 @@
25295 // implementations. See the translator.README.txt file in the tools directory
25296 // for more information.
25297 //
25298-// $hash=b3e0e604cd187d5b73c1bf378734214457d68311$
25299+// $hash=365e5e2b4e3ced4e615fa504a0cb68c66854fc37$
25300 //
25301
25302 #include "libcef_dll/ctocpp/v8handler_ctocpp.h"
25303diff --git a/cef/libcef_dll/ctocpp/v8handler_ctocpp.h b/cef/libcef_dll/ctocpp/v8handler_ctocpp.h
25304index 6d3fd3a013..f4acf3ec35 100644
25305--- a/cef/libcef_dll/ctocpp/v8handler_ctocpp.h
25306+++ b/cef/libcef_dll/ctocpp/v8handler_ctocpp.h
25307@@ -1,4 +1,4 @@
25308-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25309+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25310 // reserved. Use of this source code is governed by a BSD-style license that
25311 // can be found in the LICENSE file.
25312 //
25313@@ -9,7 +9,7 @@
25314 // implementations. See the translator.README.txt file in the tools directory
25315 // for more information.
25316 //
25317-// $hash=bc6a214c0c54093b9a8b83a5a44b192307e4b10c$
25318+// $hash=0207510d301deece41373f5693eaed1a8fd185b8$
25319 //
25320
25321 #ifndef CEF_LIBCEF_DLL_CTOCPP_V8HANDLER_CTOCPP_H_
25322diff --git a/cef/libcef_dll/ctocpp/v8interceptor_ctocpp.cc b/cef/libcef_dll/ctocpp/v8interceptor_ctocpp.cc
25323index ecb1443638..32b52b1f71 100644
25324--- a/cef/libcef_dll/ctocpp/v8interceptor_ctocpp.cc
25325+++ b/cef/libcef_dll/ctocpp/v8interceptor_ctocpp.cc
25326@@ -1,4 +1,4 @@
25327-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25328+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25329 // reserved. Use of this source code is governed by a BSD-style license that
25330 // can be found in the LICENSE file.
25331 //
25332@@ -9,7 +9,7 @@
25333 // implementations. See the translator.README.txt file in the tools directory
25334 // for more information.
25335 //
25336-// $hash=f80e0608bce92dbff7e3b6377a727f4fc71ab8b2$
25337+// $hash=d466cd3a17a35074eedcb222b9acd2063c297fe2$
25338 //
25339
25340 #include "libcef_dll/ctocpp/v8interceptor_ctocpp.h"
25341diff --git a/cef/libcef_dll/ctocpp/v8interceptor_ctocpp.h b/cef/libcef_dll/ctocpp/v8interceptor_ctocpp.h
25342index a92c3b7722..f7e646274c 100644
25343--- a/cef/libcef_dll/ctocpp/v8interceptor_ctocpp.h
25344+++ b/cef/libcef_dll/ctocpp/v8interceptor_ctocpp.h
25345@@ -1,4 +1,4 @@
25346-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25347+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25348 // reserved. Use of this source code is governed by a BSD-style license that
25349 // can be found in the LICENSE file.
25350 //
25351@@ -9,7 +9,7 @@
25352 // implementations. See the translator.README.txt file in the tools directory
25353 // for more information.
25354 //
25355-// $hash=ec3b8546155193e09dbfad36b935d5866357c20f$
25356+// $hash=301ccb6fb65513bc2e6197c7fa1712c5e33f2bcf$
25357 //
25358
25359 #ifndef CEF_LIBCEF_DLL_CTOCPP_V8INTERCEPTOR_CTOCPP_H_
25360diff --git a/cef/libcef_dll/ctocpp/v8stack_frame_ctocpp.cc b/cef/libcef_dll/ctocpp/v8stack_frame_ctocpp.cc
25361index 5b17553442..009efe1a08 100644
25362--- a/cef/libcef_dll/ctocpp/v8stack_frame_ctocpp.cc
25363+++ b/cef/libcef_dll/ctocpp/v8stack_frame_ctocpp.cc
25364@@ -1,4 +1,4 @@
25365-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25366+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25367 // reserved. Use of this source code is governed by a BSD-style license that
25368 // can be found in the LICENSE file.
25369 //
25370@@ -9,7 +9,7 @@
25371 // implementations. See the translator.README.txt file in the tools directory
25372 // for more information.
25373 //
25374-// $hash=26bac2fc65cf78053cd85f665bcd4c034fe85b07$
25375+// $hash=5dad5940fbf85e63683112a937d47dbe52f1b64a$
25376 //
25377
25378 #include "libcef_dll/ctocpp/v8stack_frame_ctocpp.h"
25379diff --git a/cef/libcef_dll/ctocpp/v8stack_frame_ctocpp.h b/cef/libcef_dll/ctocpp/v8stack_frame_ctocpp.h
25380index ae18bfa2f9..2837420d07 100644
25381--- a/cef/libcef_dll/ctocpp/v8stack_frame_ctocpp.h
25382+++ b/cef/libcef_dll/ctocpp/v8stack_frame_ctocpp.h
25383@@ -1,4 +1,4 @@
25384-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25385+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25386 // reserved. Use of this source code is governed by a BSD-style license that
25387 // can be found in the LICENSE file.
25388 //
25389@@ -9,7 +9,7 @@
25390 // implementations. See the translator.README.txt file in the tools directory
25391 // for more information.
25392 //
25393-// $hash=d8338dcb3a42fe51b2be32870283801bf5c3367b$
25394+// $hash=23ccdae0421547bb56eaf433ea7c607a6bef578f$
25395 //
25396
25397 #ifndef CEF_LIBCEF_DLL_CTOCPP_V8STACK_FRAME_CTOCPP_H_
25398diff --git a/cef/libcef_dll/ctocpp/v8stack_trace_ctocpp.cc b/cef/libcef_dll/ctocpp/v8stack_trace_ctocpp.cc
25399index 0953a2dc18..d51002ad6b 100644
25400--- a/cef/libcef_dll/ctocpp/v8stack_trace_ctocpp.cc
25401+++ b/cef/libcef_dll/ctocpp/v8stack_trace_ctocpp.cc
25402@@ -1,4 +1,4 @@
25403-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25404+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25405 // reserved. Use of this source code is governed by a BSD-style license that
25406 // can be found in the LICENSE file.
25407 //
25408@@ -9,7 +9,7 @@
25409 // implementations. See the translator.README.txt file in the tools directory
25410 // for more information.
25411 //
25412-// $hash=8c7d2704a26a5e4a3a2916c8f338d1da55dc1159$
25413+// $hash=bf78c133604e1535633ac8c93ca153bcefe2718d$
25414 //
25415
25416 #include "libcef_dll/ctocpp/v8stack_trace_ctocpp.h"
25417diff --git a/cef/libcef_dll/ctocpp/v8stack_trace_ctocpp.h b/cef/libcef_dll/ctocpp/v8stack_trace_ctocpp.h
25418index 81bf42a988..e56d4b6bcd 100644
25419--- a/cef/libcef_dll/ctocpp/v8stack_trace_ctocpp.h
25420+++ b/cef/libcef_dll/ctocpp/v8stack_trace_ctocpp.h
25421@@ -1,4 +1,4 @@
25422-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25423+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25424 // reserved. Use of this source code is governed by a BSD-style license that
25425 // can be found in the LICENSE file.
25426 //
25427@@ -9,7 +9,7 @@
25428 // implementations. See the translator.README.txt file in the tools directory
25429 // for more information.
25430 //
25431-// $hash=293e9949e304f81acfd28e41be9b43000feb2bca$
25432+// $hash=9cbeedd31def9f1e0f2e423c575ba2cef5f05400$
25433 //
25434
25435 #ifndef CEF_LIBCEF_DLL_CTOCPP_V8STACK_TRACE_CTOCPP_H_
25436diff --git a/cef/libcef_dll/ctocpp/v8value_ctocpp.cc b/cef/libcef_dll/ctocpp/v8value_ctocpp.cc
25437index 2ccdee0fb0..6b716896ea 100644
25438--- a/cef/libcef_dll/ctocpp/v8value_ctocpp.cc
25439+++ b/cef/libcef_dll/ctocpp/v8value_ctocpp.cc
25440@@ -1,4 +1,4 @@
25441-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25442+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25443 // reserved. Use of this source code is governed by a BSD-style license that
25444 // can be found in the LICENSE file.
25445 //
25446@@ -9,7 +9,7 @@
25447 // implementations. See the translator.README.txt file in the tools directory
25448 // for more information.
25449 //
25450-// $hash=bca752bef24a557dc0e7a958ed2fe434fc0950d4$
25451+// $hash=7863f5701d466f8d5a5c91962e14b14b500315a3$
25452 //
25453
25454 #include "libcef_dll/ctocpp/v8value_ctocpp.h"
25455diff --git a/cef/libcef_dll/ctocpp/v8value_ctocpp.h b/cef/libcef_dll/ctocpp/v8value_ctocpp.h
25456index ddb675fbf0..5cc7bdcc3a 100644
25457--- a/cef/libcef_dll/ctocpp/v8value_ctocpp.h
25458+++ b/cef/libcef_dll/ctocpp/v8value_ctocpp.h
25459@@ -1,4 +1,4 @@
25460-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25461+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25462 // reserved. Use of this source code is governed by a BSD-style license that
25463 // can be found in the LICENSE file.
25464 //
25465@@ -9,7 +9,7 @@
25466 // implementations. See the translator.README.txt file in the tools directory
25467 // for more information.
25468 //
25469-// $hash=910a0180e7ea517327b439aec32d6e4cede15e80$
25470+// $hash=685b550819fe0cdb03e24bf989828b2e7cce4485$
25471 //
25472
25473 #ifndef CEF_LIBCEF_DLL_CTOCPP_V8VALUE_CTOCPP_H_
25474diff --git a/cef/libcef_dll/ctocpp/value_ctocpp.cc b/cef/libcef_dll/ctocpp/value_ctocpp.cc
25475index 053b27a8f9..192c9cfc2e 100644
25476--- a/cef/libcef_dll/ctocpp/value_ctocpp.cc
25477+++ b/cef/libcef_dll/ctocpp/value_ctocpp.cc
25478@@ -1,4 +1,4 @@
25479-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25480+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25481 // reserved. Use of this source code is governed by a BSD-style license that
25482 // can be found in the LICENSE file.
25483 //
25484@@ -9,7 +9,7 @@
25485 // implementations. See the translator.README.txt file in the tools directory
25486 // for more information.
25487 //
25488-// $hash=01641d605a4274ff4fd6697618469f34ccc77a7a$
25489+// $hash=9f75af2c3d5e4411027b6f26bcc0d31728baed34$
25490 //
25491
25492 #include "libcef_dll/ctocpp/value_ctocpp.h"
25493diff --git a/cef/libcef_dll/ctocpp/value_ctocpp.h b/cef/libcef_dll/ctocpp/value_ctocpp.h
25494index d737f67859..a424b506f9 100644
25495--- a/cef/libcef_dll/ctocpp/value_ctocpp.h
25496+++ b/cef/libcef_dll/ctocpp/value_ctocpp.h
25497@@ -1,4 +1,4 @@
25498-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25499+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25500 // reserved. Use of this source code is governed by a BSD-style license that
25501 // can be found in the LICENSE file.
25502 //
25503@@ -9,7 +9,7 @@
25504 // implementations. See the translator.README.txt file in the tools directory
25505 // for more information.
25506 //
25507-// $hash=5ade4141053ca1aa2f8c97eb4b93ab02af2aaf33$
25508+// $hash=56d61ad314449577492010f6609feaa6ec14099d$
25509 //
25510
25511 #ifndef CEF_LIBCEF_DLL_CTOCPP_VALUE_CTOCPP_H_
25512diff --git a/cef/libcef_dll/ctocpp/views/box_layout_ctocpp.cc b/cef/libcef_dll/ctocpp/views/box_layout_ctocpp.cc
25513index 31fa15a29b..b8787d66c0 100644
25514--- a/cef/libcef_dll/ctocpp/views/box_layout_ctocpp.cc
25515+++ b/cef/libcef_dll/ctocpp/views/box_layout_ctocpp.cc
25516@@ -1,4 +1,4 @@
25517-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25518+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25519 // reserved. Use of this source code is governed by a BSD-style license that
25520 // can be found in the LICENSE file.
25521 //
25522@@ -9,7 +9,7 @@
25523 // implementations. See the translator.README.txt file in the tools directory
25524 // for more information.
25525 //
25526-// $hash=bf44ff25f91ee40b3e8167f6936afa9498780cc7$
25527+// $hash=40ce0ebcedcd5995a5a3147049e5b34c016b8519$
25528 //
25529
25530 #include "libcef_dll/ctocpp/views/box_layout_ctocpp.h"
25531diff --git a/cef/libcef_dll/ctocpp/views/box_layout_ctocpp.h b/cef/libcef_dll/ctocpp/views/box_layout_ctocpp.h
25532index 939190a71f..7462bfc1ec 100644
25533--- a/cef/libcef_dll/ctocpp/views/box_layout_ctocpp.h
25534+++ b/cef/libcef_dll/ctocpp/views/box_layout_ctocpp.h
25535@@ -1,4 +1,4 @@
25536-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25537+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25538 // reserved. Use of this source code is governed by a BSD-style license that
25539 // can be found in the LICENSE file.
25540 //
25541@@ -9,7 +9,7 @@
25542 // implementations. See the translator.README.txt file in the tools directory
25543 // for more information.
25544 //
25545-// $hash=50dddd7ad5a249b2c8cfe95d766c3294c359b288$
25546+// $hash=566d0c9b929476e71cf8c658ed5b26b203796ca2$
25547 //
25548
25549 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_BOX_LAYOUT_CTOCPP_H_
25550diff --git a/cef/libcef_dll/ctocpp/views/browser_view_ctocpp.cc b/cef/libcef_dll/ctocpp/views/browser_view_ctocpp.cc
25551index d2420a9f72..fbf0878b9b 100644
25552--- a/cef/libcef_dll/ctocpp/views/browser_view_ctocpp.cc
25553+++ b/cef/libcef_dll/ctocpp/views/browser_view_ctocpp.cc
25554@@ -1,4 +1,4 @@
25555-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25556+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25557 // reserved. Use of this source code is governed by a BSD-style license that
25558 // can be found in the LICENSE file.
25559 //
25560@@ -9,7 +9,7 @@
25561 // implementations. See the translator.README.txt file in the tools directory
25562 // for more information.
25563 //
25564-// $hash=912a0807db8bc1405188d61961545cc8e540aacf$
25565+// $hash=c6708708ced4b89e1448ed8371d7cb2a7bc480f4$
25566 //
25567
25568 #include "libcef_dll/ctocpp/views/browser_view_ctocpp.h"
25569diff --git a/cef/libcef_dll/ctocpp/views/browser_view_ctocpp.h b/cef/libcef_dll/ctocpp/views/browser_view_ctocpp.h
25570index af2222ccc2..372a997462 100644
25571--- a/cef/libcef_dll/ctocpp/views/browser_view_ctocpp.h
25572+++ b/cef/libcef_dll/ctocpp/views/browser_view_ctocpp.h
25573@@ -1,4 +1,4 @@
25574-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25575+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25576 // reserved. Use of this source code is governed by a BSD-style license that
25577 // can be found in the LICENSE file.
25578 //
25579@@ -9,7 +9,7 @@
25580 // implementations. See the translator.README.txt file in the tools directory
25581 // for more information.
25582 //
25583-// $hash=f17d395c61d650a824016d14bc06d0cb9db9a6e6$
25584+// $hash=0e351243369daff89716c9debc5135e6827a6726$
25585 //
25586
25587 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_BROWSER_VIEW_CTOCPP_H_
25588diff --git a/cef/libcef_dll/ctocpp/views/browser_view_delegate_ctocpp.cc b/cef/libcef_dll/ctocpp/views/browser_view_delegate_ctocpp.cc
25589index 40f6734d3f..17bcb1cdef 100644
25590--- a/cef/libcef_dll/ctocpp/views/browser_view_delegate_ctocpp.cc
25591+++ b/cef/libcef_dll/ctocpp/views/browser_view_delegate_ctocpp.cc
25592@@ -1,4 +1,4 @@
25593-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25594+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25595 // reserved. Use of this source code is governed by a BSD-style license that
25596 // can be found in the LICENSE file.
25597 //
25598@@ -9,7 +9,7 @@
25599 // implementations. See the translator.README.txt file in the tools directory
25600 // for more information.
25601 //
25602-// $hash=9aed01b6014f1c22815e7847eba321d75dbfa45d$
25603+// $hash=a94b101b94086af801cf7ac8eff13354ba96550b$
25604 //
25605
25606 #include "libcef_dll/ctocpp/views/browser_view_delegate_ctocpp.h"
25607@@ -75,12 +75,11 @@ void CefBrowserViewDelegateCToCpp::OnBrowserDestroyed(
25608 }
25609
25610 NO_SANITIZE("cfi-icall")
25611-CefRefPtr<CefBrowserViewDelegate>
25612-CefBrowserViewDelegateCToCpp::GetDelegateForPopupBrowserView(
25613-    CefRefPtr<CefBrowserView> browser_view,
25614-    const CefBrowserSettings& settings,
25615-    CefRefPtr<CefClient> client,
25616-    bool is_devtools) {
25617+CefRefPtr<CefBrowserViewDelegate> CefBrowserViewDelegateCToCpp::
25618+    GetDelegateForPopupBrowserView(CefRefPtr<CefBrowserView> browser_view,
25619+                                   const CefBrowserSettings& settings,
25620+                                   CefRefPtr<CefClient> client,
25621+                                   bool is_devtools) {
25622   shutdown_checker::AssertNotShutdown();
25623
25624   cef_browser_view_delegate_t* _struct = GetStruct();
25625@@ -141,7 +140,7 @@ bool CefBrowserViewDelegateCToCpp::OnPopupBrowserViewCreated(
25626
25627 NO_SANITIZE("cfi-icall")
25628 CefBrowserViewDelegate::ChromeToolbarType
25629-CefBrowserViewDelegateCToCpp::GetChromeToolbarType() {
25630+    CefBrowserViewDelegateCToCpp::GetChromeToolbarType() {
25631   shutdown_checker::AssertNotShutdown();
25632
25633   cef_browser_view_delegate_t* _struct = GetStruct();
25634@@ -158,8 +157,8 @@ CefBrowserViewDelegateCToCpp::GetChromeToolbarType() {
25635 }
25636
25637 NO_SANITIZE("cfi-icall")
25638-CefSize CefBrowserViewDelegateCToCpp::GetPreferredSize(
25639-    CefRefPtr<CefView> view) {
25640+CefSize
25641+    CefBrowserViewDelegateCToCpp::GetPreferredSize(CefRefPtr<CefView> view) {
25642   shutdown_checker::AssertNotShutdown();
25643
25644   cef_view_delegate_t* _struct =
25645diff --git a/cef/libcef_dll/ctocpp/views/browser_view_delegate_ctocpp.h b/cef/libcef_dll/ctocpp/views/browser_view_delegate_ctocpp.h
25646index 371638af5e..63e3be2426 100644
25647--- a/cef/libcef_dll/ctocpp/views/browser_view_delegate_ctocpp.h
25648+++ b/cef/libcef_dll/ctocpp/views/browser_view_delegate_ctocpp.h
25649@@ -1,4 +1,4 @@
25650-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25651+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25652 // reserved. Use of this source code is governed by a BSD-style license that
25653 // can be found in the LICENSE file.
25654 //
25655@@ -9,7 +9,7 @@
25656 // implementations. See the translator.README.txt file in the tools directory
25657 // for more information.
25658 //
25659-// $hash=20b067cabc4baa4c9edecaffb38a2ebb28524ccc$
25660+// $hash=da85fe3e18272f65134c7586cf94fd41784f9bae$
25661 //
25662
25663 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_BROWSER_VIEW_DELEGATE_CTOCPP_H_
25664diff --git a/cef/libcef_dll/ctocpp/views/button_ctocpp.cc b/cef/libcef_dll/ctocpp/views/button_ctocpp.cc
25665index 043f41fad8..c0bad28fb8 100644
25666--- a/cef/libcef_dll/ctocpp/views/button_ctocpp.cc
25667+++ b/cef/libcef_dll/ctocpp/views/button_ctocpp.cc
25668@@ -1,4 +1,4 @@
25669-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25670+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25671 // reserved. Use of this source code is governed by a BSD-style license that
25672 // can be found in the LICENSE file.
25673 //
25674@@ -9,7 +9,7 @@
25675 // implementations. See the translator.README.txt file in the tools directory
25676 // for more information.
25677 //
25678-// $hash=b359b8f9e2c70946ed9831869100e82774a5ea2d$
25679+// $hash=af9995eb4c92687eac363aa4722bb0214ab1588e$
25680 //
25681
25682 #include "libcef_dll/ctocpp/views/button_ctocpp.h"
25683diff --git a/cef/libcef_dll/ctocpp/views/button_ctocpp.h b/cef/libcef_dll/ctocpp/views/button_ctocpp.h
25684index af803bb16b..68a5c42eed 100644
25685--- a/cef/libcef_dll/ctocpp/views/button_ctocpp.h
25686+++ b/cef/libcef_dll/ctocpp/views/button_ctocpp.h
25687@@ -1,4 +1,4 @@
25688-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25689+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25690 // reserved. Use of this source code is governed by a BSD-style license that
25691 // can be found in the LICENSE file.
25692 //
25693@@ -9,7 +9,7 @@
25694 // implementations. See the translator.README.txt file in the tools directory
25695 // for more information.
25696 //
25697-// $hash=2741cab25f5633f178ba1f924abe58e418f1f084$
25698+// $hash=bab8d54de14f05a413e8fc65aa21793d19ad122b$
25699 //
25700
25701 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_BUTTON_CTOCPP_H_
25702diff --git a/cef/libcef_dll/ctocpp/views/button_delegate_ctocpp.cc b/cef/libcef_dll/ctocpp/views/button_delegate_ctocpp.cc
25703index 8f71a16123..2481e1e364 100644
25704--- a/cef/libcef_dll/ctocpp/views/button_delegate_ctocpp.cc
25705+++ b/cef/libcef_dll/ctocpp/views/button_delegate_ctocpp.cc
25706@@ -1,4 +1,4 @@
25707-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25708+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25709 // reserved. Use of this source code is governed by a BSD-style license that
25710 // can be found in the LICENSE file.
25711 //
25712@@ -9,7 +9,7 @@
25713 // implementations. See the translator.README.txt file in the tools directory
25714 // for more information.
25715 //
25716-// $hash=fc962d2832eeb3dee99e9a201f234d4a4b4d6f0f$
25717+// $hash=759bdf6e675ddd3a2f0eb622356232346ce02162$
25718 //
25719
25720 #include "libcef_dll/ctocpp/views/button_delegate_ctocpp.h"
25721diff --git a/cef/libcef_dll/ctocpp/views/button_delegate_ctocpp.h b/cef/libcef_dll/ctocpp/views/button_delegate_ctocpp.h
25722index cffab417e2..97f34a6399 100644
25723--- a/cef/libcef_dll/ctocpp/views/button_delegate_ctocpp.h
25724+++ b/cef/libcef_dll/ctocpp/views/button_delegate_ctocpp.h
25725@@ -1,4 +1,4 @@
25726-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25727+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25728 // reserved. Use of this source code is governed by a BSD-style license that
25729 // can be found in the LICENSE file.
25730 //
25731@@ -9,7 +9,7 @@
25732 // implementations. See the translator.README.txt file in the tools directory
25733 // for more information.
25734 //
25735-// $hash=6a72a71a9becd6103d44719ed88b000d576d95eb$
25736+// $hash=376915b5bf2da4101167af17eb8c3ca3ad8db1f7$
25737 //
25738
25739 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_BUTTON_DELEGATE_CTOCPP_H_
25740diff --git a/cef/libcef_dll/ctocpp/views/display_ctocpp.cc b/cef/libcef_dll/ctocpp/views/display_ctocpp.cc
25741index 59562010ed..9a6477c2e2 100644
25742--- a/cef/libcef_dll/ctocpp/views/display_ctocpp.cc
25743+++ b/cef/libcef_dll/ctocpp/views/display_ctocpp.cc
25744@@ -1,4 +1,4 @@
25745-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25746+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25747 // reserved. Use of this source code is governed by a BSD-style license that
25748 // can be found in the LICENSE file.
25749 //
25750@@ -9,7 +9,7 @@
25751 // implementations. See the translator.README.txt file in the tools directory
25752 // for more information.
25753 //
25754-// $hash=410bbb9dbc1b836136b420ffa4d821326159fe7e$
25755+// $hash=ba41b36a0cdd335f2a964665576aaf50d8be9c55$
25756 //
25757
25758 #include "libcef_dll/ctocpp/views/display_ctocpp.h"
25759diff --git a/cef/libcef_dll/ctocpp/views/display_ctocpp.h b/cef/libcef_dll/ctocpp/views/display_ctocpp.h
25760index bb5dfe4375..00050d1e3d 100644
25761--- a/cef/libcef_dll/ctocpp/views/display_ctocpp.h
25762+++ b/cef/libcef_dll/ctocpp/views/display_ctocpp.h
25763@@ -1,4 +1,4 @@
25764-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25765+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25766 // reserved. Use of this source code is governed by a BSD-style license that
25767 // can be found in the LICENSE file.
25768 //
25769@@ -9,7 +9,7 @@
25770 // implementations. See the translator.README.txt file in the tools directory
25771 // for more information.
25772 //
25773-// $hash=5f9d1b14172e8cbd5071f836319840c439b0c74f$
25774+// $hash=79f3a320fac5905198d42a3b53df37eced5a4c0a$
25775 //
25776
25777 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_DISPLAY_CTOCPP_H_
25778diff --git a/cef/libcef_dll/ctocpp/views/fill_layout_ctocpp.cc b/cef/libcef_dll/ctocpp/views/fill_layout_ctocpp.cc
25779index cf83576fb8..b8de0a3a70 100644
25780--- a/cef/libcef_dll/ctocpp/views/fill_layout_ctocpp.cc
25781+++ b/cef/libcef_dll/ctocpp/views/fill_layout_ctocpp.cc
25782@@ -1,4 +1,4 @@
25783-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25784+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25785 // reserved. Use of this source code is governed by a BSD-style license that
25786 // can be found in the LICENSE file.
25787 //
25788@@ -9,7 +9,7 @@
25789 // implementations. See the translator.README.txt file in the tools directory
25790 // for more information.
25791 //
25792-// $hash=196a1684038f46e2067c6faadfd58667f6bdf498$
25793+// $hash=dafea3abdc32cc7dd8552bbdf5bd2bb32e816c5f$
25794 //
25795
25796 #include "libcef_dll/ctocpp/views/fill_layout_ctocpp.h"
25797diff --git a/cef/libcef_dll/ctocpp/views/fill_layout_ctocpp.h b/cef/libcef_dll/ctocpp/views/fill_layout_ctocpp.h
25798index 7a0b50e25d..c7815e2367 100644
25799--- a/cef/libcef_dll/ctocpp/views/fill_layout_ctocpp.h
25800+++ b/cef/libcef_dll/ctocpp/views/fill_layout_ctocpp.h
25801@@ -1,4 +1,4 @@
25802-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25803+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25804 // reserved. Use of this source code is governed by a BSD-style license that
25805 // can be found in the LICENSE file.
25806 //
25807@@ -9,7 +9,7 @@
25808 // implementations. See the translator.README.txt file in the tools directory
25809 // for more information.
25810 //
25811-// $hash=333a603b19a7093fcb7303382626a9542172da24$
25812+// $hash=edcc9287e560452dd4dde022b9c166455e959d2f$
25813 //
25814
25815 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_FILL_LAYOUT_CTOCPP_H_
25816diff --git a/cef/libcef_dll/ctocpp/views/label_button_ctocpp.cc b/cef/libcef_dll/ctocpp/views/label_button_ctocpp.cc
25817index 0667587714..32475abf83 100644
25818--- a/cef/libcef_dll/ctocpp/views/label_button_ctocpp.cc
25819+++ b/cef/libcef_dll/ctocpp/views/label_button_ctocpp.cc
25820@@ -1,4 +1,4 @@
25821-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25822+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25823 // reserved. Use of this source code is governed by a BSD-style license that
25824 // can be found in the LICENSE file.
25825 //
25826@@ -9,7 +9,7 @@
25827 // implementations. See the translator.README.txt file in the tools directory
25828 // for more information.
25829 //
25830-// $hash=7e8ef08cc7510dc0ca0b580ae4d8031cb7acc268$
25831+// $hash=b88aef8ea10f897dc9d8a409b8083693b4c1a4ee$
25832 //
25833
25834 #include "libcef_dll/ctocpp/views/label_button_ctocpp.h"
25835diff --git a/cef/libcef_dll/ctocpp/views/label_button_ctocpp.h b/cef/libcef_dll/ctocpp/views/label_button_ctocpp.h
25836index e7b32f62ea..9afb0cee6f 100644
25837--- a/cef/libcef_dll/ctocpp/views/label_button_ctocpp.h
25838+++ b/cef/libcef_dll/ctocpp/views/label_button_ctocpp.h
25839@@ -1,4 +1,4 @@
25840-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25841+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25842 // reserved. Use of this source code is governed by a BSD-style license that
25843 // can be found in the LICENSE file.
25844 //
25845@@ -9,7 +9,7 @@
25846 // implementations. See the translator.README.txt file in the tools directory
25847 // for more information.
25848 //
25849-// $hash=303a2dc851723c3bf14c8dc8d58168d75d7f173a$
25850+// $hash=10cbee6b8780c34ac47db87d3fec9286ae7547c9$
25851 //
25852
25853 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_LABEL_BUTTON_CTOCPP_H_
25854diff --git a/cef/libcef_dll/ctocpp/views/layout_ctocpp.cc b/cef/libcef_dll/ctocpp/views/layout_ctocpp.cc
25855index b1d7a75107..f336044420 100644
25856--- a/cef/libcef_dll/ctocpp/views/layout_ctocpp.cc
25857+++ b/cef/libcef_dll/ctocpp/views/layout_ctocpp.cc
25858@@ -1,4 +1,4 @@
25859-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25860+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25861 // reserved. Use of this source code is governed by a BSD-style license that
25862 // can be found in the LICENSE file.
25863 //
25864@@ -9,7 +9,7 @@
25865 // implementations. See the translator.README.txt file in the tools directory
25866 // for more information.
25867 //
25868-// $hash=b23ba6d5b25baf2cfe38578368fbec5ea2769907$
25869+// $hash=6607a4c252dafd39ba695b5d4ecfb14286d70672$
25870 //
25871
25872 #include "libcef_dll/ctocpp/views/layout_ctocpp.h"
25873diff --git a/cef/libcef_dll/ctocpp/views/layout_ctocpp.h b/cef/libcef_dll/ctocpp/views/layout_ctocpp.h
25874index 02d4d52623..7e956dd33d 100644
25875--- a/cef/libcef_dll/ctocpp/views/layout_ctocpp.h
25876+++ b/cef/libcef_dll/ctocpp/views/layout_ctocpp.h
25877@@ -1,4 +1,4 @@
25878-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25879+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25880 // reserved. Use of this source code is governed by a BSD-style license that
25881 // can be found in the LICENSE file.
25882 //
25883@@ -9,7 +9,7 @@
25884 // implementations. See the translator.README.txt file in the tools directory
25885 // for more information.
25886 //
25887-// $hash=4f7c396f1ffa7895fcf12595e623f6466f396b2a$
25888+// $hash=bca67132316cf340babc0457a7728bfbbad55dc2$
25889 //
25890
25891 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_LAYOUT_CTOCPP_H_
25892diff --git a/cef/libcef_dll/ctocpp/views/menu_button_ctocpp.cc b/cef/libcef_dll/ctocpp/views/menu_button_ctocpp.cc
25893index 308d8447b8..ef76ecef7d 100644
25894--- a/cef/libcef_dll/ctocpp/views/menu_button_ctocpp.cc
25895+++ b/cef/libcef_dll/ctocpp/views/menu_button_ctocpp.cc
25896@@ -1,4 +1,4 @@
25897-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25898+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25899 // reserved. Use of this source code is governed by a BSD-style license that
25900 // can be found in the LICENSE file.
25901 //
25902@@ -9,7 +9,7 @@
25903 // implementations. See the translator.README.txt file in the tools directory
25904 // for more information.
25905 //
25906-// $hash=8f766b8f5a014054dcc79f504d34d0df27f75f9d$
25907+// $hash=aad03d06e87ab5901e44bdb5589232bfef133537$
25908 //
25909
25910 #include "libcef_dll/ctocpp/views/menu_button_ctocpp.h"
25911diff --git a/cef/libcef_dll/ctocpp/views/menu_button_ctocpp.h b/cef/libcef_dll/ctocpp/views/menu_button_ctocpp.h
25912index c25b5d7de6..664a4e3364 100644
25913--- a/cef/libcef_dll/ctocpp/views/menu_button_ctocpp.h
25914+++ b/cef/libcef_dll/ctocpp/views/menu_button_ctocpp.h
25915@@ -1,4 +1,4 @@
25916-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25917+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25918 // reserved. Use of this source code is governed by a BSD-style license that
25919 // can be found in the LICENSE file.
25920 //
25921@@ -9,7 +9,7 @@
25922 // implementations. See the translator.README.txt file in the tools directory
25923 // for more information.
25924 //
25925-// $hash=b8208488ed5afed11401a1e2dd647af06a8fe25a$
25926+// $hash=f3adf1e33126dc8df0cb2087e6da4d87569ae1b8$
25927 //
25928
25929 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_MENU_BUTTON_CTOCPP_H_
25930diff --git a/cef/libcef_dll/ctocpp/views/menu_button_delegate_ctocpp.cc b/cef/libcef_dll/ctocpp/views/menu_button_delegate_ctocpp.cc
25931index 89d2e9c61c..9bfe838600 100644
25932--- a/cef/libcef_dll/ctocpp/views/menu_button_delegate_ctocpp.cc
25933+++ b/cef/libcef_dll/ctocpp/views/menu_button_delegate_ctocpp.cc
25934@@ -1,4 +1,4 @@
25935-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25936+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25937 // reserved. Use of this source code is governed by a BSD-style license that
25938 // can be found in the LICENSE file.
25939 //
25940@@ -9,7 +9,7 @@
25941 // implementations. See the translator.README.txt file in the tools directory
25942 // for more information.
25943 //
25944-// $hash=9ecd07954f90dc14ddf36072285c942f2ee8082f$
25945+// $hash=ba83047a0e8f5cbc30c5438b9d1344c84dda638d$
25946 //
25947
25948 #include "libcef_dll/ctocpp/views/menu_button_delegate_ctocpp.h"
25949diff --git a/cef/libcef_dll/ctocpp/views/menu_button_delegate_ctocpp.h b/cef/libcef_dll/ctocpp/views/menu_button_delegate_ctocpp.h
25950index cfdf7c1695..f8627086c2 100644
25951--- a/cef/libcef_dll/ctocpp/views/menu_button_delegate_ctocpp.h
25952+++ b/cef/libcef_dll/ctocpp/views/menu_button_delegate_ctocpp.h
25953@@ -1,4 +1,4 @@
25954-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25955+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25956 // reserved. Use of this source code is governed by a BSD-style license that
25957 // can be found in the LICENSE file.
25958 //
25959@@ -9,7 +9,7 @@
25960 // implementations. See the translator.README.txt file in the tools directory
25961 // for more information.
25962 //
25963-// $hash=7836ec7b53349057b1d1d75c6ba8506620bed53d$
25964+// $hash=7470b3c7a3986cd3cbbbbb484d88fac00fe32a22$
25965 //
25966
25967 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_MENU_BUTTON_DELEGATE_CTOCPP_H_
25968diff --git a/cef/libcef_dll/ctocpp/views/menu_button_pressed_lock_ctocpp.cc b/cef/libcef_dll/ctocpp/views/menu_button_pressed_lock_ctocpp.cc
25969index ab26a6c8e7..3d9127cafb 100644
25970--- a/cef/libcef_dll/ctocpp/views/menu_button_pressed_lock_ctocpp.cc
25971+++ b/cef/libcef_dll/ctocpp/views/menu_button_pressed_lock_ctocpp.cc
25972@@ -1,4 +1,4 @@
25973-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25974+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25975 // reserved. Use of this source code is governed by a BSD-style license that
25976 // can be found in the LICENSE file.
25977 //
25978@@ -9,7 +9,7 @@
25979 // implementations. See the translator.README.txt file in the tools directory
25980 // for more information.
25981 //
25982-// $hash=81e02ced6b0354b18971801f02dee14243699b79$
25983+// $hash=684914b489c5d322b41d61d46f5d387675da2c30$
25984 //
25985
25986 #include "libcef_dll/ctocpp/views/menu_button_pressed_lock_ctocpp.h"
25987diff --git a/cef/libcef_dll/ctocpp/views/menu_button_pressed_lock_ctocpp.h b/cef/libcef_dll/ctocpp/views/menu_button_pressed_lock_ctocpp.h
25988index f9df5eb4ab..fed9e9be2f 100644
25989--- a/cef/libcef_dll/ctocpp/views/menu_button_pressed_lock_ctocpp.h
25990+++ b/cef/libcef_dll/ctocpp/views/menu_button_pressed_lock_ctocpp.h
25991@@ -1,4 +1,4 @@
25992-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
25993+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
25994 // reserved. Use of this source code is governed by a BSD-style license that
25995 // can be found in the LICENSE file.
25996 //
25997@@ -9,7 +9,7 @@
25998 // implementations. See the translator.README.txt file in the tools directory
25999 // for more information.
26000 //
26001-// $hash=b9629230d3cd22c16cb3c6125cb20d31d5308bda$
26002+// $hash=ea81c8b651b803c0d78b06a850c409da3e632b44$
26003 //
26004
26005 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_MENU_BUTTON_PRESSED_LOCK_CTOCPP_H_
26006diff --git a/cef/libcef_dll/ctocpp/views/panel_ctocpp.cc b/cef/libcef_dll/ctocpp/views/panel_ctocpp.cc
26007index 3aa7739a0e..a8d1877508 100644
26008--- a/cef/libcef_dll/ctocpp/views/panel_ctocpp.cc
26009+++ b/cef/libcef_dll/ctocpp/views/panel_ctocpp.cc
26010@@ -1,4 +1,4 @@
26011-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26012+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26013 // reserved. Use of this source code is governed by a BSD-style license that
26014 // can be found in the LICENSE file.
26015 //
26016@@ -9,7 +9,7 @@
26017 // implementations. See the translator.README.txt file in the tools directory
26018 // for more information.
26019 //
26020-// $hash=3e77ca44ea8a99a3fc8c335cca58b4cbc790e9cb$
26021+// $hash=f5c2df20f4b31533822ac3f5b4f2bc623b4cef98$
26022 //
26023
26024 #include "libcef_dll/ctocpp/views/panel_ctocpp.h"
26025diff --git a/cef/libcef_dll/ctocpp/views/panel_ctocpp.h b/cef/libcef_dll/ctocpp/views/panel_ctocpp.h
26026index 242849532f..ebc311563f 100644
26027--- a/cef/libcef_dll/ctocpp/views/panel_ctocpp.h
26028+++ b/cef/libcef_dll/ctocpp/views/panel_ctocpp.h
26029@@ -1,4 +1,4 @@
26030-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26031+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26032 // reserved. Use of this source code is governed by a BSD-style license that
26033 // can be found in the LICENSE file.
26034 //
26035@@ -9,7 +9,7 @@
26036 // implementations. See the translator.README.txt file in the tools directory
26037 // for more information.
26038 //
26039-// $hash=190c731496daef9548f00ed5306c89dac367f035$
26040+// $hash=983c98e6a56fec46770cde83d5c9b500c32569bf$
26041 //
26042
26043 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_PANEL_CTOCPP_H_
26044diff --git a/cef/libcef_dll/ctocpp/views/panel_delegate_ctocpp.cc b/cef/libcef_dll/ctocpp/views/panel_delegate_ctocpp.cc
26045index 0553e58966..e3b9e9608f 100644
26046--- a/cef/libcef_dll/ctocpp/views/panel_delegate_ctocpp.cc
26047+++ b/cef/libcef_dll/ctocpp/views/panel_delegate_ctocpp.cc
26048@@ -1,4 +1,4 @@
26049-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26050+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26051 // reserved. Use of this source code is governed by a BSD-style license that
26052 // can be found in the LICENSE file.
26053 //
26054@@ -9,7 +9,7 @@
26055 // implementations. See the translator.README.txt file in the tools directory
26056 // for more information.
26057 //
26058-// $hash=4bffffc0fe09523839a08109aef1e3de90f6e25c$
26059+// $hash=d22d1a4b06badcf9dde2731dceb782a4a26754ca$
26060 //
26061
26062 #include "libcef_dll/ctocpp/views/panel_delegate_ctocpp.h"
26063diff --git a/cef/libcef_dll/ctocpp/views/panel_delegate_ctocpp.h b/cef/libcef_dll/ctocpp/views/panel_delegate_ctocpp.h
26064index 5830b5eddd..898cbca060 100644
26065--- a/cef/libcef_dll/ctocpp/views/panel_delegate_ctocpp.h
26066+++ b/cef/libcef_dll/ctocpp/views/panel_delegate_ctocpp.h
26067@@ -1,4 +1,4 @@
26068-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26069+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26070 // reserved. Use of this source code is governed by a BSD-style license that
26071 // can be found in the LICENSE file.
26072 //
26073@@ -9,7 +9,7 @@
26074 // implementations. See the translator.README.txt file in the tools directory
26075 // for more information.
26076 //
26077-// $hash=d508126f22cba29931a4d53aecbdaaca7dd39b9d$
26078+// $hash=97314a7d775123710e30d5cb577522d82668afab$
26079 //
26080
26081 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_PANEL_DELEGATE_CTOCPP_H_
26082diff --git a/cef/libcef_dll/ctocpp/views/scroll_view_ctocpp.cc b/cef/libcef_dll/ctocpp/views/scroll_view_ctocpp.cc
26083index 0a459c6ace..c55fcb36d9 100644
26084--- a/cef/libcef_dll/ctocpp/views/scroll_view_ctocpp.cc
26085+++ b/cef/libcef_dll/ctocpp/views/scroll_view_ctocpp.cc
26086@@ -1,4 +1,4 @@
26087-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26088+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26089 // reserved. Use of this source code is governed by a BSD-style license that
26090 // can be found in the LICENSE file.
26091 //
26092@@ -9,7 +9,7 @@
26093 // implementations. See the translator.README.txt file in the tools directory
26094 // for more information.
26095 //
26096-// $hash=8c2b3c821c18076ce40392ea339c177c66d53cc2$
26097+// $hash=93f714e0318bf826518c32b46bcad1ef228a6d66$
26098 //
26099
26100 #include "libcef_dll/ctocpp/views/scroll_view_ctocpp.h"
26101diff --git a/cef/libcef_dll/ctocpp/views/scroll_view_ctocpp.h b/cef/libcef_dll/ctocpp/views/scroll_view_ctocpp.h
26102index 939ae3aac5..8fa0406dea 100644
26103--- a/cef/libcef_dll/ctocpp/views/scroll_view_ctocpp.h
26104+++ b/cef/libcef_dll/ctocpp/views/scroll_view_ctocpp.h
26105@@ -1,4 +1,4 @@
26106-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26107+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26108 // reserved. Use of this source code is governed by a BSD-style license that
26109 // can be found in the LICENSE file.
26110 //
26111@@ -9,7 +9,7 @@
26112 // implementations. See the translator.README.txt file in the tools directory
26113 // for more information.
26114 //
26115-// $hash=0a09eb1829f89d4f677c43909e0d4e1727ba1758$
26116+// $hash=2fd0fb3cec5a7211fb2121a644ebccc36e4fb06d$
26117 //
26118
26119 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_SCROLL_VIEW_CTOCPP_H_
26120diff --git a/cef/libcef_dll/ctocpp/views/textfield_ctocpp.cc b/cef/libcef_dll/ctocpp/views/textfield_ctocpp.cc
26121index 30b3c3049e..5f0d3af247 100644
26122--- a/cef/libcef_dll/ctocpp/views/textfield_ctocpp.cc
26123+++ b/cef/libcef_dll/ctocpp/views/textfield_ctocpp.cc
26124@@ -1,4 +1,4 @@
26125-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26126+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26127 // reserved. Use of this source code is governed by a BSD-style license that
26128 // can be found in the LICENSE file.
26129 //
26130@@ -9,7 +9,7 @@
26131 // implementations. See the translator.README.txt file in the tools directory
26132 // for more information.
26133 //
26134-// $hash=132a40648e492f00f21d6762ff63d4491e8060c3$
26135+// $hash=75f0e7ca7793781032c055104e275f39a13bddb9$
26136 //
26137
26138 #include "libcef_dll/ctocpp/views/textfield_ctocpp.h"
26139diff --git a/cef/libcef_dll/ctocpp/views/textfield_ctocpp.h b/cef/libcef_dll/ctocpp/views/textfield_ctocpp.h
26140index 0beb9c123c..d68c0992cc 100644
26141--- a/cef/libcef_dll/ctocpp/views/textfield_ctocpp.h
26142+++ b/cef/libcef_dll/ctocpp/views/textfield_ctocpp.h
26143@@ -1,4 +1,4 @@
26144-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26145+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26146 // reserved. Use of this source code is governed by a BSD-style license that
26147 // can be found in the LICENSE file.
26148 //
26149@@ -9,7 +9,7 @@
26150 // implementations. See the translator.README.txt file in the tools directory
26151 // for more information.
26152 //
26153-// $hash=f57b9f72a806aecacaa984faf584fdf7c1c99301$
26154+// $hash=e07b698a905f01b008c99e0e7a7a0f7f1fcceed7$
26155 //
26156
26157 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_TEXTFIELD_CTOCPP_H_
26158diff --git a/cef/libcef_dll/ctocpp/views/textfield_delegate_ctocpp.cc b/cef/libcef_dll/ctocpp/views/textfield_delegate_ctocpp.cc
26159index d2d841a3d6..8956ce249a 100644
26160--- a/cef/libcef_dll/ctocpp/views/textfield_delegate_ctocpp.cc
26161+++ b/cef/libcef_dll/ctocpp/views/textfield_delegate_ctocpp.cc
26162@@ -1,4 +1,4 @@
26163-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26164+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26165 // reserved. Use of this source code is governed by a BSD-style license that
26166 // can be found in the LICENSE file.
26167 //
26168@@ -9,7 +9,7 @@
26169 // implementations. See the translator.README.txt file in the tools directory
26170 // for more information.
26171 //
26172-// $hash=8582eda62f90bab166d04bb6a2f8783a98fabe15$
26173+// $hash=04d04a0da9c1afb8e475b32941a0be5f5c6ff846$
26174 //
26175
26176 #include "libcef_dll/ctocpp/views/textfield_delegate_ctocpp.h"
26177diff --git a/cef/libcef_dll/ctocpp/views/textfield_delegate_ctocpp.h b/cef/libcef_dll/ctocpp/views/textfield_delegate_ctocpp.h
26178index dd2af45863..dc4ae92cbd 100644
26179--- a/cef/libcef_dll/ctocpp/views/textfield_delegate_ctocpp.h
26180+++ b/cef/libcef_dll/ctocpp/views/textfield_delegate_ctocpp.h
26181@@ -1,4 +1,4 @@
26182-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26183+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26184 // reserved. Use of this source code is governed by a BSD-style license that
26185 // can be found in the LICENSE file.
26186 //
26187@@ -9,7 +9,7 @@
26188 // implementations. See the translator.README.txt file in the tools directory
26189 // for more information.
26190 //
26191-// $hash=3a83b906a29ba302874b73804e457680d2b7251e$
26192+// $hash=304355beb3188c856d75fb9b51a4ca69f1cb815d$
26193 //
26194
26195 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_TEXTFIELD_DELEGATE_CTOCPP_H_
26196diff --git a/cef/libcef_dll/ctocpp/views/view_ctocpp.cc b/cef/libcef_dll/ctocpp/views/view_ctocpp.cc
26197index 631c02cf30..f130aa0fda 100644
26198--- a/cef/libcef_dll/ctocpp/views/view_ctocpp.cc
26199+++ b/cef/libcef_dll/ctocpp/views/view_ctocpp.cc
26200@@ -1,4 +1,4 @@
26201-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26202+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26203 // reserved. Use of this source code is governed by a BSD-style license that
26204 // can be found in the LICENSE file.
26205 //
26206@@ -9,7 +9,7 @@
26207 // implementations. See the translator.README.txt file in the tools directory
26208 // for more information.
26209 //
26210-// $hash=d791f23eeaa056cdc478743acd452c1d60a4fd00$
26211+// $hash=34ee98e682e61eafd7cfdd22ff2419ab399b15f4$
26212 //
26213
26214 #include "libcef_dll/ctocpp/views/view_ctocpp.h"
26215diff --git a/cef/libcef_dll/ctocpp/views/view_ctocpp.h b/cef/libcef_dll/ctocpp/views/view_ctocpp.h
26216index fb48b96b0f..0f877ce392 100644
26217--- a/cef/libcef_dll/ctocpp/views/view_ctocpp.h
26218+++ b/cef/libcef_dll/ctocpp/views/view_ctocpp.h
26219@@ -1,4 +1,4 @@
26220-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26221+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26222 // reserved. Use of this source code is governed by a BSD-style license that
26223 // can be found in the LICENSE file.
26224 //
26225@@ -9,7 +9,7 @@
26226 // implementations. See the translator.README.txt file in the tools directory
26227 // for more information.
26228 //
26229-// $hash=841ccd4760ce1b41c48476df1575b1ac61661a23$
26230+// $hash=a3e0a96f62afa3dc0a61a25e71c41209efa658a7$
26231 //
26232
26233 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_VIEW_CTOCPP_H_
26234diff --git a/cef/libcef_dll/ctocpp/views/view_delegate_ctocpp.cc b/cef/libcef_dll/ctocpp/views/view_delegate_ctocpp.cc
26235index a0351ab67c..023de30f86 100644
26236--- a/cef/libcef_dll/ctocpp/views/view_delegate_ctocpp.cc
26237+++ b/cef/libcef_dll/ctocpp/views/view_delegate_ctocpp.cc
26238@@ -1,4 +1,4 @@
26239-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26240+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26241 // reserved. Use of this source code is governed by a BSD-style license that
26242 // can be found in the LICENSE file.
26243 //
26244@@ -9,7 +9,7 @@
26245 // implementations. See the translator.README.txt file in the tools directory
26246 // for more information.
26247 //
26248-// $hash=7a6d2ca91509c2e6c510d5c9585a74c2fe10499b$
26249+// $hash=b6cc59e6fa1ba6b871f152f75c7f5875a7068172$
26250 //
26251
26252 #include "libcef_dll/ctocpp/views/view_delegate_ctocpp.h"
26253diff --git a/cef/libcef_dll/ctocpp/views/view_delegate_ctocpp.h b/cef/libcef_dll/ctocpp/views/view_delegate_ctocpp.h
26254index c1465a6ff9..8fad2af4d3 100644
26255--- a/cef/libcef_dll/ctocpp/views/view_delegate_ctocpp.h
26256+++ b/cef/libcef_dll/ctocpp/views/view_delegate_ctocpp.h
26257@@ -1,4 +1,4 @@
26258-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26259+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26260 // reserved. Use of this source code is governed by a BSD-style license that
26261 // can be found in the LICENSE file.
26262 //
26263@@ -9,7 +9,7 @@
26264 // implementations. See the translator.README.txt file in the tools directory
26265 // for more information.
26266 //
26267-// $hash=f049a053042a00be15899439f324a376ee309dbb$
26268+// $hash=fce672472de411169f81476a6ce779bc9f31846c$
26269 //
26270
26271 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_VIEW_DELEGATE_CTOCPP_H_
26272diff --git a/cef/libcef_dll/ctocpp/views/window_ctocpp.cc b/cef/libcef_dll/ctocpp/views/window_ctocpp.cc
26273index 6905ef7695..c05d7bbede 100644
26274--- a/cef/libcef_dll/ctocpp/views/window_ctocpp.cc
26275+++ b/cef/libcef_dll/ctocpp/views/window_ctocpp.cc
26276@@ -1,4 +1,4 @@
26277-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26278+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26279 // reserved. Use of this source code is governed by a BSD-style license that
26280 // can be found in the LICENSE file.
26281 //
26282@@ -9,7 +9,7 @@
26283 // implementations. See the translator.README.txt file in the tools directory
26284 // for more information.
26285 //
26286-// $hash=6480777364c6c194652bf69ef2bb087c0805eddf$
26287+// $hash=4df98951ff8475f4b02a4b9efad8bd82ac9b5ea8$
26288 //
26289
26290 #include "libcef_dll/ctocpp/views/window_ctocpp.h"
26291diff --git a/cef/libcef_dll/ctocpp/views/window_ctocpp.h b/cef/libcef_dll/ctocpp/views/window_ctocpp.h
26292index e680f68c74..ca6e2f4554 100644
26293--- a/cef/libcef_dll/ctocpp/views/window_ctocpp.h
26294+++ b/cef/libcef_dll/ctocpp/views/window_ctocpp.h
26295@@ -1,4 +1,4 @@
26296-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26297+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26298 // reserved. Use of this source code is governed by a BSD-style license that
26299 // can be found in the LICENSE file.
26300 //
26301@@ -9,7 +9,7 @@
26302 // implementations. See the translator.README.txt file in the tools directory
26303 // for more information.
26304 //
26305-// $hash=6aa7373f97dc08f125b239bd6018bc9ad2c52c3c$
26306+// $hash=d0176d98368bf239b93d2c65932b6f4fce62802a$
26307 //
26308
26309 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_WINDOW_CTOCPP_H_
26310diff --git a/cef/libcef_dll/ctocpp/views/window_delegate_ctocpp.cc b/cef/libcef_dll/ctocpp/views/window_delegate_ctocpp.cc
26311index 6e724157ed..115b56e488 100644
26312--- a/cef/libcef_dll/ctocpp/views/window_delegate_ctocpp.cc
26313+++ b/cef/libcef_dll/ctocpp/views/window_delegate_ctocpp.cc
26314@@ -1,4 +1,4 @@
26315-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26316+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26317 // reserved. Use of this source code is governed by a BSD-style license that
26318 // can be found in the LICENSE file.
26319 //
26320@@ -9,7 +9,7 @@
26321 // implementations. See the translator.README.txt file in the tools directory
26322 // for more information.
26323 //
26324-// $hash=dda345b957ac58c71770da1cf4813ce16ea568b8$
26325+// $hash=c0a17efae4f7dc02fa35f774999b290c4f70d96c$
26326 //
26327
26328 #include "libcef_dll/ctocpp/views/window_delegate_ctocpp.h"
26329diff --git a/cef/libcef_dll/ctocpp/views/window_delegate_ctocpp.h b/cef/libcef_dll/ctocpp/views/window_delegate_ctocpp.h
26330index 5790e9a73d..4b84fd4326 100644
26331--- a/cef/libcef_dll/ctocpp/views/window_delegate_ctocpp.h
26332+++ b/cef/libcef_dll/ctocpp/views/window_delegate_ctocpp.h
26333@@ -1,4 +1,4 @@
26334-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26335+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26336 // reserved. Use of this source code is governed by a BSD-style license that
26337 // can be found in the LICENSE file.
26338 //
26339@@ -9,7 +9,7 @@
26340 // implementations. See the translator.README.txt file in the tools directory
26341 // for more information.
26342 //
26343-// $hash=4e5e470d6aa929b3b2d4286eb4bcdc90dba052dc$
26344+// $hash=3478d6b39e5fee0d77086b34b717b47ff267e2e7$
26345 //
26346
26347 #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_WINDOW_DELEGATE_CTOCPP_H_
26348diff --git a/cef/libcef_dll/ctocpp/waitable_event_ctocpp.cc b/cef/libcef_dll/ctocpp/waitable_event_ctocpp.cc
26349index 5febe1d854..175fe0601c 100644
26350--- a/cef/libcef_dll/ctocpp/waitable_event_ctocpp.cc
26351+++ b/cef/libcef_dll/ctocpp/waitable_event_ctocpp.cc
26352@@ -1,4 +1,4 @@
26353-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26354+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26355 // reserved. Use of this source code is governed by a BSD-style license that
26356 // can be found in the LICENSE file.
26357 //
26358@@ -9,7 +9,7 @@
26359 // implementations. See the translator.README.txt file in the tools directory
26360 // for more information.
26361 //
26362-// $hash=d1714ee1ee61285942fd381b92cb197503320efb$
26363+// $hash=4d16f6afcc06cee186ba3aa5752dc5933e6b57f4$
26364 //
26365
26366 #include "libcef_dll/ctocpp/waitable_event_ctocpp.h"
26367diff --git a/cef/libcef_dll/ctocpp/waitable_event_ctocpp.h b/cef/libcef_dll/ctocpp/waitable_event_ctocpp.h
26368index c0016d530b..66b5b645e6 100644
26369--- a/cef/libcef_dll/ctocpp/waitable_event_ctocpp.h
26370+++ b/cef/libcef_dll/ctocpp/waitable_event_ctocpp.h
26371@@ -1,4 +1,4 @@
26372-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26373+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26374 // reserved. Use of this source code is governed by a BSD-style license that
26375 // can be found in the LICENSE file.
26376 //
26377@@ -9,7 +9,7 @@
26378 // implementations. See the translator.README.txt file in the tools directory
26379 // for more information.
26380 //
26381-// $hash=f5669491fd2475dc9755a6e624a737312711d2d3$
26382+// $hash=8dc1c2feaee54c36914be2bbcdcfd4a7c9a42107$
26383 //
26384
26385 #ifndef CEF_LIBCEF_DLL_CTOCPP_WAITABLE_EVENT_CTOCPP_H_
26386diff --git a/cef/libcef_dll/ctocpp/web_plugin_info_ctocpp.cc b/cef/libcef_dll/ctocpp/web_plugin_info_ctocpp.cc
26387index e1779cc86e..6638dba62e 100644
26388--- a/cef/libcef_dll/ctocpp/web_plugin_info_ctocpp.cc
26389+++ b/cef/libcef_dll/ctocpp/web_plugin_info_ctocpp.cc
26390@@ -1,4 +1,4 @@
26391-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26392+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26393 // reserved. Use of this source code is governed by a BSD-style license that
26394 // can be found in the LICENSE file.
26395 //
26396@@ -9,7 +9,7 @@
26397 // implementations. See the translator.README.txt file in the tools directory
26398 // for more information.
26399 //
26400-// $hash=1ba28481accff89ed45808c7bf4ea45f58ad4bfb$
26401+// $hash=9d4817b23d989f8ebda6d7be594bca00fe84c3a6$
26402 //
26403
26404 #include "libcef_dll/ctocpp/web_plugin_info_ctocpp.h"
26405diff --git a/cef/libcef_dll/ctocpp/web_plugin_info_ctocpp.h b/cef/libcef_dll/ctocpp/web_plugin_info_ctocpp.h
26406index 64a055165c..849b2e87a1 100644
26407--- a/cef/libcef_dll/ctocpp/web_plugin_info_ctocpp.h
26408+++ b/cef/libcef_dll/ctocpp/web_plugin_info_ctocpp.h
26409@@ -1,4 +1,4 @@
26410-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26411+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26412 // reserved. Use of this source code is governed by a BSD-style license that
26413 // can be found in the LICENSE file.
26414 //
26415@@ -9,7 +9,7 @@
26416 // implementations. See the translator.README.txt file in the tools directory
26417 // for more information.
26418 //
26419-// $hash=012c4dec0875476356fe25c479539a4481a550c3$
26420+// $hash=7d528ce85760411eb45e53ed2c33ae9012c5ca19$
26421 //
26422
26423 #ifndef CEF_LIBCEF_DLL_CTOCPP_WEB_PLUGIN_INFO_CTOCPP_H_
26424diff --git a/cef/libcef_dll/ctocpp/web_plugin_info_visitor_ctocpp.cc b/cef/libcef_dll/ctocpp/web_plugin_info_visitor_ctocpp.cc
26425index 92d937bce3..50615c2372 100644
26426--- a/cef/libcef_dll/ctocpp/web_plugin_info_visitor_ctocpp.cc
26427+++ b/cef/libcef_dll/ctocpp/web_plugin_info_visitor_ctocpp.cc
26428@@ -1,4 +1,4 @@
26429-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26430+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26431 // reserved. Use of this source code is governed by a BSD-style license that
26432 // can be found in the LICENSE file.
26433 //
26434@@ -9,7 +9,7 @@
26435 // implementations. See the translator.README.txt file in the tools directory
26436 // for more information.
26437 //
26438-// $hash=5327077faa6f56201e5e4b1334f505899341e06f$
26439+// $hash=387ecb28b55d3ece3eb4fcf0e119918fd5e36fd7$
26440 //
26441
26442 #include "libcef_dll/ctocpp/web_plugin_info_visitor_ctocpp.h"
26443diff --git a/cef/libcef_dll/ctocpp/web_plugin_info_visitor_ctocpp.h b/cef/libcef_dll/ctocpp/web_plugin_info_visitor_ctocpp.h
26444index 9004cfa6cd..b2dbc50fa4 100644
26445--- a/cef/libcef_dll/ctocpp/web_plugin_info_visitor_ctocpp.h
26446+++ b/cef/libcef_dll/ctocpp/web_plugin_info_visitor_ctocpp.h
26447@@ -1,4 +1,4 @@
26448-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26449+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26450 // reserved. Use of this source code is governed by a BSD-style license that
26451 // can be found in the LICENSE file.
26452 //
26453@@ -9,7 +9,7 @@
26454 // implementations. See the translator.README.txt file in the tools directory
26455 // for more information.
26456 //
26457-// $hash=1c1a81686fed72638be69dd0bef2ae468ae0700c$
26458+// $hash=eb32b50c8f9ec072541fe4effffd00159f99ad0b$
26459 //
26460
26461 #ifndef CEF_LIBCEF_DLL_CTOCPP_WEB_PLUGIN_INFO_VISITOR_CTOCPP_H_
26462diff --git a/cef/libcef_dll/ctocpp/web_plugin_unstable_callback_ctocpp.cc b/cef/libcef_dll/ctocpp/web_plugin_unstable_callback_ctocpp.cc
26463index 29640902b9..eafe8956d6 100644
26464--- a/cef/libcef_dll/ctocpp/web_plugin_unstable_callback_ctocpp.cc
26465+++ b/cef/libcef_dll/ctocpp/web_plugin_unstable_callback_ctocpp.cc
26466@@ -1,4 +1,4 @@
26467-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26468+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26469 // reserved. Use of this source code is governed by a BSD-style license that
26470 // can be found in the LICENSE file.
26471 //
26472@@ -9,7 +9,7 @@
26473 // implementations. See the translator.README.txt file in the tools directory
26474 // for more information.
26475 //
26476-// $hash=71e7051f64bfaf814c4d16874c3b49204d2c6bce$
26477+// $hash=feef390ffa570224c4ff5ef11ecce9cb87b32f65$
26478 //
26479
26480 #include "libcef_dll/ctocpp/web_plugin_unstable_callback_ctocpp.h"
26481diff --git a/cef/libcef_dll/ctocpp/web_plugin_unstable_callback_ctocpp.h b/cef/libcef_dll/ctocpp/web_plugin_unstable_callback_ctocpp.h
26482index f5848ff1f7..004acc20eb 100644
26483--- a/cef/libcef_dll/ctocpp/web_plugin_unstable_callback_ctocpp.h
26484+++ b/cef/libcef_dll/ctocpp/web_plugin_unstable_callback_ctocpp.h
26485@@ -1,4 +1,4 @@
26486-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26487+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26488 // reserved. Use of this source code is governed by a BSD-style license that
26489 // can be found in the LICENSE file.
26490 //
26491@@ -9,7 +9,7 @@
26492 // implementations. See the translator.README.txt file in the tools directory
26493 // for more information.
26494 //
26495-// $hash=245c0ca666ccbc844a44c9c4ad8676b82656ee93$
26496+// $hash=b3c9d90a4db5994aa5283611044dceffc5ef2baa$
26497 //
26498
26499 #ifndef CEF_LIBCEF_DLL_CTOCPP_WEB_PLUGIN_UNSTABLE_CALLBACK_CTOCPP_H_
26500diff --git a/cef/libcef_dll/ctocpp/write_handler_ctocpp.cc b/cef/libcef_dll/ctocpp/write_handler_ctocpp.cc
26501index 2916b45f4c..4efb2d1a7c 100644
26502--- a/cef/libcef_dll/ctocpp/write_handler_ctocpp.cc
26503+++ b/cef/libcef_dll/ctocpp/write_handler_ctocpp.cc
26504@@ -1,4 +1,4 @@
26505-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26506+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26507 // reserved. Use of this source code is governed by a BSD-style license that
26508 // can be found in the LICENSE file.
26509 //
26510@@ -9,7 +9,7 @@
26511 // implementations. See the translator.README.txt file in the tools directory
26512 // for more information.
26513 //
26514-// $hash=d5e6c2b29cf08f7aa4586f919c0c90b810fb4727$
26515+// $hash=728e5a2aa03b7884d5001f784dcf6bc6fb79254a$
26516 //
26517
26518 #include "libcef_dll/ctocpp/write_handler_ctocpp.h"
26519diff --git a/cef/libcef_dll/ctocpp/write_handler_ctocpp.h b/cef/libcef_dll/ctocpp/write_handler_ctocpp.h
26520index ed4f73f268..b302f19cda 100644
26521--- a/cef/libcef_dll/ctocpp/write_handler_ctocpp.h
26522+++ b/cef/libcef_dll/ctocpp/write_handler_ctocpp.h
26523@@ -1,4 +1,4 @@
26524-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26525+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26526 // reserved. Use of this source code is governed by a BSD-style license that
26527 // can be found in the LICENSE file.
26528 //
26529@@ -9,7 +9,7 @@
26530 // implementations. See the translator.README.txt file in the tools directory
26531 // for more information.
26532 //
26533-// $hash=b49e30471f4102194bf6d1c64b5277e368901f58$
26534+// $hash=f6c9ec7aa1916be4cc120149c9e174751fc3ea77$
26535 //
26536
26537 #ifndef CEF_LIBCEF_DLL_CTOCPP_WRITE_HANDLER_CTOCPP_H_
26538diff --git a/cef/libcef_dll/ctocpp/x509cert_principal_ctocpp.cc b/cef/libcef_dll/ctocpp/x509cert_principal_ctocpp.cc
26539index 391ea9f3f7..23a7bb776b 100644
26540--- a/cef/libcef_dll/ctocpp/x509cert_principal_ctocpp.cc
26541+++ b/cef/libcef_dll/ctocpp/x509cert_principal_ctocpp.cc
26542@@ -1,4 +1,4 @@
26543-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26544+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26545 // reserved. Use of this source code is governed by a BSD-style license that
26546 // can be found in the LICENSE file.
26547 //
26548@@ -9,7 +9,7 @@
26549 // implementations. See the translator.README.txt file in the tools directory
26550 // for more information.
26551 //
26552-// $hash=f23f6d879d43ceea6d21e76c20942c242464deb8$
26553+// $hash=1799aec02f9d2491056fbf3042b4ba89498adaf4$
26554 //
26555
26556 #include "libcef_dll/ctocpp/x509cert_principal_ctocpp.h"
26557diff --git a/cef/libcef_dll/ctocpp/x509cert_principal_ctocpp.h b/cef/libcef_dll/ctocpp/x509cert_principal_ctocpp.h
26558index 4bb4a8c6d7..ff7b2dc291 100644
26559--- a/cef/libcef_dll/ctocpp/x509cert_principal_ctocpp.h
26560+++ b/cef/libcef_dll/ctocpp/x509cert_principal_ctocpp.h
26561@@ -1,4 +1,4 @@
26562-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26563+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26564 // reserved. Use of this source code is governed by a BSD-style license that
26565 // can be found in the LICENSE file.
26566 //
26567@@ -9,7 +9,7 @@
26568 // implementations. See the translator.README.txt file in the tools directory
26569 // for more information.
26570 //
26571-// $hash=4bf290893db30f92b41162cf2cd47457f94b9940$
26572+// $hash=13b7a4dd2d7677a378def6201fcf32495ec89701$
26573 //
26574
26575 #ifndef CEF_LIBCEF_DLL_CTOCPP_X509CERT_PRINCIPAL_CTOCPP_H_
26576diff --git a/cef/libcef_dll/ctocpp/x509certificate_ctocpp.cc b/cef/libcef_dll/ctocpp/x509certificate_ctocpp.cc
26577index 71584b8282..5dc3e32e11 100644
26578--- a/cef/libcef_dll/ctocpp/x509certificate_ctocpp.cc
26579+++ b/cef/libcef_dll/ctocpp/x509certificate_ctocpp.cc
26580@@ -1,4 +1,4 @@
26581-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26582+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26583 // reserved. Use of this source code is governed by a BSD-style license that
26584 // can be found in the LICENSE file.
26585 //
26586@@ -9,7 +9,7 @@
26587 // implementations. See the translator.README.txt file in the tools directory
26588 // for more information.
26589 //
26590-// $hash=fa094f8add3043e35ad18783484c11aa2b883fa7$
26591+// $hash=b5ab278c54b7ed9046b43a7f362a18ebc8bde146$
26592 //
26593
26594 #include "libcef_dll/ctocpp/x509certificate_ctocpp.h"
26595diff --git a/cef/libcef_dll/ctocpp/x509certificate_ctocpp.h b/cef/libcef_dll/ctocpp/x509certificate_ctocpp.h
26596index 1179cbd7cf..23adbfa10b 100644
26597--- a/cef/libcef_dll/ctocpp/x509certificate_ctocpp.h
26598+++ b/cef/libcef_dll/ctocpp/x509certificate_ctocpp.h
26599@@ -1,4 +1,4 @@
26600-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26601+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26602 // reserved. Use of this source code is governed by a BSD-style license that
26603 // can be found in the LICENSE file.
26604 //
26605@@ -9,7 +9,7 @@
26606 // implementations. See the translator.README.txt file in the tools directory
26607 // for more information.
26608 //
26609-// $hash=96506815984e01c7670fededdc24ea0b5b6b4cee$
26610+// $hash=858a4d6e0fb14d1f20ad386c90efbfe2f3778ac4$
26611 //
26612
26613 #ifndef CEF_LIBCEF_DLL_CTOCPP_X509CERTIFICATE_CTOCPP_H_
26614diff --git a/cef/libcef_dll/ctocpp/xml_reader_ctocpp.cc b/cef/libcef_dll/ctocpp/xml_reader_ctocpp.cc
26615index d6a7ce2366..617f05151b 100644
26616--- a/cef/libcef_dll/ctocpp/xml_reader_ctocpp.cc
26617+++ b/cef/libcef_dll/ctocpp/xml_reader_ctocpp.cc
26618@@ -1,4 +1,4 @@
26619-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26620+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26621 // reserved. Use of this source code is governed by a BSD-style license that
26622 // can be found in the LICENSE file.
26623 //
26624@@ -9,7 +9,7 @@
26625 // implementations. See the translator.README.txt file in the tools directory
26626 // for more information.
26627 //
26628-// $hash=579edc584404eea55aa9e33a0dc789b1a1afa5ce$
26629+// $hash=9fc59c7d9a9acbf92fde0cfceda151c4936c136b$
26630 //
26631
26632 #include "libcef_dll/ctocpp/xml_reader_ctocpp.h"
26633diff --git a/cef/libcef_dll/ctocpp/xml_reader_ctocpp.h b/cef/libcef_dll/ctocpp/xml_reader_ctocpp.h
26634index 817c6834e8..f1c4128598 100644
26635--- a/cef/libcef_dll/ctocpp/xml_reader_ctocpp.h
26636+++ b/cef/libcef_dll/ctocpp/xml_reader_ctocpp.h
26637@@ -1,4 +1,4 @@
26638-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26639+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26640 // reserved. Use of this source code is governed by a BSD-style license that
26641 // can be found in the LICENSE file.
26642 //
26643@@ -9,7 +9,7 @@
26644 // implementations. See the translator.README.txt file in the tools directory
26645 // for more information.
26646 //
26647-// $hash=ba444818045821388677e80af1f848b3938a7f1b$
26648+// $hash=65bd41873882fe44f3a8274b9a5b2abc0be9bc4f$
26649 //
26650
26651 #ifndef CEF_LIBCEF_DLL_CTOCPP_XML_READER_CTOCPP_H_
26652diff --git a/cef/libcef_dll/ctocpp/zip_reader_ctocpp.cc b/cef/libcef_dll/ctocpp/zip_reader_ctocpp.cc
26653index de1eee085a..381241d341 100644
26654--- a/cef/libcef_dll/ctocpp/zip_reader_ctocpp.cc
26655+++ b/cef/libcef_dll/ctocpp/zip_reader_ctocpp.cc
26656@@ -1,4 +1,4 @@
26657-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26658+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26659 // reserved. Use of this source code is governed by a BSD-style license that
26660 // can be found in the LICENSE file.
26661 //
26662@@ -9,7 +9,7 @@
26663 // implementations. See the translator.README.txt file in the tools directory
26664 // for more information.
26665 //
26666-// $hash=883eb778e50772e1cb2901f59693e837790847c6$
26667+// $hash=f01ac0e38723b8786f115a14dbca8d4d3d1a57bf$
26668 //
26669
26670 #include "libcef_dll/ctocpp/zip_reader_ctocpp.h"
26671diff --git a/cef/libcef_dll/ctocpp/zip_reader_ctocpp.h b/cef/libcef_dll/ctocpp/zip_reader_ctocpp.h
26672index 31c8bfc5ae..6d63d873dd 100644
26673--- a/cef/libcef_dll/ctocpp/zip_reader_ctocpp.h
26674+++ b/cef/libcef_dll/ctocpp/zip_reader_ctocpp.h
26675@@ -1,4 +1,4 @@
26676-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26677+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26678 // reserved. Use of this source code is governed by a BSD-style license that
26679 // can be found in the LICENSE file.
26680 //
26681@@ -9,7 +9,7 @@
26682 // implementations. See the translator.README.txt file in the tools directory
26683 // for more information.
26684 //
26685-// $hash=e405cb0ca0caf967b58bc31d542bf346d6989022$
26686+// $hash=5467459fccd6d42323c5ce2e6338423ee98026db$
26687 //
26688
26689 #ifndef CEF_LIBCEF_DLL_CTOCPP_ZIP_READER_CTOCPP_H_
26690diff --git a/cef/libcef_dll/libcef_dll.cc b/cef/libcef_dll/libcef_dll.cc
26691index f9c52222c0..a6ffa54d33 100644
26692--- a/cef/libcef_dll/libcef_dll.cc
26693+++ b/cef/libcef_dll/libcef_dll.cc
26694@@ -1,4 +1,4 @@
26695-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26696+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26697 // reserved. Use of this source code is governed by a BSD-style license that
26698 // can be found in the LICENSE file.
26699 //
26700@@ -9,7 +9,7 @@
26701 // implementations. See the translator.README.txt file in the tools directory
26702 // for more information.
26703 //
26704-// $hash=b2f22315d4021be203ececa54d5bb8c651f60dfc$
26705+// $hash=4c84753487cbffec964954a78088e667f63df1e3$
26706 //
26707
26708 #include "include/capi/cef_app_capi.h"
26709diff --git a/cef/libcef_dll/views_stub.cc b/cef/libcef_dll/views_stub.cc
26710index 70b15bc112..5ebce32154 100644
26711--- a/cef/libcef_dll/views_stub.cc
26712+++ b/cef/libcef_dll/views_stub.cc
26713@@ -1,4 +1,4 @@
26714-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26715+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26716 // reserved. Use of this source code is governed by a BSD-style license that
26717 // can be found in the LICENSE file.
26718 //
26719@@ -9,7 +9,7 @@
26720 // implementations. See the translator.README.txt file in the tools directory
26721 // for more information.
26722 //
26723-// $hash=912ed008854d84294dca15c3c9e1b9a362c4a886$
26724+// $hash=892496158fbb51c0534dfbdfd4597daef6b21da7$
26725 //
26726
26727 #include "include/views/cef_browser_view.h"
26728diff --git a/cef/libcef_dll/wrapper/libcef_dll_dylib.cc b/cef/libcef_dll/wrapper/libcef_dll_dylib.cc
26729index 67655ef1dc..1158ab5b75 100644
26730--- a/cef/libcef_dll/wrapper/libcef_dll_dylib.cc
26731+++ b/cef/libcef_dll/wrapper/libcef_dll_dylib.cc
26732@@ -1,4 +1,4 @@
26733-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26734+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26735 // reserved. Use of this source code is governed by a BSD-style license that
26736 // can be found in the LICENSE file.
26737 //
26738@@ -9,7 +9,7 @@
26739 // implementations. See the translator.README.txt file in the tools directory
26740 // for more information.
26741 //
26742-// $hash=9fbe1de9cf7f32c551c535e190d4c82b4947765d$
26743+// $hash=63f62b21e8d9e400f6e19f11f93ddb3f838e7620$
26744 //
26745
26746 #include <dlfcn.h>
26747@@ -201,6 +201,9 @@ typedef struct _cef_command_line_t* (*cef_command_line_get_global_ptr)();
26748 typedef struct _cef_cookie_manager_t* (
26749     *cef_cookie_manager_get_global_manager_ptr)(
26750     struct _cef_completion_callback_t*);
26751+typedef int (*cef_cookie_manager_create_cef_cookie_ptr)(const cef_string_t*,
26752+                                                        const cef_string_t*,
26753+                                                        struct _cef_cookie_t*);
26754 typedef struct _cef_drag_data_t* (*cef_drag_data_create_ptr)();
26755 typedef struct _cef_image_t* (*cef_image_create_ptr)();
26756 typedef struct _cef_media_router_t* (*cef_media_router_get_global_ptr)(
26757@@ -578,6 +581,7 @@ struct libcef_pointers {
26758   cef_command_line_get_global_ptr cef_command_line_get_global;
26759   cef_cookie_manager_get_global_manager_ptr
26760       cef_cookie_manager_get_global_manager;
26761+  cef_cookie_manager_create_cef_cookie_ptr cef_cookie_manager_create_cef_cookie;
26762   cef_drag_data_create_ptr cef_drag_data_create;
26763   cef_image_create_ptr cef_image_create;
26764   cef_media_router_get_global_ptr cef_media_router_get_global;
26765@@ -793,6 +797,7 @@ int libcef_init_pointers(const char* path) {
26766   INIT_ENTRY(cef_command_line_create);
26767   INIT_ENTRY(cef_command_line_get_global);
26768   INIT_ENTRY(cef_cookie_manager_get_global_manager);
26769+  INIT_ENTRY(cef_cookie_manager_create_cef_cookie);
26770   INIT_ENTRY(cef_drag_data_create);
26771   INIT_ENTRY(cef_image_create);
26772   INIT_ENTRY(cef_media_router_get_global);
26773@@ -1094,8 +1099,8 @@ int cef_create_url(const struct _cef_urlparts_t* parts, cef_string_t* url) {
26774 }
26775
26776 NO_SANITIZE("cfi-icall")
26777-cef_string_userfree_t cef_format_url_for_security_display(
26778-    const cef_string_t* origin_url) {
26779+cef_string_userfree_t
26780+    cef_format_url_for_security_display(const cef_string_t* origin_url) {
26781   return g_libcef_pointers.cef_format_url_for_security_display(origin_url);
26782 }
26783
26784@@ -1307,6 +1312,14 @@ struct _cef_cookie_manager_t* cef_cookie_manager_get_global_manager(
26785   return g_libcef_pointers.cef_cookie_manager_get_global_manager(callback);
26786 }
26787
26788+NO_SANITIZE("cfi-icall")
26789+int cef_cookie_manager_create_cef_cookie(const cef_string_t* url,
26790+                                         const cef_string_t* value,
26791+                                         struct _cef_cookie_t* cef_cookie) {
26792+  return g_libcef_pointers.cef_cookie_manager_create_cef_cookie(url, value,
26793+                                                                cef_cookie);
26794+}
26795+
26796 NO_SANITIZE("cfi-icall") struct _cef_drag_data_t* cef_drag_data_create() {
26797   return g_libcef_pointers.cef_drag_data_create();
26798 }
26799@@ -1581,46 +1594,54 @@ struct _cef_translator_test_t* cef_translator_test_create() {
26800 }
26801
26802 NO_SANITIZE("cfi-icall")
26803-struct _cef_translator_test_ref_ptr_library_t*
26804-cef_translator_test_ref_ptr_library_create(int value) {
26805+struct
26806+    _cef_translator_test_ref_ptr_library_t* cef_translator_test_ref_ptr_library_create(
26807+        int value) {
26808   return g_libcef_pointers.cef_translator_test_ref_ptr_library_create(value);
26809 }
26810
26811 NO_SANITIZE("cfi-icall")
26812-struct _cef_translator_test_ref_ptr_library_child_t*
26813-cef_translator_test_ref_ptr_library_child_create(int value, int other_value) {
26814+struct
26815+    _cef_translator_test_ref_ptr_library_child_t* cef_translator_test_ref_ptr_library_child_create(
26816+        int value,
26817+        int other_value) {
26818   return g_libcef_pointers.cef_translator_test_ref_ptr_library_child_create(
26819       value, other_value);
26820 }
26821
26822 NO_SANITIZE("cfi-icall")
26823-struct _cef_translator_test_ref_ptr_library_child_child_t*
26824-cef_translator_test_ref_ptr_library_child_child_create(int value,
26825-                                                       int other_value,
26826-                                                       int other_other_value) {
26827+struct
26828+    _cef_translator_test_ref_ptr_library_child_child_t* cef_translator_test_ref_ptr_library_child_child_create(
26829+        int value,
26830+        int other_value,
26831+        int other_other_value) {
26832   return g_libcef_pointers
26833       .cef_translator_test_ref_ptr_library_child_child_create(
26834           value, other_value, other_other_value);
26835 }
26836
26837 NO_SANITIZE("cfi-icall")
26838-struct _cef_translator_test_scoped_library_t*
26839-cef_translator_test_scoped_library_create(int value) {
26840+struct
26841+    _cef_translator_test_scoped_library_t* cef_translator_test_scoped_library_create(
26842+        int value) {
26843   return g_libcef_pointers.cef_translator_test_scoped_library_create(value);
26844 }
26845
26846 NO_SANITIZE("cfi-icall")
26847-struct _cef_translator_test_scoped_library_child_t*
26848-cef_translator_test_scoped_library_child_create(int value, int other_value) {
26849+struct
26850+    _cef_translator_test_scoped_library_child_t* cef_translator_test_scoped_library_child_create(
26851+        int value,
26852+        int other_value) {
26853   return g_libcef_pointers.cef_translator_test_scoped_library_child_create(
26854       value, other_value);
26855 }
26856
26857 NO_SANITIZE("cfi-icall")
26858-struct _cef_translator_test_scoped_library_child_child_t*
26859-cef_translator_test_scoped_library_child_child_create(int value,
26860-                                                      int other_value,
26861-                                                      int other_other_value) {
26862+struct
26863+    _cef_translator_test_scoped_library_child_child_t* cef_translator_test_scoped_library_child_child_create(
26864+        int value,
26865+        int other_value,
26866+        int other_other_value) {
26867   return g_libcef_pointers
26868       .cef_translator_test_scoped_library_child_child_create(value, other_value,
26869                                                              other_other_value);
26870diff --git a/cef/libcef_dll/wrapper/libcef_dll_wrapper.cc b/cef/libcef_dll/wrapper/libcef_dll_wrapper.cc
26871index 7fc8d57281..d57bf25a63 100644
26872--- a/cef/libcef_dll/wrapper/libcef_dll_wrapper.cc
26873+++ b/cef/libcef_dll/wrapper/libcef_dll_wrapper.cc
26874@@ -1,4 +1,4 @@
26875-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26876+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26877 // reserved. Use of this source code is governed by a BSD-style license that
26878 // can be found in the LICENSE file.
26879 //
26880@@ -9,7 +9,7 @@
26881 // implementations. See the translator.README.txt file in the tools directory
26882 // for more information.
26883 //
26884-// $hash=b43931d8bb81fbfd7a55c011ac6e5b471b3a30ac$
26885+// $hash=c9dcf926082220ee6e62f4f7742d5c7df0ae6399$
26886 //
26887
26888 #include "include/capi/cef_app_capi.h"
26889diff --git a/cef/libcef_dll/wrapper_types.h b/cef/libcef_dll/wrapper_types.h
26890index 61734c211e..eb0eb8371e 100644
26891--- a/cef/libcef_dll/wrapper_types.h
26892+++ b/cef/libcef_dll/wrapper_types.h
26893@@ -1,4 +1,4 @@
26894-// Copyright (c) 2021 The Chromium Embedded Framework Authors. All rights
26895+// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
26896 // reserved. Use of this source code is governed by a BSD-style license that
26897 // can be found in the LICENSE file.
26898 //
26899@@ -9,7 +9,7 @@
26900 // implementations. See the translator.README.txt file in the tools directory
26901 // for more information.
26902 //
26903-// $hash=8e09f43f2c7faf35a14e7367b2156f4d4e89b74d$
26904+// $hash=9ed6ec0a8c3e23163d32a47dc35933b6602d8470$
26905 //
26906
26907 #ifndef CEF_LIBCEF_DLL_WRAPPER_TYPES_H_
26908@@ -19,6 +19,7 @@
26909 enum CefWrapperType {
26910   WT_BASE_REF_COUNTED = 1,
26911   WT_BASE_SCOPED,
26912+  WT_ACCESS_REQUEST,
26913   WT_ACCESSIBILITY_HANDLER,
26914   WT_APP,
26915   WT_AUDIO_HANDLER,
26916@@ -28,6 +29,7 @@ enum CefWrapperType {
26917   WT_BOX_LAYOUT,
26918   WT_BROWSER,
26919   WT_BROWSER_HOST,
26920+  WT_BROWSER_PERMISSION_REQUEST_DELEGATE,
26921   WT_BROWSER_PROCESS_HANDLER,
26922   WT_BROWSER_VIEW,
26923   WT_BROWSER_VIEW_DELEGATE,
26924@@ -65,10 +67,12 @@ enum CefWrapperType {
26925   WT_FIND_HANDLER,
26926   WT_FOCUS_HANDLER,
26927   WT_FRAME,
26928+  WT_GEOLOCATION_ACESS,
26929   WT_GET_EXTENSION_RESOURCE_CALLBACK,
26930   WT_IMAGE,
26931   WT_JSDIALOG_CALLBACK,
26932   WT_JSDIALOG_HANDLER,
26933+  WT_JAVA_SCRIPT_RESULT_CALLBACK,
26934   WT_KEYBOARD_HANDLER,
26935   WT_LABEL_BUTTON,
26936   WT_LAYOUT,
26937@@ -92,6 +96,7 @@ enum CefWrapperType {
26938   WT_PANEL,
26939   WT_PANEL_DELEGATE,
26940   WT_PDF_PRINT_CALLBACK,
26941+  WT_PERMISSION_REQUEST,
26942   WT_POST_DATA,
26943   WT_POST_DATA_ELEMENT,
26944   WT_PRINT_DIALOG_CALLBACK,
26945diff --git a/chrome/browser/offline_pages/offline_page_utils.cc b/chrome/browser/offline_pages/offline_page_utils.cc
26946index 422bb582f0..750012338a 100644
26947--- a/chrome/browser/offline_pages/offline_page_utils.cc
26948+++ b/chrome/browser/offline_pages/offline_page_utils.cc
26949@@ -121,6 +121,7 @@ void DoCalculateSizeBetween(
26950   std::move(callback).Run(total_size);
26951 }
26952
26953+#if defined(OS_ANDROID)
26954 content::WebContents* GetWebContentsByFrameID(int render_process_id,
26955                                               int render_frame_id) {
26956   content::RenderFrameHost* render_frame_host =
26957@@ -129,7 +130,9 @@ content::WebContents* GetWebContentsByFrameID(int render_process_id,
26958     return NULL;
26959   return content::WebContents::FromRenderFrameHost(render_frame_host);
26960 }
26961+#endif
26962
26963+#if defined(OS_ANDROID)
26964 content::WebContents::Getter GetWebContentsGetter(
26965     content::WebContents* web_contents) {
26966   // The FrameTreeNode ID should be used to access the WebContents.
26967@@ -146,6 +149,7 @@ content::WebContents::Getter GetWebContentsGetter(
26968       web_contents->GetMainFrame()->GetProcess()->GetID(),
26969       web_contents->GetMainFrame()->GetRoutingID());
26970 }
26971+#endif
26972
26973 void AcquireFileAccessPermissionDoneForScheduleDownload(
26974     content::WebContents* web_contents,
26975diff --git a/chrome/browser/plugins/plugin_info_host_impl.cc b/chrome/browser/plugins/plugin_info_host_impl.cc
26976index ed191bd7f9..302d6dcc78 100644
26977--- a/chrome/browser/plugins/plugin_info_host_impl.cc
26978+++ b/chrome/browser/plugins/plugin_info_host_impl.cc
26979@@ -143,6 +143,7 @@ PluginInfoHostImpl::Context::Context(int render_process_id, Profile* profile)
26980                                profile->GetPrefs());
26981   run_all_flash_in_allow_mode_.Init(prefs::kRunAllFlashInAllowMode,
26982                                     profile->GetPrefs());
26983+
26984 #if BUILDFLAG(ENABLE_EXTENSIONS)
26985 #if BUILDFLAG(ENABLE_CEF)
26986   if (!cef::IsAlloyRuntimeEnabled() || extensions::ExtensionsEnabled())
26987diff --git a/chrome/browser/plugins/plugin_utils.cc b/chrome/browser/plugins/plugin_utils.cc
26988index a1117001ad..831d5794ec 100644
26989--- a/chrome/browser/plugins/plugin_utils.cc
26990+++ b/chrome/browser/plugins/plugin_utils.cc
26991@@ -6,7 +6,7 @@
26992
26993 #include "base/values.h"
26994 #include "cef/libcef/features/runtime.h"
26995-#include "chrome/browser/profiles/profile.h"
26996+#include "chrome/browser/profiles/profile_io_data.h"
26997 #include "chrome/common/plugin_utils.h"
26998 #include "components/content_settings/core/browser/host_content_settings_map.h"
26999 #include "components/content_settings/core/common/content_settings_types.h"
27000diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc
27001index 4a0a8f429e..49d5ca9a07 100644
27002--- a/chrome/browser/profiles/profile_manager.cc
27003+++ b/chrome/browser/profiles/profile_manager.cc
27004@@ -396,7 +396,7 @@ ProfileManager::ProfileManager(const base::FilePath& user_data_dir)
27005   registrar_.Add(this, chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED,
27006                  content::NotificationService::AllSources());
27007
27008-  if (ProfileShortcutManager::IsFeatureEnabled() && !user_data_dir_.empty())
27009+  if (!user_data_dir_.empty() && ProfileShortcutManager::IsFeatureEnabled())
27010     profile_shortcut_manager_ = ProfileShortcutManager::Create(this);
27011 }
27012
27013diff --git a/chrome/browser/profiles/profile_manager.h b/chrome/browser/profiles/profile_manager.h
27014index f44ed58d92..47c31af2c1 100644
27015--- a/chrome/browser/profiles/profile_manager.h
27016+++ b/chrome/browser/profiles/profile_manager.h
27017@@ -155,6 +155,8 @@ class ProfileManager : public content::NotificationObserver,
27018   // Get the Profile last used (the Profile to which owns the most recently
27019   // focused window) with this Chrome build. If no signed profile has been
27020   // stored in Local State, hand back the Default profile.
27021+  // TODO(https://crbug.com/1195201): Remove `user_data_dir` parameter since it
27022+  // always must match `user_data_dir_` field.
27023   virtual Profile* GetLastUsedProfile(const base::FilePath& user_data_dir);
27024
27025   // Get the path of the last used profile, or if that's undefined, the default
27026diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
27027index b200857173..a912d66269 100644
27028--- a/chrome/browser/ui/views/frame/browser_view.cc
27029+++ b/chrome/browser/ui/views/frame/browser_view.cc
27030@@ -562,7 +562,6 @@ BrowserView::BrowserView() : BrowserView(nullptr) {}
27031
27032 BrowserView::BrowserView(std::unique_ptr<Browser> browser)
27033     : views::ClientView(nullptr, nullptr),
27034-      browser_(std::move(browser)),
27035       accessibility_mode_observer_(
27036           std::make_unique<AccessibilityModeObserver>(this)) {
27037   if (browser)
27038diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc
27039index 5cc8109549..c591206e62 100644
27040--- a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc
27041+++ b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc
27042@@ -1030,6 +1030,8 @@ void PageInfoBubbleView::HandleMoreInfoRequestAsync(int view_id) {
27043             PageInfo::PAGE_INFO_CERTIFICATE_DIALOG_OPENED);
27044 #if !defined(OS_OHOS)
27045         ShowCertificateViewer(web_contents(), top_window, certificate_.get());
27046+#else
27047+        //// TODO for OHOS
27048 #endif
27049       }
27050       break;
27051diff --git a/components/password_manager/core/browser/password_manager_client.h b/components/password_manager/core/browser/password_manager_client.h
27052index 099adbdc8b..1074394efe 100644
27053--- a/components/password_manager/core/browser/password_manager_client.h
27054+++ b/components/password_manager/core/browser/password_manager_client.h
27055@@ -342,6 +342,7 @@ class PasswordManagerClient {
27056                                            const GURL& frame_url) = 0;
27057 #endif
27058
27059+#if defined(PASSWORD_REUSE_DETECTION_ENABLED)
27060   // Checks the safe browsing reputation of the webpage where password reuse
27061   // happens. This is called by the PasswordReuseDetectionManager when a
27062   // protected password is typed on the wrong domain. This may trigger a
27063@@ -354,6 +355,7 @@ class PasswordManagerClient {
27064       const std::string& username,
27065       const std::vector<MatchingReusedCredential>& matching_reused_credentials,
27066       bool password_field_exists) = 0;
27067+#endif
27068
27069   // Records a Chrome Sync event that GAIA password reuse was detected.
27070   virtual void LogPasswordReuseDetectedEvent() = 0;
27071diff --git a/components/password_manager/core/browser/password_reuse_detection_manager.cc b/components/password_manager/core/browser/password_reuse_detection_manager.cc
27072index 491cdacd13..4a82f32cad 100644
27073--- a/components/password_manager/core/browser/password_reuse_detection_manager.cc
27074+++ b/components/password_manager/core/browser/password_reuse_detection_manager.cc
27075@@ -170,10 +170,12 @@ void PasswordReuseDetectionManager::OnReuseCheckDone(
27076                              ? reused_protected_password_hash->username
27077                              : "";
27078
27079+#if defined(PASSWORD_REUSE_DETECTION_ENABLED)
27080   client_->CheckProtectedPasswordEntry(
27081       reused_password_type, username,
27082       std::move(all_matching_reused_credentials_).extract(),
27083       password_field_detected);
27084+#endif
27085
27086   all_matching_reused_credentials_.clear();
27087 }
27088diff --git a/components/viz/service/display/gl_renderer.cc b/components/viz/service/display/gl_renderer.cc
27089index a0fc635ce9..80fbe080b1 100644
27090--- a/components/viz/service/display/gl_renderer.cc
27091+++ b/components/viz/service/display/gl_renderer.cc
27092@@ -512,11 +512,17 @@ void GLRenderer::ReleaseRenderPassTextures() {
27093 void GLRenderer::DiscardPixels() {
27094   if (!use_discard_framebuffer_)
27095     return;
27096+#if defined(OS_OHOS)
27097+  // use GL_COLOR_ATTACHMENT0_EXT directly to avoid INVALID_ENUM ERROR in
27098+  // GLES2DecoderImpl::InvalidateFramebufferImpl temporarily
27099+  GLenum attachments[] = {static_cast<GLenum>(GL_COLOR_ATTACHMENT0_EXT)};
27100+#else
27101   bool using_default_framebuffer =
27102       !current_framebuffer_texture_ &&
27103       output_surface_->capabilities().uses_default_gl_framebuffer;
27104   GLenum attachments[] = {static_cast<GLenum>(
27105       using_default_framebuffer ? GL_COLOR_EXT : GL_COLOR_ATTACHMENT0_EXT)};
27106+#endif
27107   gl_->DiscardFramebufferEXT(GL_FRAMEBUFFER, base::size(attachments),
27108                              attachments);
27109 }
27110diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
27111index a63f357a8a..157b489c3a 100644
27112--- a/content/browser/BUILD.gn
27113+++ b/content/browser/BUILD.gn
27114@@ -2088,6 +2088,21 @@ source_set("browser") {
27115     ]
27116   }
27117
27118+  if (is_ohos) {
27119+    import("//build/config/ohos/config.gni")
27120+    sources += [
27121+      "media/ohos/ohos_media_player_renderer.cc",
27122+      "media/ohos/ohos_media_player_renderer.h",
27123+    ]
27124+
27125+    libs = [
27126+      "surface.z",
27127+      "media_client.z",
27128+    ]
27129+    include_dirs = ohos_src_includes
27130+    lib_dirs = ohos_libs_dir
27131+  }
27132+
27133   if (is_win) {
27134     sources += [
27135       "accessibility/accessibility_event_recorder_uia_win.cc",
27136diff --git a/content/browser/browser_context.cc b/content/browser/browser_context.cc
27137index 5848ee6863..d3f1a12a21 100644
27138--- a/content/browser/browser_context.cc
27139+++ b/content/browser/browser_context.cc
27140@@ -575,7 +575,8 @@ media::VideoDecodePerfHistory* BrowserContext::GetVideoDecodePerfHistory() {
27141     const bool kUseInMemoryDBDefault = false;
27142     bool use_in_memory_db = base::GetFieldTrialParamByFeatureAsBool(
27143         media::kMediaCapabilitiesWithParameters, kUseInMemoryDBParamName,
27144-        kUseInMemoryDBDefault) || GetPath().empty();
27145+        kUseInMemoryDBDefault) ||
27146+        GetPath().empty();
27147
27148     std::unique_ptr<media::VideoDecodeStatsDB> stats_db;
27149     if (use_in_memory_db) {
27150diff --git a/content/browser/media/frameless_media_interface_proxy.cc b/content/browser/media/frameless_media_interface_proxy.cc
27151index dc71e7c719..a0c48542cb 100644
27152--- a/content/browser/media/frameless_media_interface_proxy.cc
27153+++ b/content/browser/media/frameless_media_interface_proxy.cc
27154@@ -65,13 +65,15 @@ void FramelessMediaInterfaceProxy::CreateFlingingRenderer(
27155         client_extenion,
27156     mojo::PendingReceiver<media::mojom::Renderer> receiver) {}
27157
27158+#endif  // defined(OS_ANDROID)
27159+#if defined(OS_ANDROID) || defined(OS_OHOS)
27160 void FramelessMediaInterfaceProxy::CreateMediaPlayerRenderer(
27161     mojo::PendingRemote<media::mojom::MediaPlayerRendererClientExtension>
27162         client_extension_remote,
27163     mojo::PendingReceiver<media::mojom::Renderer> receiver,
27164     mojo::PendingReceiver<media::mojom::MediaPlayerRendererExtension>
27165         renderer_extension_receiver) {}
27166-#endif  // defined(OS_ANDROID)
27167+#endif  // defined(OS_ANDROID) || defined(OS_OHOS)
27168
27169 #if defined(OS_WIN)
27170 // Unimplemented method as this requires CDM and media::Renderer services with
27171diff --git a/content/browser/media/frameless_media_interface_proxy.h b/content/browser/media/frameless_media_interface_proxy.h
27172index 7198bc6cec..6aee2a9884 100644
27173--- a/content/browser/media/frameless_media_interface_proxy.h
27174+++ b/content/browser/media/frameless_media_interface_proxy.h
27175@@ -50,13 +50,15 @@ class CONTENT_EXPORT FramelessMediaInterfaceProxy final
27176       const base::UnguessableToken& overlay_plane_id,
27177       mojo::PendingReceiver<media::mojom::Renderer> receiver) final;
27178 #endif
27179-#if defined(OS_ANDROID)
27180+#if defined(OS_ANDROID) || defined(OS_OHOS)
27181   void CreateMediaPlayerRenderer(
27182       mojo::PendingRemote<media::mojom::MediaPlayerRendererClientExtension>
27183           client_extension_remote,
27184       mojo::PendingReceiver<media::mojom::Renderer> receiver,
27185       mojo::PendingReceiver<media::mojom::MediaPlayerRendererExtension>
27186           renderer_extension_receiver) final;
27187+#endif  // defined(OS_ANDROID) || defined(OS_OHOS)
27188+#if defined(OS_ANDROID)
27189   void CreateFlingingRenderer(
27190       const std::string& presentation_id,
27191       mojo::PendingRemote<media::mojom::FlingingRendererClientExtension>
27192diff --git a/content/browser/media/media_interface_proxy.cc b/content/browser/media/media_interface_proxy.cc
27193index a570a90966..886c40d31e 100644
27194--- a/content/browser/media/media_interface_proxy.cc
27195+++ b/content/browser/media/media_interface_proxy.cc
27196@@ -63,6 +63,11 @@
27197 #include "base/time/time.h"
27198 #endif  // defined(OS_WIN)
27199
27200+#if defined(OS_OHOS)
27201+#include "content/browser/media/ohos/ohos_media_player_renderer.h"
27202+#include "media/mojo/services/mojo_renderer_service.h" // nogncheck
27203+#endif
27204+
27205 #if defined(OS_ANDROID)
27206 #include "content/browser/media/android/media_player_renderer.h"
27207 #include "content/browser/media/flinging_renderer.h"
27208@@ -465,7 +470,9 @@ void MediaInterfaceProxy::CreateFlingingRenderer(
27209   media::MojoRendererService::Create(nullptr, std::move(flinging_renderer),
27210                                      std::move(receiver));
27211 }
27212+#endif
27213
27214+#if defined(OS_ANDROID) || defined(OS_OHOS)
27215 void MediaInterfaceProxy::CreateMediaPlayerRenderer(
27216     mojo::PendingRemote<media::mojom::MediaPlayerRendererClientExtension>
27217         client_extension_remote,
27218@@ -476,7 +483,11 @@ void MediaInterfaceProxy::CreateMediaPlayerRenderer(
27219
27220   media::MojoRendererService::Create(
27221       nullptr,
27222+#if defined(OS_ANDROID)
27223       std::make_unique<MediaPlayerRenderer>(
27224+#else
27225+      std::make_unique<OHOSMediaPlayerRenderer>(
27226+#endif
27227           render_frame_host_->GetProcess()->GetID(),
27228           render_frame_host_->GetRoutingID(),
27229           static_cast<RenderFrameHostImpl*>(render_frame_host_)
27230diff --git a/content/browser/media/media_interface_proxy.h b/content/browser/media/media_interface_proxy.h
27231index 61fec19350..a1c481c2df 100644
27232--- a/content/browser/media/media_interface_proxy.h
27233+++ b/content/browser/media/media_interface_proxy.h
27234@@ -74,13 +74,15 @@ class MediaInterfaceProxy final : public media::mojom::InterfaceFactory {
27235       mojo::PendingRemote<media::mojom::FlingingRendererClientExtension>
27236           client_extension,
27237       mojo::PendingReceiver<media::mojom::Renderer> receiver) final;
27238+#endif // defined(OS_ANDROID)
27239+#if defined(OS_ANDROID) || defined(OS_OHOS)
27240   void CreateMediaPlayerRenderer(
27241       mojo::PendingRemote<media::mojom::MediaPlayerRendererClientExtension>
27242           client_extension_remote,
27243       mojo::PendingReceiver<media::mojom::Renderer> receiver,
27244       mojo::PendingReceiver<media::mojom::MediaPlayerRendererExtension>
27245           renderer_extension_request) final;
27246-#endif  // defined(OS_ANDROID)
27247+#endif  // defined(OS_ANDROID) || defined(OS_OHOS)
27248 #if defined(OS_WIN)
27249   void CreateMediaFoundationRenderer(
27250       mojo::PendingReceiver<media::mojom::Renderer> receiver,
27251diff --git a/content/browser/media/ohos/ohos_media_player_renderer.cc b/content/browser/media/ohos/ohos_media_player_renderer.cc
27252new file mode 100644
27253index 0000000000..69bbd72e2f
27254--- /dev/null
27255+++ b/content/browser/media/ohos/ohos_media_player_renderer.cc
27256@@ -0,0 +1,194 @@
27257+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
27258+// Use of this source code is governed by a BSD-style license that can be
27259+// found in the LICENSE file.
27260+
27261+#include "content/browser/media/ohos/ohos_media_player_renderer.h"
27262+
27263+#include <memory>
27264+
27265+#include "base/bind.h"
27266+#include "base/callback_helpers.h"
27267+#include "content/browser/web_contents/web_contents_impl.h"
27268+#include "content/public/browser/browser_context.h"
27269+#include "content/public/browser/browser_task_traits.h"
27270+#include "content/public/browser/browser_thread.h"
27271+#include "content/public/browser/content_browser_client.h"
27272+#include "content/public/browser/render_process_host.h"
27273+#include "content/public/browser/storage_partition.h"
27274+#include "content/public/browser/web_contents.h"
27275+#include "content/public/common/content_client.h"
27276+#include "media/base/timestamp_constants.h"
27277+
27278+namespace content {
27279+
27280+namespace {
27281+const float kDefaultVolume = 1.0;
27282+}  // namespace
27283+
27284+OHOSMediaPlayerRenderer::OHOSMediaPlayerRenderer(
27285+    int process_id,
27286+    int routing_id,
27287+    WebContents* web_contents,
27288+    mojo::PendingReceiver<RendererExtension> renderer_extension_receiver,
27289+    mojo::PendingRemote<ClientExtension> client_extension_remote)
27290+    : client_extension_(std::move(client_extension_remote)),
27291+      has_error_(false),
27292+      volume_(kDefaultVolume),
27293+      renderer_extension_receiver_(this,
27294+                                   std::move(renderer_extension_receiver)) {}
27295+
27296+OHOSMediaPlayerRenderer::~OHOSMediaPlayerRenderer() {}
27297+
27298+void OHOSMediaPlayerRenderer::Initialize(
27299+    media::MediaResource* media_resource,
27300+    media::RendererClient* client,
27301+    media::PipelineStatusCallback init_cb) {
27302+  renderer_client_ = client;
27303+  if (media_resource->GetType() != media::MediaResource::Type::URL) {
27304+    DLOG(ERROR) << "MediaResource is not of Type URL";
27305+    std::move(init_cb).Run(media::PIPELINE_ERROR_INITIALIZATION_FAILED);
27306+    return;
27307+  }
27308+
27309+  CreateMediaPlayer(media_resource->GetMediaUrlParams(), std::move(init_cb));
27310+}
27311+
27312+void OHOSMediaPlayerRenderer::CreateMediaPlayer(
27313+    const media::MediaUrlParams& url_params,
27314+    media::PipelineStatusCallback init_cb) {
27315+  const std::string user_agent = GetContentClient()->browser()->GetUserAgent();
27316+  media_player_.reset(new media::OHOSMediaPlayerBridge(
27317+      url_params.media_url, url_params.site_for_cookies,
27318+      url_params.top_frame_origin, user_agent,
27319+      false,  // hide_url_log
27320+      this, url_params.allow_credentials, url_params.is_hls));
27321+  int32_t ret = media_player_->Initialize();
27322+  if (ret == 0) {
27323+    UpdateVolume();
27324+    std::move(init_cb).Run(media::PIPELINE_OK);
27325+    initialized_ = true;
27326+  } else {
27327+    std::move(init_cb).Run(media::PIPELINE_ERROR_INITIALIZATION_FAILED);
27328+  }
27329+}
27330+
27331+void OHOSMediaPlayerRenderer::SetLatencyHint(
27332+    base::Optional<base::TimeDelta> latency_hint) {}
27333+
27334+void OHOSMediaPlayerRenderer::Flush(base::OnceClosure flush_cb) {
27335+  std::move(flush_cb).Run();
27336+}
27337+
27338+void OHOSMediaPlayerRenderer::StartPlayingFrom(base::TimeDelta time) {
27339+  if (has_error_ || !media_player_)
27340+    return;
27341+  media_player_->SeekTo(time);
27342+  renderer_client_->OnBufferingStateChange(
27343+      media::BufferingState::BUFFERING_HAVE_ENOUGH,
27344+      media::BufferingStateChangeReason::BUFFERING_CHANGE_REASON_UNKNOWN);
27345+}
27346+
27347+void OHOSMediaPlayerRenderer::SetPlaybackRate(double playback_rate) {
27348+  if (has_error_)
27349+    return;
27350+  if (playback_rate <= 0) {
27351+    media_player_->Pause();
27352+  } else {
27353+    OHOS::Media::PlaybackRateMode mode;
27354+    if (playback_rate < 1) {
27355+      mode = OHOS::Media::SPEED_FORWARD_0_75_X;
27356+    } else if (playback_rate < 1.25) {
27357+      mode = OHOS::Media::SPEED_FORWARD_1_00_X;
27358+    } else if (playback_rate < 1.75) {
27359+      mode = OHOS::Media::SPEED_FORWARD_1_25_X;
27360+    } else if (playback_rate < 2) {
27361+      mode = OHOS::Media::SPEED_FORWARD_1_75_X;
27362+    } else {
27363+      mode = OHOS::Media::SPEED_FORWARD_2_00_X;
27364+    }
27365+    media_player_->SetPlaybackSpeed(mode);
27366+    media_player_->Start();
27367+  }
27368+  OnMediaDurationChanged(media_player_->GetDuration());
27369+}
27370+
27371+void OHOSMediaPlayerRenderer::InitiateScopedSurfaceRequest(
27372+    InitiateScopedSurfaceRequestCallback callback) {}
27373+
27374+void OHOSMediaPlayerRenderer::FinishPaint(int32_t fd) {
27375+  if (media_player_) {
27376+    media_player_->FinishPaint(fd);
27377+  }
27378+}
27379+
27380+void OHOSMediaPlayerRenderer::OnFrameAvailable(int fd,
27381+                                               uint32_t size,
27382+                                               int32_t width,
27383+                                               int32_t height) {
27384+  if (client_extension_) {
27385+    auto ohos_buffer = media::mojom::OhosSurfaceBufferHandle::New();
27386+    ohos_buffer->buffer_size = size;
27387+    base::ScopedFD buffer_fd(dup(fd));
27388+    ohos_buffer->fd_browser = fd;
27389+    ohos_buffer->width = width;
27390+    ohos_buffer->height = height;
27391+    ohos_buffer->buffer_fd = mojo::PlatformHandle(std::move(buffer_fd));
27392+    client_extension_->OnFrameUpdate(std::move(ohos_buffer));
27393+  }
27394+}
27395+
27396+void OHOSMediaPlayerRenderer::OnMediaDurationChanged(base::TimeDelta duration) {
27397+  if (duration.is_zero())
27398+    duration = media::kInfiniteDuration;
27399+
27400+  if (duration_ != duration) {
27401+    duration_ = duration;
27402+    client_extension_->OnDurationChange(duration);
27403+  }
27404+}
27405+
27406+void OHOSMediaPlayerRenderer::OnPlaybackComplete() {
27407+  renderer_client_->OnEnded();
27408+}
27409+
27410+void OHOSMediaPlayerRenderer::OnError(int error) {
27411+  if (error ==
27412+      media::OHOSMediaPlayerBridge::MediaErrorType::MEDIA_ERROR_INVALID_CODE) {
27413+    return;
27414+  }
27415+  LOG(ERROR) << __func__ << " Error: " << error;
27416+  has_error_ = true;
27417+  if (initialized_) {
27418+    renderer_client_->OnError(media::PIPELINE_ERROR_EXTERNAL_RENDERER_FAILED);
27419+  }
27420+}
27421+
27422+void OHOSMediaPlayerRenderer::OnVideoSizeChanged(int width, int height) {
27423+  gfx::Size new_size = gfx::Size(width, height);
27424+  if (video_size_ != new_size) {
27425+    video_size_ = new_size;
27426+    // Send via |client_extension_| instead of |renderer_client_|, so
27427+    // MediaPlayerRendererClient can update its texture size.
27428+    // MPRClient will then continue propagating changes via its RendererClient.
27429+    client_extension_->OnVideoSizeChange(video_size_);
27430+  }
27431+}
27432+
27433+void OHOSMediaPlayerRenderer::SetVolume(float volume) {
27434+  volume_ = volume;
27435+  UpdateVolume();
27436+}
27437+
27438+void OHOSMediaPlayerRenderer::UpdateVolume() {
27439+  if (media_player_)
27440+    media_player_->SetVolume(volume_);
27441+}
27442+
27443+base::TimeDelta OHOSMediaPlayerRenderer::GetMediaTime() {
27444+  if (media_player_) {
27445+    return media_player_->GetMediaTime();
27446+  }
27447+  return base::TimeDelta::FromMilliseconds(0);
27448+}
27449+
27450+}  // namespace content
27451diff --git a/content/browser/media/ohos/ohos_media_player_renderer.h b/content/browser/media/ohos/ohos_media_player_renderer.h
27452new file mode 100644
27453index 0000000000..38c5d0c224
27454--- /dev/null
27455+++ b/content/browser/media/ohos/ohos_media_player_renderer.h
27456@@ -0,0 +1,115 @@
27457+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
27458+// Use of this source code is governed by a BSD-style license that can be
27459+// found in the LICENSE file.
27460+
27461+#ifndef CONTENT_BROWSER_MEDIA_OHOS_MEDIA_PLAYER_RENDERER_H_
27462+#define CONTENT_BROWSER_MEDIA_OHOS_MEDIA_PLAYER_RENDERER_H_
27463+
27464+#include "base/callback.h"
27465+#include "base/macros.h"
27466+#include "base/memory/weak_ptr.h"
27467+#include "base/unguessable_token.h"
27468+#include "content/common/content_export.h"
27469+#include "content/public/browser/render_frame_host.h"
27470+#include "media/base/media_log.h"
27471+#include "media/base/media_resource.h"
27472+#include "media/base/ohos/ohos_media_player_bridge.h"
27473+#include "media/base/renderer.h"
27474+#include "media/base/renderer_client.h"
27475+#include "media/mojo/mojom/renderer_extensions.mojom.h"
27476+#include "mojo/public/cpp/bindings/pending_receiver.h"
27477+#include "mojo/public/cpp/bindings/pending_remote.h"
27478+#include "mojo/public/cpp/bindings/receiver.h"
27479+#include "mojo/public/cpp/bindings/remote.h"
27480+#include "url/gurl.h"
27481+
27482+namespace content {
27483+class WebContents;
27484+
27485+class CONTENT_EXPORT OHOSMediaPlayerRenderer
27486+    : public media::Renderer,
27487+      public media::mojom::MediaPlayerRendererExtension,
27488+      public media::OHOSMediaPlayerBridge::Client {
27489+ public:
27490+  using RendererExtension = media::mojom::MediaPlayerRendererExtension;
27491+  using ClientExtension = media::mojom::MediaPlayerRendererClientExtension;
27492+
27493+  OHOSMediaPlayerRenderer(
27494+      int process_id,
27495+      int routing_id,
27496+      WebContents* web_contents,
27497+      mojo::PendingReceiver<RendererExtension> renderer_extension_receiver,
27498+      mojo::PendingRemote<ClientExtension> client_extension_remote);
27499+
27500+  ~OHOSMediaPlayerRenderer() override;
27501+
27502+  // media::Renderer implementation
27503+  void Initialize(media::MediaResource* media_resource,
27504+                  media::RendererClient* client,
27505+                  media::PipelineStatusCallback init_cb) override;
27506+  void SetLatencyHint(base::Optional<base::TimeDelta> latency_hint) override;
27507+  void Flush(base::OnceClosure flush_cb) override;
27508+  void StartPlayingFrom(base::TimeDelta time) override;
27509+
27510+  void SetPlaybackRate(double playback_rate) override;
27511+  void SetVolume(float volume) override;
27512+  base::TimeDelta GetMediaTime() override;
27513+
27514+  // media::OHOSMediaPlayerBridge::Client implementation
27515+  void OnFrameAvailable(int fd,
27516+                        uint32_t size,
27517+                        int32_t width,
27518+                        int32_t height) override;
27519+  void OnMediaDurationChanged(base::TimeDelta duration) override;
27520+  void OnPlaybackComplete() override;
27521+  void OnError(int error) override;
27522+  void OnVideoSizeChanged(int width, int height) override;
27523+
27524+  // media::mojom::MediaPlayerRendererExtension implementation.
27525+  //
27526+  // Registers a request in the content::ScopedSurfaceRequestManager, and
27527+  // returns the token associated to the request. The token can then be used to
27528+  // complete the request via the gpu::ScopedSurfaceRequestConduit.
27529+  // A completed request will call back to OnScopedSurfaceRequestCompleted().
27530+  //
27531+  // NOTE: If a request is already pending, calling this method again will
27532+  // safely cancel the pending request before registering a new one.
27533+  void InitiateScopedSurfaceRequest(
27534+      InitiateScopedSurfaceRequestCallback callback) override;
27535+  void FinishPaint(int32_t fd) override;
27536+
27537+ private:
27538+  void CreateMediaPlayer(const media::MediaUrlParams& params,
27539+                         media::PipelineStatusCallback init_cb);
27540+
27541+  void UpdateVolume();
27542+
27543+  mojo::Remote<ClientExtension> client_extension_;
27544+
27545+  media::RendererClient* renderer_client_;
27546+
27547+  std::unique_ptr<media::OHOSMediaPlayerBridge> media_player_;
27548+
27549+  // Current duration of the media.
27550+  base::TimeDelta duration_;
27551+
27552+  // Indicates if a serious error has been encountered by the |media_player_|.
27553+  bool has_error_;
27554+
27555+  gfx::Size video_size_;
27556+
27557+  float volume_;
27558+
27559+  bool initialized_ = false;
27560+
27561+  mojo::Receiver<MediaPlayerRendererExtension> renderer_extension_receiver_;
27562+
27563+  // NOTE: Weak pointers must be invalidated before all other member variables.
27564+  base::WeakPtrFactory<OHOSMediaPlayerRenderer> weak_factory_{this};
27565+
27566+  DISALLOW_COPY_AND_ASSIGN(OHOSMediaPlayerRenderer);
27567+};
27568+
27569+}  // namespace content
27570+
27571+#endif  // CONTENT_BROWSER_MEDIA_OHOS_MEDIA_PLAYER_RENDERER_H_
27572diff --git a/content/browser/renderer_host/navigation_controller_impl.cc b/content/browser/renderer_host/navigation_controller_impl.cc
27573index 96372e9474..fcd76a294e 100644
27574--- a/content/browser/renderer_host/navigation_controller_impl.cc
27575+++ b/content/browser/renderer_host/navigation_controller_impl.cc
27576@@ -1016,6 +1016,7 @@ void NavigationControllerImpl::LoadURL(const GURL& url,
27577   params.referrer = referrer;
27578   params.transition_type = transition;
27579   params.extra_headers = extra_headers;
27580+  params.override_user_agent = NavigationController::UA_OVERRIDE_TRUE;
27581   LoadURLWithParams(params);
27582 }
27583
27584diff --git a/content/browser/speech/tts_ohos.cc b/content/browser/speech/tts_ohos.cc
27585index c4ba8612d9..24b801ff0a 100644
27586--- a/content/browser/speech/tts_ohos.cc
27587+++ b/content/browser/speech/tts_ohos.cc
27588@@ -1,4 +1,4 @@
27589-// Copyright (c) 2022 The Chromium Authors. All rights reserved.
27590+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
27591 // Use of this source code is governed by a BSD-style license that can be
27592 // found in the LICENSE file.
27593
27594diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
27595index 2be0a83293..3e19bacca3 100644
27596--- a/content/browser/web_contents/web_contents_impl.cc
27597+++ b/content/browser/web_contents/web_contents_impl.cc
27598@@ -1499,7 +1499,6 @@ void WebContentsImpl::UpdateZoom() {
27599     rwh->SynchronizeVisualProperties();
27600 }
27601
27602-
27603 void WebContentsImpl::UpdateZoomIfNecessary(const std::string& scheme,
27604                                             const std::string& host) {
27605   OPTIONAL_TRACE_EVENT2("content", "WebContentsImpl::UpdateZoomIfNecessary",
27606@@ -2759,16 +2758,16 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) {
27607   }
27608
27609   if (!view_) {
27610-  WebContentsViewDelegate* delegate =
27611-      GetContentClient()->browser()->GetWebContentsViewDelegate(this);
27612+    WebContentsViewDelegate* delegate =
27613+        GetContentClient()->browser()->GetWebContentsViewDelegate(this);
27614
27615-  if (browser_plugin_guest_) {
27616-    view_ = std::make_unique<WebContentsViewChildFrame>(
27617-        this, delegate, &render_view_host_delegate_view_);
27618-  } else {
27619-    view_.reset(CreateWebContentsView(this, delegate,
27620-                                      &render_view_host_delegate_view_));
27621-  }
27622+    if (browser_plugin_guest_) {
27623+      view_ = std::make_unique<WebContentsViewChildFrame>(
27624+          this, delegate, &render_view_host_delegate_view_);
27625+    } else {
27626+      view_.reset(CreateWebContentsView(this, delegate,
27627+                                        &render_view_host_delegate_view_));
27628+    }
27629   }
27630   CHECK(render_view_host_delegate_view_);
27631   CHECK(view_.get());
27632@@ -3199,8 +3198,8 @@ void WebContentsImpl::ExitFullscreenMode(bool will_cause_resize) {
27633   // required.
27634   if (!will_cause_resize) {
27635     if (RenderWidgetHostView* rwhv = GetRenderWidgetHostView()) {
27636-        if (RenderWidgetHost* render_widget_host = rwhv->GetRenderWidgetHost())
27637-          render_widget_host->SynchronizeVisualProperties();
27638+      if (RenderWidgetHost* render_widget_host = rwhv->GetRenderWidgetHost())
27639+        render_widget_host->SynchronizeVisualProperties();
27640     }
27641   }
27642
27643@@ -3620,12 +3619,9 @@ RenderFrameHostDelegate* WebContentsImpl::CreateNewWindow(
27644   create_params.renderer_initiated_creation = !is_new_browsing_instance;
27645
27646   if (delegate_) {
27647-    delegate_->GetCustomWebContentsView(this,
27648-                                        params.target_url,
27649-                                        render_process_id,
27650-                                        opener->GetRoutingID(),
27651-                                        &create_params.view,
27652-                                        &create_params.delegate_view);
27653+    delegate_->GetCustomWebContentsView(
27654+        this, params.target_url, render_process_id, opener->GetRoutingID(),
27655+        &create_params.view, &create_params.delegate_view);
27656   }
27657
27658   std::unique_ptr<WebContentsImpl> new_contents;
27659@@ -4023,9 +4019,10 @@ bool WebContentsImpl::ShouldIgnoreUnresponsiveRenderer() {
27660   if (suppress_unresponsive_renderer_count_ > 0)
27661     return true;
27662
27663-  // Ignore unresponsive renderers if the debugger is attached to them since the
27664-  // unresponsiveness might be a result of the renderer sitting on a breakpoint.
27665-  //
27666+    // Ignore unresponsive renderers if the debugger is attached to them since
27667+    // the unresponsiveness might be a result of the renderer sitting on a
27668+    // breakpoint.
27669+    //
27670 #ifdef OS_WIN
27671   // Check if a windows debugger is attached to the renderer process.
27672   base::ProcessHandle process_handle =
27673@@ -4648,8 +4645,8 @@ void WebContentsImpl::SaveFrameWithHeaders(
27674           policy_exception_justification: "Not implemented."
27675         })");
27676   auto params = std::make_unique<download::DownloadUrlParameters>(
27677-      url, frame_host->GetProcess()->GetID(),
27678-      frame_host->GetRoutingID(), traffic_annotation);
27679+      url, frame_host->GetProcess()->GetID(), frame_host->GetRoutingID(),
27680+      traffic_annotation);
27681   params->set_referrer(referrer.url);
27682   params->set_referrer_policy(
27683       Referrer::ReferrerPolicyForUrlRequest(referrer.policy));
27684@@ -5633,6 +5630,7 @@ bool WebContentsImpl::IsWebPreferencesSet() const {
27685 void WebContentsImpl::SetWebPreferences(
27686     const blink::web_pref::WebPreferences& prefs) {
27687   OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::SetWebPreferences");
27688+
27689   web_preferences_ = std::make_unique<blink::web_pref::WebPreferences>(prefs);
27690   // Get all the RenderViewHosts (except the ones for currently back-forward
27691   // cached pages), and make them send the current WebPreferences
27692@@ -6182,7 +6180,7 @@ void WebContentsImpl::LoadingStateChanged(bool to_different_document,
27693   int type = is_loading ? NOTIFICATION_LOAD_START : NOTIFICATION_LOAD_STOP;
27694   NotificationDetails det = NotificationService::NoDetails();
27695   if (details)
27696-      det = Details<LoadNotificationDetails>(details);
27697+    det = Details<LoadNotificationDetails>(details);
27698   NotificationService::current()->Notify(
27699       type, Source<NavigationController>(&GetController()), det);
27700 }
27701@@ -7009,7 +7007,8 @@ void WebContentsImpl::DidChangeLoadProgress() {
27702   // immediately if enough time has passed.
27703   base::TimeDelta min_delay =
27704       base::TimeDelta::FromMilliseconds(kMinimumDelayBetweenLoadingUpdatesMS);
27705-  bool delay_elapsed = loading_last_progress_update_.is_null() ||
27706+  bool delay_elapsed =
27707+      loading_last_progress_update_.is_null() ||
27708       base::TimeTicks::Now() - loading_last_progress_update_ > min_delay;
27709
27710   if (load_progress == 0.0 || load_progress == 1.0 || delay_elapsed) {
27711@@ -7141,10 +7140,9 @@ void WebContentsImpl::DocumentOnLoadCompleted(
27712       render_frame_host);
27713
27714   // TODO(avi): Remove. http://crbug.com/170921
27715-  NotificationService::current()->Notify(
27716-      NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME,
27717-      Source<WebContents>(this),
27718-      NotificationService::NoDetails());
27719+  NotificationService::current()->Notify(NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME,
27720+                                         Source<WebContents>(this),
27721+                                         NotificationService::NoDetails());
27722 }
27723
27724 void WebContentsImpl::UpdateTitle(RenderFrameHostImpl* render_frame_host,
27725@@ -7513,7 +7511,8 @@ void WebContentsImpl::SubframeCrashed(
27726 }
27727
27728 void WebContentsImpl::BeforeUnloadFiredFromRenderManager(
27729-    bool proceed, const base::TimeTicks& proceed_time,
27730+    bool proceed,
27731+    const base::TimeTicks& proceed_time,
27732     bool* proceed_to_fire_unload) {
27733   OPTIONAL_TRACE_EVENT0("content",
27734                         "WebContentsImpl::BeforeUnloadFiredFromRenderManager");
27735@@ -7699,8 +7698,7 @@ void WebContentsImpl::ClearWebContentsAndroid() {
27736   web_contents_android_.reset();
27737 }
27738
27739-void WebContentsImpl::ActivateNearestFindResult(float x,
27740-                                                float y) {
27741+void WebContentsImpl::ActivateNearestFindResult(float x, float y) {
27742   OPTIONAL_TRACE_EVENT0("content",
27743                         "WebContentsImpl::ActivateNearestFindResult");
27744   GetOrCreateFindRequestManager()->ActivateNearestFindResult(x, y);
27745@@ -7750,8 +7748,8 @@ void WebContentsImpl::OnDialogClosed(int render_process_id,
27746                                      bool dialog_was_suppressed,
27747                                      bool success,
27748                                      const std::u16string& user_input) {
27749-  RenderFrameHostImpl* rfh = RenderFrameHostImpl::FromID(render_process_id,
27750-                                                         render_frame_id);
27751+  RenderFrameHostImpl* rfh =
27752+      RenderFrameHostImpl::FromID(render_process_id, render_frame_id);
27753   OPTIONAL_TRACE_EVENT1("content", "WebContentsImpl::OnDialogClosed",
27754                         "render_frame_host", rfh);
27755   last_dialog_suppressed_ = dialog_was_suppressed;
27756diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn
27757index 3cdc94634e..dd529be39b 100644
27758--- a/content/renderer/BUILD.gn
27759+++ b/content/renderer/BUILD.gn
27760@@ -215,6 +215,14 @@ target(link_target_type, "renderer") {
27761     ]
27762   }
27763
27764+  if (is_ohos) {
27765+    sources += [
27766+      "media/ohos/ohos_media_player_renderer_client.cc",
27767+      "media/ohos/ohos_media_player_renderer_client.h",
27768+      "media/ohos/ohos_media_player_renderer_client_factory.cc",
27769+      "media/ohos/ohos_media_player_renderer_client_factory.h",
27770+    ]
27771+  }
27772
27773   if (is_linux || is_chromeos || is_ohos) {
27774     sources += [ "renderer_main_platform_delegate_linux.cc" ]
27775diff --git a/content/renderer/media/media_factory.cc b/content/renderer/media/media_factory.cc
27776index 58b55ea5a7..06a512c666 100644
27777--- a/content/renderer/media/media_factory.cc
27778+++ b/content/renderer/media/media_factory.cc
27779@@ -109,6 +109,10 @@
27780 #include "media/mojo/clients/win/media_foundation_renderer_client_factory.h"
27781 #endif  // defined(OS_WIN)
27782
27783+#if defined(OS_OHOS)
27784+#include "content/renderer/media/ohos/ohos_media_player_renderer_client_factory.h"
27785+#endif
27786+
27787 namespace {
27788 class FrameFetchContext : public media::ResourceFetchContext {
27789  public:
27790@@ -564,6 +568,14 @@ MediaFactory::CreateRendererFactorySelector(
27791   use_media_player_renderer = UseMediaPlayerRenderer(url);
27792 #endif  // defined(OS_ANDROID)
27793
27794+#if defined(OS_OHOS)
27795+  auto ohos_media_player_factory =
27796+      std::make_unique<OHOSMediaPlayerRendererClientFactory>(
27797+          CreateMojoRendererFactory());
27798+  factory_selector->AddFactory(FactoryType::kOHOSMediaPlayer,
27799+                               std::move(ohos_media_player_factory));
27800+#endif
27801+
27802 #if defined(OS_ANDROID)
27803   DCHECK(interface_broker_);
27804
27805diff --git a/content/renderer/media/media_interface_factory.cc b/content/renderer/media/media_interface_factory.cc
27806index 6991ed927c..83062de1c0 100644
27807--- a/content/renderer/media/media_interface_factory.cc
27808+++ b/content/renderer/media/media_interface_factory.cc
27809@@ -95,7 +95,7 @@ void MediaInterfaceFactory::CreateCastRenderer(
27810 }
27811 #endif
27812
27813-#if defined(OS_ANDROID)
27814+#if defined(OS_ANDROID) || defined(OS_OHOS)
27815 void MediaInterfaceFactory::CreateMediaPlayerRenderer(
27816     mojo::PendingRemote<media::mojom::MediaPlayerRendererClientExtension>
27817         client_extension_remote,
27818@@ -117,7 +117,9 @@ void MediaInterfaceFactory::CreateMediaPlayerRenderer(
27819       std::move(client_extension_remote), std::move(receiver),
27820       std::move(renderer_extension_receiver));
27821 }
27822+#endif  // defined(OS_ANDROID) || defined(OS_OHOS)
27823
27824+#if defined(OS_ANDROID)
27825 void MediaInterfaceFactory::CreateFlingingRenderer(
27826     const std::string& presentation_id,
27827     mojo::PendingRemote<media::mojom::FlingingRendererClientExtension>
27828diff --git a/content/renderer/media/media_interface_factory.h b/content/renderer/media/media_interface_factory.h
27829index 53b425ddc7..179c3791c2 100644
27830--- a/content/renderer/media/media_interface_factory.h
27831+++ b/content/renderer/media/media_interface_factory.h
27832@@ -62,13 +62,15 @@ class CONTENT_EXPORT MediaInterfaceFactory final
27833       mojo::PendingRemote<media::mojom::FlingingRendererClientExtension>
27834           client_extension,
27835       mojo::PendingReceiver<media::mojom::Renderer> receiver) final;
27836+#endif  // defined(OS_ANDROID)
27837+#if defined(OS_ANDROID) || defined(OS_OHOS)
27838   void CreateMediaPlayerRenderer(
27839       mojo::PendingRemote<media::mojom::MediaPlayerRendererClientExtension>
27840           client_extension_remote,
27841       mojo::PendingReceiver<media::mojom::Renderer> receiver,
27842       mojo::PendingReceiver<media::mojom::MediaPlayerRendererExtension>
27843           renderer_extension_receiver) final;
27844-#endif  // defined(OS_ANDROID)
27845+#endif  // defined(OS_ANDROID) || defined(OS_OHOS)
27846 #if defined(OS_WIN)
27847   void CreateMediaFoundationRenderer(
27848       mojo::PendingReceiver<media::mojom::Renderer> receiver,
27849diff --git a/content/renderer/media/ohos/ohos_media_player_renderer_client.cc b/content/renderer/media/ohos/ohos_media_player_renderer_client.cc
27850new file mode 100644
27851index 0000000000..4f2b9c1043
27852--- /dev/null
27853+++ b/content/renderer/media/ohos/ohos_media_player_renderer_client.cc
27854@@ -0,0 +1,141 @@
27855+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
27856+// Use of this source code is governed by a BSD-style license that can be
27857+// found in the LICENSE file.
27858+
27859+#include "content/renderer/media/ohos/ohos_media_player_renderer_client.h"
27860+
27861+#include <sys/mman.h>
27862+#include <sys/stat.h>
27863+#include <utility>
27864+
27865+#include "base/logging.h"
27866+#include "media/base/video_frame.h"
27867+
27868+namespace content {
27869+
27870+OHOSMediaPlayerRendererClient::OHOSMediaPlayerRendererClient(
27871+    mojo::PendingRemote<RendererExtention> renderer_extension_remote,
27872+    mojo::PendingReceiver<ClientExtention> client_extension_receiver,
27873+    scoped_refptr<base::SingleThreadTaskRunner> media_task_runner,
27874+    std::unique_ptr<media::MojoRenderer> mojo_renderer,
27875+    media::VideoRendererSink* sink)
27876+    : MojoRendererWrapper(std::move(mojo_renderer)),
27877+      client_(nullptr),
27878+      sink_(sink),
27879+      media_task_runner_(std::move(media_task_runner)),
27880+      delayed_bind_client_extension_receiver_(
27881+          std::move(client_extension_receiver)),
27882+      delayed_bind_renderer_extention_remote_(
27883+          std::move(renderer_extension_remote)) {}
27884+
27885+OHOSMediaPlayerRendererClient::~OHOSMediaPlayerRendererClient() {
27886+  while (!cached_buffers_.empty()) {
27887+    CachedBuffer &temp_buffer = cached_buffers_.front();
27888+    munmap(temp_buffer.mapped_, temp_buffer.buffer_size_);
27889+    close(temp_buffer.fd_);
27890+    cached_buffers_.pop_front();
27891+  }
27892+}
27893+
27894+void OHOSMediaPlayerRendererClient::Initialize(
27895+    media::MediaResource* media_resource,
27896+    media::RendererClient* client,
27897+    media::PipelineStatusCallback init_cb) {
27898+  DCHECK(media_task_runner_->BelongsToCurrentThread());
27899+  DCHECK(!init_cb_);
27900+
27901+  // Consume and bind the delayed PendingRemote and PendingReceiver now that we
27902+  // are on |media_task_runner_|.
27903+  renderer_extension_remote_.Bind(
27904+      std::move(delayed_bind_renderer_extention_remote_), media_task_runner_);
27905+  client_extension_receiver_.Bind(
27906+      std::move(delayed_bind_client_extension_receiver_), media_task_runner_);
27907+
27908+  media_resource_ = media_resource;
27909+  client_ = client;
27910+  init_cb_ = std::move(init_cb);
27911+  MojoRendererWrapper::Initialize(
27912+      media_resource, client_,
27913+      base::BindOnce(
27914+          &OHOSMediaPlayerRendererClient::OnRemoteRendererInitialized,
27915+          weak_factory_.GetWeakPtr()));
27916+  sink_->SetFinishPaintCallback(
27917+      base::BindRepeating(&OHOSMediaPlayerRendererClient::OnFinishPaintCallback,
27918+                          weak_factory_.GetWeakPtr()));
27919+}
27920+
27921+void OHOSMediaPlayerRendererClient::OnFinishPaintCallback() {
27922+  if (!media_task_runner_->BelongsToCurrentThread()) {
27923+    media_task_runner_->PostTask(
27924+        FROM_HERE,
27925+        base::BindOnce(&OHOSMediaPlayerRendererClient::OnFinishPaintCallback,
27926+                       base::Unretained(this)));
27927+    return;
27928+  }
27929+  if (cached_buffers_.size() > 1) {
27930+    CachedBuffer &temp_buffer = cached_buffers_.front();
27931+    munmap(temp_buffer.mapped_, temp_buffer.buffer_size_);
27932+    close(temp_buffer.fd_);
27933+    renderer_extension_remote_->FinishPaint(temp_buffer.fd_browser_);
27934+    cached_buffers_.pop_front();
27935+  }
27936+}
27937+
27938+void OHOSMediaPlayerRendererClient::OnRemoteRendererInitialized(
27939+    media::PipelineStatus status) {
27940+  DCHECK(media_task_runner_->BelongsToCurrentThread());
27941+  DCHECK(!init_cb_.is_null());
27942+
27943+  if (status == media::PIPELINE_OK) {
27944+    // Signal that we're using MediaPlayer so that we can properly differentiate
27945+    // within our metrics.
27946+    media::PipelineStatistics stats;
27947+    stats.video_decoder_info = {true, false,
27948+                                media::VideoDecoderType::kMediaCodec};
27949+    stats.audio_decoder_info = {true, false,
27950+                                media::AudioDecoderType::kMediaCodec};
27951+    client_->OnStatisticsUpdate(stats);
27952+  }
27953+  std::move(init_cb_).Run(status);
27954+}
27955+
27956+void OHOSMediaPlayerRendererClient::OnVideoSizeChange(const gfx::Size& size) {
27957+  client_->OnVideoNaturalSizeChange(size);
27958+}
27959+
27960+void OHOSMediaPlayerRendererClient::OnDurationChange(base::TimeDelta duration) {
27961+  DCHECK(media_task_runner_->BelongsToCurrentThread());
27962+  media_resource_->ForwardDurationChangeToDemuxerHost(duration);
27963+}
27964+
27965+void OHOSMediaPlayerRendererClient::OnFrameUpdate(
27966+    media::mojom::OhosSurfaceBufferHandlePtr ohos_surface_buffer_handle) {
27967+  if (!media_task_runner_->BelongsToCurrentThread()) {
27968+    media_task_runner_->PostTask(
27969+        FROM_HERE, base::BindOnce(&OHOSMediaPlayerRendererClient::OnFrameUpdate,
27970+                                  base::Unretained(this),
27971+                                  std::move(ohos_surface_buffer_handle)));
27972+    return;
27973+  }
27974+  auto fd = ohos_surface_buffer_handle->buffer_fd.TakeFD().release();
27975+  uint32_t buffer_size = ohos_surface_buffer_handle->buffer_size;
27976+  int fd_browser = ohos_surface_buffer_handle->fd_browser;
27977+  int32_t width = ohos_surface_buffer_handle->width;
27978+  int32_t height = ohos_surface_buffer_handle->height;
27979+
27980+  uint8_t* mapped =
27981+      (uint8_t*)mmap(NULL, buffer_size, PROT_READ, MAP_SHARED, fd, 0);
27982+  const base::TimeDelta kZero;
27983+
27984+  media::VideoPixelFormat format = media::VideoPixelFormat::PIXEL_FORMAT_ABGR;
27985+  gfx::Size size = gfx::Size(width, height);
27986+  scoped_refptr<media::VideoFrame> frame = media::VideoFrame::WrapExternalData(
27987+      format, size, gfx::Rect(size), size, mapped, buffer_size, kZero);
27988+
27989+  auto unique_frame = media::VideoFrame::WrapVideoFrame(
27990+      frame, frame->format(), frame->visible_rect(), frame->natural_size());
27991+  sink_->PaintSingleFrame(std::move(unique_frame));
27992+  cached_buffers_.push_back(CachedBuffer{fd_browser, fd, mapped, buffer_size});
27993+}
27994+
27995+}  // namespace content
27996\ No newline at end of file
27997diff --git a/content/renderer/media/ohos/ohos_media_player_renderer_client.h b/content/renderer/media/ohos/ohos_media_player_renderer_client.h
27998new file mode 100644
27999index 0000000000..8f1f6cf0da
28000--- /dev/null
28001+++ b/content/renderer/media/ohos/ohos_media_player_renderer_client.h
28002@@ -0,0 +1,102 @@
28003+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
28004+// Use of this source code is governed by a BSD-style license that can be
28005+// found in the LICENSE file.
28006+
28007+#ifndef CONTENT_RENDERER_MEDIA_OHOS_MEDIA_PLAYER_RENDERER_CLIENT_H_
28008+#define CONTENT_RENDERER_MEDIA_OHOS_MEDIA_PLAYER_RENDERER_CLIENT_H_
28009+
28010+#include <memory>
28011+
28012+#include "base/callback.h"
28013+#include "base/macros.h"
28014+#include "base/memory/weak_ptr.h"
28015+#include "base/single_thread_task_runner.h"
28016+#include "content/common/content_export.h"
28017+#include "media/base/media_resource.h"
28018+#include "media/base/renderer.h"
28019+#include "media/base/renderer_client.h"
28020+#include "media/base/video_renderer_sink.h"
28021+#include "media/mojo/clients/mojo_renderer.h"
28022+#include "media/mojo/clients/mojo_renderer_wrapper.h"
28023+#include "media/mojo/mojom/renderer_extensions.mojom.h"
28024+#include "mojo/public/cpp/bindings/pending_receiver.h"
28025+#include "mojo/public/cpp/bindings/pending_remote.h"
28026+#include "mojo/public/cpp/bindings/receiver.h"
28027+#include "mojo/public/cpp/bindings/remote.h"
28028+
28029+namespace content {
28030+
28031+struct CachedBuffer {
28032+  int fd_browser_;
28033+  int fd_;
28034+  uint8_t* mapped_;
28035+  uint32_t buffer_size_;
28036+};
28037+
28038+class OHOSMediaPlayerRendererClient
28039+    : public media::mojom::MediaPlayerRendererClientExtension,
28040+      public media::MojoRendererWrapper {
28041+ public:
28042+  using RendererExtention = media::mojom::MediaPlayerRendererExtension;
28043+  using ClientExtention = media::mojom::MediaPlayerRendererClientExtension;
28044+  OHOSMediaPlayerRendererClient(
28045+      mojo::PendingRemote<RendererExtention> renderer_extension_remote,
28046+      mojo::PendingReceiver<ClientExtention> client_extension_receiver,
28047+      scoped_refptr<base::SingleThreadTaskRunner> media_task_runner,
28048+      std::unique_ptr<media::MojoRenderer> mojo_renderer,
28049+      media::VideoRendererSink* sink);
28050+  ~OHOSMediaPlayerRendererClient() override;
28051+
28052+  // Renderer implementation.
28053+  void Initialize(media::MediaResource* media_resource,
28054+                  media::RendererClient* client,
28055+                  media::PipelineStatusCallback init_cb) override;
28056+
28057+  // media::mojom::MediaPlayerRendererClientExtension implementation
28058+  void OnDurationChange(base::TimeDelta duration) override;
28059+  void OnVideoSizeChange(const gfx::Size& size) override;
28060+  void OnFrameUpdate(media::mojom::OhosSurfaceBufferHandlePtr
28061+                         ohos_surface_buffer_handle) override;
28062+
28063+ private:
28064+  void OnRemoteRendererInitialized(media::PipelineStatus status);
28065+  void OnFinishPaintCallback();
28066+
28067+  media::MediaResource* media_resource_;
28068+
28069+  std::deque<CachedBuffer> cached_buffers_;
28070+
28071+  media::RendererClient* client_;
28072+
28073+  media::VideoRendererSink* sink_;
28074+
28075+  scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_;
28076+
28077+  media::PipelineStatusCallback init_cb_;
28078+
28079+  // This class is constructed on the main task runner, and used on
28080+  // |media_task_runner_|. These member are used to delay calls to Bind() for
28081+  // |renderer_extension_ptr_| and |client_extension_binding_|, until we are on
28082+  // |media_task_runner_|.
28083+  // Both are set in the constructor, and consumed in Initialize().
28084+  mojo::PendingReceiver<ClientExtention>
28085+      delayed_bind_client_extension_receiver_;
28086+  mojo::PendingRemote<RendererExtention>
28087+      delayed_bind_renderer_extention_remote_;
28088+
28089+  // Used to call methods on the MediaPlayerRenderer in the browser process.
28090+  mojo::Remote<RendererExtention> renderer_extension_remote_;
28091+
28092+  // Used to receive events from MediaPlayerRenderer in the browser process.
28093+  mojo::Receiver<MediaPlayerRendererClientExtension> client_extension_receiver_{
28094+      this};
28095+
28096+  // NOTE: Weak pointers must be invalidated before all other member variables.
28097+  base::WeakPtrFactory<OHOSMediaPlayerRendererClient> weak_factory_{this};
28098+
28099+  DISALLOW_COPY_AND_ASSIGN(OHOSMediaPlayerRendererClient);
28100+};
28101+
28102+}  // namespace content
28103+
28104+#endif  // CONTENT_RENDERER_MEDIA_OHOS_MEDIA_PLAYER_RENDERER_CLIENT_H_
28105diff --git a/content/renderer/media/ohos/ohos_media_player_renderer_client_factory.cc b/content/renderer/media/ohos/ohos_media_player_renderer_client_factory.cc
28106new file mode 100644
28107index 0000000000..876b3c61b0
28108--- /dev/null
28109+++ b/content/renderer/media/ohos/ohos_media_player_renderer_client_factory.cc
28110@@ -0,0 +1,55 @@
28111+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
28112+// Use of this source code is governed by a BSD-style license that can be
28113+// found in the LICENSE file.
28114+
28115+#include "content/renderer/media/ohos/ohos_media_player_renderer_client_factory.h"
28116+
28117+#include "content/renderer/media/ohos/ohos_media_player_renderer_client.h"
28118+#include "media/mojo/clients/mojo_renderer.h"
28119+#include "media/mojo/clients/mojo_renderer_factory.h"
28120+#include "media/mojo/mojom/renderer_extensions.mojom.h"
28121+
28122+namespace content {
28123+
28124+OHOSMediaPlayerRendererClientFactory::OHOSMediaPlayerRendererClientFactory(
28125+    std::unique_ptr<media::MojoRendererFactory> mojo_renderer_factory)
28126+    : mojo_renderer_factory_(std::move(mojo_renderer_factory)) {}
28127+
28128+OHOSMediaPlayerRendererClientFactory::~OHOSMediaPlayerRendererClientFactory() {}
28129+
28130+std::unique_ptr<media::Renderer>
28131+OHOSMediaPlayerRendererClientFactory::CreateRenderer(
28132+    const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
28133+    const scoped_refptr<base::TaskRunner>& worker_task_runner,
28134+    media::AudioRendererSink* audio_renderer_sink,
28135+    media::VideoRendererSink* video_renderer_sink,
28136+    media::RequestOverlayInfoCB request_overlay_info_cb,
28137+    const gfx::ColorSpace& target_color_space) {
28138+  mojo::PendingRemote<media::mojom::MediaPlayerRendererExtension>
28139+      renderer_extension_remote;
28140+  auto renderer_extension_receiver =
28141+      renderer_extension_remote.InitWithNewPipeAndPassReceiver();
28142+
28143+  mojo::PendingRemote<media::mojom::MediaPlayerRendererClientExtension>
28144+      client_extension_remote;
28145+  auto client_extension_receiver =
28146+      client_extension_remote.InitWithNewPipeAndPassReceiver();
28147+
28148+  std::unique_ptr<media::MojoRenderer> mojo_renderer =
28149+      mojo_renderer_factory_->CreateMediaPlayerRenderer(
28150+          std::move(renderer_extension_receiver),
28151+          std::move(client_extension_remote), media_task_runner,
28152+          video_renderer_sink);
28153+
28154+  return std::make_unique<OHOSMediaPlayerRendererClient>(
28155+      std::move(renderer_extension_remote),
28156+      std::move(client_extension_receiver), media_task_runner,
28157+      std::move(mojo_renderer), video_renderer_sink);
28158+}
28159+
28160+media::MediaResource::Type
28161+OHOSMediaPlayerRendererClientFactory::GetRequiredMediaResourceType() {
28162+  return media::MediaResource::Type::URL;
28163+}
28164+
28165+}  // namespace content
28166diff --git a/content/renderer/media/ohos/ohos_media_player_renderer_client_factory.h b/content/renderer/media/ohos/ohos_media_player_renderer_client_factory.h
28167new file mode 100644
28168index 0000000000..c0fc62d6b9
28169--- /dev/null
28170+++ b/content/renderer/media/ohos/ohos_media_player_renderer_client_factory.h
28171@@ -0,0 +1,45 @@
28172+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
28173+// Use of this source code is governed by a BSD-style license that can be
28174+// found in the LICENSE file.
28175+
28176+#ifndef CONTENT_RENDERER_MEDIA_OHOS_MEDIA_PLAYER_RENDERER_CLIENT_FACTORY_H_
28177+#define CONTENT_RENDERER_MEDIA_OHOS_MEDIA_PLAYER_RENDERER_CLIENT_FACTORY_H_
28178+
28179+#include <memory>
28180+
28181+#include "base/callback.h"
28182+#include "base/macros.h"
28183+#include "base/single_thread_task_runner.h"
28184+#include "content/common/content_export.h"
28185+#include "media/base/renderer_factory.h"
28186+#include "media/mojo/clients/mojo_renderer_factory.h"
28187+
28188+namespace content {
28189+
28190+// The default class for creating a MediaPlayerRendererClient
28191+// and its associated MediaPlayerRenderer.
28192+class CONTENT_EXPORT OHOSMediaPlayerRendererClientFactory
28193+    : public media::RendererFactory {
28194+ public:
28195+  OHOSMediaPlayerRendererClientFactory(
28196+      std::unique_ptr<media::MojoRendererFactory> mojo_renderer_factory);
28197+  ~OHOSMediaPlayerRendererClientFactory() override;
28198+
28199+  std::unique_ptr<media::Renderer> CreateRenderer(
28200+      const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
28201+      const scoped_refptr<base::TaskRunner>& worker_task_runner,
28202+      media::AudioRendererSink* audio_renderer_sink,
28203+      media::VideoRendererSink* video_renderer_sink,
28204+      media::RequestOverlayInfoCB request_surface_cb,
28205+      const gfx::ColorSpace& target_color_space) override;
28206+
28207+  // The MediaPlayerRenderer uses a Type::URL.
28208+  media::MediaResource::Type GetRequiredMediaResourceType() override;
28209+
28210+ private:
28211+  std::unique_ptr<media::MojoRendererFactory> mojo_renderer_factory_;
28212+};
28213+
28214+}  // namespace content
28215+
28216+#endif  // CONTENT_RENDERER_MEDIA_OHOS_MEDIA_PLAYER_RENDERER_CLIENT_FACTORY_H_
28217diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
28218index e2e39cc41a..3c9ab9200a 100644
28219--- a/content/renderer/render_frame_impl.cc
28220+++ b/content/renderer/render_frame_impl.cc
28221@@ -243,6 +243,10 @@
28222 #include "content/renderer/java/gin_java_bridge_dispatcher.h"
28223 #endif
28224
28225+#if defined(OS_OHOS)
28226+#include "cef/libcef/renderer/javascript/oh_gin_javascript_bridge_dispatcher.h"
28227+#endif
28228+
28229 using base::Time;
28230 using base::TimeDelta;
28231 using blink::ContextMenuData;
28232@@ -2029,6 +2033,10 @@ RenderFrameImpl::RenderFrameImpl(CreateParams params)
28233 #if defined(OS_ANDROID)
28234   new GinJavaBridgeDispatcher(this);
28235 #endif
28236+
28237+#if defined(OS_OHOS)
28238+  new NWEB::OhGinJavascriptBridgeDispatcher(this);
28239+#endif
28240 }
28241
28242 mojom::FrameHost* RenderFrameImpl::GetFrameHost() {
28243diff --git a/gpu/config/gpu_control_list.cc b/gpu/config/gpu_control_list.cc
28244index 9db98fb1e0..9685aad3a0 100644
28245--- a/gpu/config/gpu_control_list.cc
28246+++ b/gpu/config/gpu_control_list.cc
28247@@ -788,6 +788,8 @@ GpuControlList::OsType GpuControlList::GetOsType() {
28248   return kOsLinux;
28249 #elif defined(OS_MAC)
28250   return kOsMacosx;
28251+#elif defined(OS_OHOS)
28252+  return kOsOHOS;
28253 #else
28254   return kOsAny;
28255 #endif
28256diff --git a/gpu/config/gpu_control_list.h b/gpu/config/gpu_control_list.h
28257index 8a27b1c2bc..8ca7f70d96 100644
28258--- a/gpu/config/gpu_control_list.h
28259+++ b/gpu/config/gpu_control_list.h
28260@@ -31,6 +31,7 @@ class GPU_EXPORT GpuControlList {
28261     kOsChromeOS,
28262     kOsAndroid,
28263     kOsFuchsia,
28264+    kOsOHOS,
28265     kOsAny
28266   };
28267
28268diff --git a/ipc/ipc_message_start.h b/ipc/ipc_message_start.h
28269index e9414b1807..a929a919d3 100644
28270--- a/ipc/ipc_message_start.h
28271+++ b/ipc/ipc_message_start.h
28272@@ -24,6 +24,7 @@ enum IPCMessageStart {
28273   NaClHostMsgStart,
28274   EncryptedMediaMsgStart,
28275   GinJavaBridgeMsgStart,
28276+  OhGinJavascriptBridgeMsgStart,
28277   ChromeUtilityPrintingMsgStart,
28278   ExtensionsGuestViewMsgStart,
28279   GuestViewMsgStart,
28280diff --git a/media/base/null_video_sink.cc b/media/base/null_video_sink.cc
28281index 3e23b2e8dc..197bdc447e 100644
28282--- a/media/base/null_video_sink.cc
28283+++ b/media/base/null_video_sink.cc
28284@@ -100,4 +100,8 @@ void NullVideoSink::PaintSingleFrame(scoped_refptr<VideoFrame> frame,
28285     new_frame_cb_.Run(std::move(frame));
28286 }
28287
28288+#if defined(OS_OHOS)
28289+void NullVideoSink::SetFinishPaintCallback(base::RepeatingClosure callback) {}
28290+#endif
28291+
28292 }  // namespace media
28293diff --git a/media/base/null_video_sink.h b/media/base/null_video_sink.h
28294index 988799c488..4dc2fb8532 100644
28295--- a/media/base/null_video_sink.h
28296+++ b/media/base/null_video_sink.h
28297@@ -37,6 +37,9 @@ class MEDIA_EXPORT NullVideoSink : public VideoRendererSink {
28298   void Stop() override;
28299   void PaintSingleFrame(scoped_refptr<VideoFrame> frame,
28300                         bool repaint_duplicate_frame) override;
28301+#if defined(OS_OHOS)
28302+  void SetFinishPaintCallback(base::RepeatingClosure callback) override;
28303+#endif
28304
28305   void set_tick_clock_for_testing(const base::TickClock* tick_clock) {
28306     tick_clock_ = tick_clock;
28307diff --git a/media/base/ohos/BUILD.gn b/media/base/ohos/BUILD.gn
28308new file mode 100644
28309index 0000000000..96b060fe0a
28310--- /dev/null
28311+++ b/media/base/ohos/BUILD.gn
28312@@ -0,0 +1,33 @@
28313+# Copyright 2022 The Huawei Authors. All rights reserved.
28314+# Use of this source code is governed by a BSD-style license that can be
28315+# found in the LICENSE file.
28316+
28317+if (is_ohos) {
28318+  import("//build/config/ohos/config.gni")
28319+  source_set("ohos") {
28320+    visibility = [
28321+      "//media",
28322+      "//media/filters",
28323+    ]
28324+
28325+    sources = [
28326+      "ohos_media_player_bridge.cc",
28327+      "ohos_media_player_bridge.h",
28328+      "ohos_media_player_callback.cc",
28329+      "ohos_media_player_callback.h",
28330+      "ohos_media_player_listener.cc",
28331+      "ohos_media_player_listener.h",
28332+    ]
28333+    configs += [ "//media:subcomponent_config" ]
28334+    deps = [
28335+      "//media/base",
28336+      "//url",
28337+    ]
28338+    libs = [
28339+      "surface.z",
28340+      "media_client.z",
28341+    ]
28342+    include_dirs = ohos_src_includes
28343+    lib_dirs = ohos_libs_dir
28344+  }
28345+}
28346\ No newline at end of file
28347diff --git a/media/base/ohos/ohos_media_player_bridge.cc b/media/base/ohos/ohos_media_player_bridge.cc
28348new file mode 100644
28349index 0000000000..882a855a4c
28350--- /dev/null
28351+++ b/media/base/ohos/ohos_media_player_bridge.cc
28352@@ -0,0 +1,214 @@
28353+// Copyright 2022 The Huawei Authors. All rights reserved.
28354+// Use of this source code is governed by a BSD-style license that can be
28355+// found in the LICENSE file.
28356+
28357+#include "media/base/ohos/ohos_media_player_bridge.h"
28358+
28359+#include <display_type.h>
28360+#include <sys/stat.h>
28361+#include "base/logging.h"
28362+#include "base/threading/thread_task_runner_handle.h"
28363+
28364+namespace media {
28365+
28366+OHOSMediaPlayerBridge::OHOSMediaPlayerBridge(
28367+    const GURL& url,
28368+    const GURL& site_for_cookies,
28369+    const url::Origin& top_frame_origin,
28370+    const std::string& user_agent,
28371+    bool hide_url_log,
28372+    Client* client,
28373+    bool allow_credentials,
28374+    bool is_hls)
28375+    : client_(client), url_(url) {}
28376+
28377+OHOSMediaPlayerBridge::~OHOSMediaPlayerBridge() {
28378+  cached_buffers_.clear();
28379+}
28380+
28381+int32_t OHOSMediaPlayerBridge::Initialize() {
28382+  if (url_.SchemeIsBlob()) {
28383+    NOTREACHED();
28384+    return -1;
28385+  }
28386+  task_runner_ = base::ThreadTaskRunnerHandle::Get();
28387+  player_ = OHOS::Media::PlayerFactory::CreatePlayer();
28388+  std::shared_ptr<OHOSMediaPlayerCallback> media_player_callback =
28389+      std::make_shared<OHOSMediaPlayerCallback>(task_runner_,
28390+                                                weak_factory_.GetWeakPtr());
28391+  int32_t ret = player_->SetPlayerCallback(media_player_callback);
28392+  if (ret != 0) {
28393+    LOG(ERROR) << "SetPlayerCallback error::ret=" << ret;
28394+    return ret;
28395+  }
28396+  if (url_.SchemeIsFile()) {
28397+    ret = SetFdSource(url_.GetContent());
28398+  } else {
28399+    ret = player_->SetSource(url_.spec());
28400+  }
28401+  if (ret != 0) {
28402+    LOG(ERROR) << "SetSource error::ret=" << ret;
28403+    return ret;
28404+  }
28405+  consumer_surface_ = OHOS::Surface::CreateSurfaceAsConsumer();
28406+  listener_ = new OHOSMediaPlayerListener(
28407+      task_runner_, weak_factory_.GetWeakPtr(), consumer_surface_);
28408+  consumer_surface_->RegisterConsumerListener(listener_);
28409+  consumer_surface_->SetUserData(surfaceFormat,
28410+                                 std::to_string(PIXEL_FMT_RGBA_8888));
28411+  consumer_surface_->SetQueueSize(3);
28412+  ret = player_->SetVideoSurface(consumer_surface_);
28413+  if (ret != 0) {
28414+    LOG(ERROR) << "SetVideoSurface error::ret=" << ret;
28415+    return ret;
28416+  }
28417+  ret = player_->Prepare();
28418+  if (ret != 0) {
28419+    LOG(ERROR) << "Prepare error::ret=" << ret << " url=" << url_.spec();
28420+    return ret;
28421+  }
28422+  return ret;
28423+}
28424+
28425+void OHOSMediaPlayerBridge::Start() {
28426+  if (player_ && player_state_ != OHOS::Media::PLAYER_STARTED) {
28427+    int32_t ret = player_->Play();
28428+    if (ret != 0) {
28429+      LOG(ERROR) << "Play error::ret=" << ret;
28430+    }
28431+  }
28432+}
28433+
28434+void OHOSMediaPlayerBridge::Pause() {
28435+  if (player_ && player_state_ == OHOS::Media::PLAYER_STARTED) {
28436+    int32_t ret = player_->Pause();
28437+    if (ret != 0) {
28438+      LOG(ERROR) << "Pause error::ret=" << ret;
28439+    }
28440+  }
28441+}
28442+
28443+void OHOSMediaPlayerBridge::SeekTo(base::TimeDelta time) {
28444+  if (player_) {
28445+    seeking_ = true;
28446+    pending_seek_ = time;
28447+    int32_t ret = player_->Seek(time.InMilliseconds(),
28448+                                OHOS::Media::PlayerSeekMode::SEEK_CLOSEST);
28449+    if (ret != 0) {
28450+      LOG(ERROR) << "Seek error::ret=" << ret;
28451+    }
28452+  }
28453+}
28454+
28455+void OHOSMediaPlayerBridge::SetVolume(float volume) {
28456+  if (player_) {
28457+    int32_t ret = player_->SetVolume(volume, volume);
28458+    if (ret != 0) {
28459+      LOG(ERROR) << "SetVolume error::ret=" << ret;
28460+    }
28461+  }
28462+}
28463+
28464+base::TimeDelta OHOSMediaPlayerBridge::GetDuration() {
28465+  if (player_) {
28466+    int32_t time = -1;
28467+    (void)player_->GetDuration(time);
28468+    return base::TimeDelta::FromMilliseconds(time);
28469+  }
28470+  return base::TimeDelta();
28471+}
28472+
28473+base::TimeDelta OHOSMediaPlayerBridge::GetMediaTime() {
28474+  if (player_) {
28475+    if (seeking_) {
28476+      return pending_seek_;
28477+    } else {
28478+      int32_t time = -1;
28479+      (void)player_->GetCurrentTime(time);
28480+      return base::TimeDelta::FromMilliseconds(time);
28481+    }
28482+  }
28483+  return base::TimeDelta::FromMilliseconds(0);
28484+}
28485+
28486+void OHOSMediaPlayerBridge::FinishPaint(int fd) {
28487+  if (!task_runner_->BelongsToCurrentThread()) {
28488+    task_runner_->PostTask(FROM_HERE,
28489+                           base::BindOnce(&OHOSMediaPlayerBridge::FinishPaint,
28490+                                          weak_factory_.GetWeakPtr(), fd));
28491+    return;
28492+  }
28493+
28494+  if (cached_buffers_.front()->GetBufferHandle()->reserve[0] != fd) {
28495+    LOG(ERROR) << "match fd error render fd=" << fd << "  browser fd="
28496+               << cached_buffers_.front()->GetBufferHandle()->reserve[0];
28497+  }
28498+  OHOS::SurfaceError ret =
28499+      consumer_surface_->ReleaseBuffer(cached_buffers_.front(), -1);
28500+  if (ret != OHOS::SURFACE_ERROR_OK) {
28501+    LOG(ERROR) << "release buffer fail, ret=" << ret;
28502+  }
28503+  cached_buffers_.pop_front();
28504+}
28505+
28506+void OHOSMediaPlayerBridge::SetPlaybackSpeed(
28507+    OHOS::Media::PlaybackRateMode mode) {
28508+  if (player_) {
28509+    int32_t ret = player_->SetPlaybackSpeed(mode);
28510+    if (ret != 0) {
28511+      LOG(ERROR) << "SetPlaybackSpeed error::ret=" << ret;
28512+    }
28513+  }
28514+}
28515+
28516+void OHOSMediaPlayerBridge::OnEnd() {
28517+  client_->OnPlaybackComplete();
28518+}
28519+
28520+void OHOSMediaPlayerBridge::OnError(int32_t error_code) {
28521+  client_->OnError(error_code);
28522+}
28523+
28524+void OHOSMediaPlayerBridge::OnSeekDone() {
28525+  seeking_ = false;
28526+}
28527+
28528+void OHOSMediaPlayerBridge::OnPlayerStateUpdate(
28529+    OHOS::Media::PlayerStates player_state) {
28530+  player_state_ = player_state;
28531+}
28532+
28533+void OHOSMediaPlayerBridge::OnBufferAvailable(
28534+    OHOS::sptr<OHOS::SurfaceBuffer> buffer) {
28535+  if (!task_runner_->BelongsToCurrentThread()) {
28536+    task_runner_->PostTask(
28537+        FROM_HERE,
28538+        base::BindOnce(&OHOSMediaPlayerBridge::OnBufferAvailable,
28539+                       weak_factory_.GetWeakPtr(), std::move(buffer)));
28540+    return;
28541+  }
28542+  client_->OnFrameAvailable(buffer->GetBufferHandle()->reserve[0],
28543+                            buffer->GetSize(), buffer->GetWidth(),
28544+                            buffer->GetHeight());
28545+  cached_buffers_.push_back(buffer);
28546+}
28547+
28548+int32_t OHOSMediaPlayerBridge::SetFdSource(const std::string& path) {
28549+  int32_t fd = open(path.c_str(), O_RDONLY);
28550+  if (fd < 0) {
28551+    LOG(ERROR) << "SetFdSource error:Open file failed";
28552+    return -1;
28553+  }
28554+  struct stat64 buffer;
28555+  if (fstat64(fd, &buffer) != 0) {
28556+    LOG(ERROR) << "SetFdSource error:Get file state failed";
28557+    (void)close(fd);
28558+    return -1;
28559+  }
28560+  int64_t length = static_cast<int64_t>(buffer.st_size);
28561+  int32_t ret = player_->SetSource(fd, 0, length);
28562+  (void)close(fd);
28563+  return ret;
28564+}
28565+
28566+}  // namespace media
28567diff --git a/media/base/ohos/ohos_media_player_bridge.h b/media/base/ohos/ohos_media_player_bridge.h
28568new file mode 100644
28569index 0000000000..2446a5dec1
28570--- /dev/null
28571+++ b/media/base/ohos/ohos_media_player_bridge.h
28572@@ -0,0 +1,95 @@
28573+// Copyright 2022 The Huawei Authors. All rights reserved.
28574+// Use of this source code is governed by a BSD-style license that can be
28575+// found in the LICENSE file.
28576+
28577+#ifndef MEDIA_BASE_OHOS_MEDIA_PLAYER_BRIDGE_H_
28578+#define MEDIA_BASE_OHOS_MEDIA_PLAYER_BRIDGE_H_
28579+
28580+#include <player.h>
28581+#include <surface.h>
28582+
28583+#include "base/memory/weak_ptr.h"
28584+#include "media/base/media_export.h"
28585+#include "media/base/ohos/ohos_media_player_callback.h"
28586+#include "media/base/ohos/ohos_media_player_listener.h"
28587+#include "url/gurl.h"
28588+#include "url/origin.h"
28589+
28590+namespace media {
28591+class MEDIA_EXPORT OHOSMediaPlayerBridge {
28592+ public:
28593+  class Client {
28594+   public:
28595+    virtual void OnFrameAvailable(int fd,
28596+                                  uint32_t size,
28597+                                  int32_t width,
28598+                                  int32_t height) = 0;
28599+
28600+    // Called when media duration is first detected or changes.
28601+    virtual void OnMediaDurationChanged(base::TimeDelta duration) = 0;
28602+
28603+    // Called when playback completed.
28604+    virtual void OnPlaybackComplete() = 0;
28605+
28606+    // Called when error happens.
28607+    virtual void OnError(int error) = 0;
28608+
28609+    // Called when video size has changed.
28610+    virtual void OnVideoSizeChanged(int width, int height) = 0;
28611+  };
28612+
28613+  enum MediaErrorType {
28614+    MEDIA_ERROR_FORMAT,
28615+    MEDIA_ERROR_DECODE,
28616+    MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK,
28617+    MEDIA_ERROR_INVALID_CODE,
28618+    MEDIA_ERROR_SERVER_DIED,
28619+  };
28620+
28621+  OHOSMediaPlayerBridge(const GURL& url,
28622+                        const GURL& site_for_cookies,
28623+                        const url::Origin& top_frame_origin,
28624+                        const std::string& user_agent,
28625+                        bool hide_url_log,
28626+                        Client* client,
28627+                        bool allow_credentials,
28628+                        bool is_hls);
28629+  virtual ~OHOSMediaPlayerBridge();
28630+
28631+  int32_t Initialize();
28632+  void Start();
28633+  void Pause();
28634+  void SeekTo(base::TimeDelta time);
28635+  base::TimeDelta GetDuration();
28636+  void SetVolume(float volume);
28637+  base::TimeDelta GetMediaTime();
28638+  void FinishPaint(int fd);
28639+  void SetPlaybackSpeed(OHOS::Media::PlaybackRateMode mode);
28640+
28641+  void OnEnd();
28642+  void OnError(int32_t errorCode);
28643+  void OnBufferAvailable(OHOS::sptr<OHOS::SurfaceBuffer> buffer);
28644+  void OnSeekDone();
28645+  void OnPlayerStateUpdate(OHOS::Media::PlayerStates player_state);
28646+
28647+ private:
28648+
28649+  int32_t SetFdSource(const std::string& path);
28650+
28651+  const std::string surfaceFormat = "SURFACE_FORMAT";
28652+  std::shared_ptr<OHOS::Media::Player> player_ = nullptr;
28653+  std::deque<OHOS::sptr<OHOS::SurfaceBuffer>> cached_buffers_;
28654+  OHOS::sptr<OHOS::Surface> consumer_surface_ = nullptr;
28655+  OHOS::sptr<OHOS::IBufferConsumerListener> listener_;
28656+  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
28657+  Client* client_;
28658+  GURL url_;
28659+  bool seeking_ = false;
28660+  base::TimeDelta pending_seek_;
28661+  OHOS::Media::PlayerStates player_state_;
28662+  base::WeakPtrFactory<OHOSMediaPlayerBridge> weak_factory_{this};
28663+  DISALLOW_COPY_AND_ASSIGN(OHOSMediaPlayerBridge);
28664+};
28665+}  // namespace media
28666+
28667+#endif  // MEDIA_BASE_OHOS_MEDIA_PLAYER_BRIDGE_H_
28668diff --git a/media/base/ohos/ohos_media_player_callback.cc b/media/base/ohos/ohos_media_player_callback.cc
28669new file mode 100644
28670index 0000000000..36c9ab8c1f
28671--- /dev/null
28672+++ b/media/base/ohos/ohos_media_player_callback.cc
28673@@ -0,0 +1,100 @@
28674+// Copyright 2022 The Huawei Authors. All rights reserved.
28675+// Use of this source code is governed by a BSD-style license that can be
28676+// found in the LICENSE file.
28677+
28678+#include "media/base/ohos/ohos_media_player_callback.h"
28679+
28680+namespace media {
28681+
28682+OHOSMediaPlayerCallback::OHOSMediaPlayerCallback(
28683+    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
28684+    base::WeakPtr<OHOSMediaPlayerBridge> media_player)
28685+    : task_runner_(task_runner), media_player_(media_player) {
28686+  DCHECK(task_runner_.get());
28687+  DCHECK(media_player_);
28688+}
28689+
28690+OHOSMediaPlayerCallback::~OHOSMediaPlayerCallback() {}
28691+
28692+void OHOSMediaPlayerCallback::OnError(OHOS::Media::PlayerErrorType errorType,
28693+                                      int32_t errorCode) {
28694+  LOG(ERROR) << "media player error code=" << errorCode;
28695+  int media_error_type =
28696+      OHOSMediaPlayerBridge::MediaErrorType::MEDIA_ERROR_INVALID_CODE;
28697+  if (IsUnsupportType(errorCode)) {
28698+    media_error_type =
28699+        OHOSMediaPlayerBridge::MediaErrorType::MEDIA_ERROR_FORMAT;
28700+  } else if (IsFatalError(errorCode)) {
28701+    media_error_type =
28702+        OHOSMediaPlayerBridge::MediaErrorType::MEDIA_ERROR_DECODE;
28703+  }
28704+  task_runner_->PostTask(
28705+      FROM_HERE, base::BindOnce(&OHOSMediaPlayerBridge::OnError, media_player_,
28706+                                media_error_type));
28707+}
28708+
28709+void OHOSMediaPlayerCallback::OnInfo(OHOS::Media::PlayerOnInfoType type,
28710+                                     int32_t extra,
28711+                                     const OHOS::Media::Format& infoBody) {
28712+  (void)infoBody;
28713+  switch (type) {
28714+    case OHOS::Media::INFO_TYPE_SEEKDONE:
28715+      task_runner_->PostTask(
28716+          FROM_HERE,
28717+          base::BindOnce(&OHOSMediaPlayerBridge::OnSeekDone, media_player_));
28718+      break;
28719+    case OHOS::Media::INFO_TYPE_EOS:
28720+      task_runner_->PostTask(
28721+          FROM_HERE,
28722+          base::BindOnce(&OHOSMediaPlayerBridge::OnEnd, media_player_));
28723+      break;
28724+    case OHOS::Media::INFO_TYPE_STATE_CHANGE:
28725+      task_runner_->PostTask(
28726+          FROM_HERE,
28727+          base::BindOnce(&OHOSMediaPlayerBridge::OnPlayerStateUpdate,
28728+                         media_player_,
28729+                         static_cast<OHOS::Media::PlayerStates>(extra)));
28730+      break;
28731+    case OHOS::Media::INFO_TYPE_POSITION_UPDATE:
28732+      break;
28733+    case OHOS::Media::INFO_TYPE_MESSAGE:
28734+      break;
28735+    default:
28736+      break;
28737+  }
28738+}
28739+
28740+bool OHOSMediaPlayerCallback::IsUnsupportType(int32_t errorCode) {
28741+  switch (errorCode) {
28742+    case OHOS::Media::MSERR_UNSUPPORT:
28743+    case OHOS::Media::MSERR_UNSUPPORT_AUD_SRC_TYPE:
28744+    case OHOS::Media::MSERR_UNSUPPORT_AUD_CHANNEL_NUM:
28745+    case OHOS::Media::MSERR_UNSUPPORT_AUD_ENC_TYPE:
28746+    case OHOS::Media::MSERR_UNSUPPORT_AUD_PARAMS:
28747+    case OHOS::Media::MSERR_UNSUPPORT_VID_SRC_TYPE:
28748+    case OHOS::Media::MSERR_UNSUPPORT_VID_ENC_TYPE:
28749+    case OHOS::Media::MSERR_UNSUPPORT_VID_PARAMS:
28750+    case OHOS::Media::MSERR_UNSUPPORT_CONTAINER_TYPE:
28751+    case OHOS::Media::MSERR_UNSUPPORT_PROTOCOL_TYPE:
28752+    case OHOS::Media::MSERR_UNSUPPORT_VID_DEC_TYPE:
28753+    case OHOS::Media::MSERR_UNSUPPORT_AUD_DEC_TYPE:
28754+      return true;
28755+  }
28756+  return false;
28757+}
28758+bool OHOSMediaPlayerCallback::IsFatalError(int32_t errorCode) {
28759+  switch (errorCode) {
28760+    case OHOS::Media::MSERR_NO_MEMORY:
28761+    case OHOS::Media::MSERR_SERVICE_DIED:
28762+    case OHOS::Media::MSERR_CREATE_PLAYER_ENGINE_FAILED:
28763+    case OHOS::Media::MSERR_CREATE_AVMETADATAHELPER_ENGINE_FAILED:
28764+    case OHOS::Media::MSERR_AUD_DEC_FAILED:
28765+    case OHOS::Media::MSERR_VID_DEC_FAILED:
28766+    case OHOS::Media::MSERR_OPEN_FILE_FAILED:
28767+    case OHOS::Media::MSERR_FILE_ACCESS_FAILED:
28768+      return true;
28769+  }
28770+  return false;
28771+}
28772+
28773+}  // namespace media
28774diff --git a/media/base/ohos/ohos_media_player_callback.h b/media/base/ohos/ohos_media_player_callback.h
28775new file mode 100644
28776index 0000000000..b7837c39b0
28777--- /dev/null
28778+++ b/media/base/ohos/ohos_media_player_callback.h
28779@@ -0,0 +1,45 @@
28780+// Copyright 2022 The Huawei Authors. All rights reserved.
28781+// Use of this source code is governed by a BSD-style license that can be
28782+// found in the LICENSE file.
28783+
28784+#ifndef MEDIA_BASE_OHOS_MEDIA_PLAYER_CALLBACK_H_
28785+#define MEDIA_BASE_OHOS_MEDIA_PLAYER_CALLBACK_H_
28786+
28787+#include <media_errors.h>
28788+#include "base/logging.h"
28789+#include "base/single_thread_task_runner.h"
28790+#include "media/base/ohos/ohos_media_player_bridge.h"
28791+
28792+namespace base {
28793+class SingleThreadTaskRunner;
28794+}
28795+
28796+namespace media {
28797+
28798+class OHOSMediaPlayerBridge;
28799+
28800+class OHOSMediaPlayerCallback : public OHOS::Media::PlayerCallback {
28801+ public:
28802+  OHOSMediaPlayerCallback(
28803+      const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
28804+      base::WeakPtr<OHOSMediaPlayerBridge> media_player);
28805+
28806+  virtual ~OHOSMediaPlayerCallback();
28807+
28808+  void OnError(OHOS::Media::PlayerErrorType errorType,
28809+               int32_t errorCode) override;
28810+  void OnInfo(OHOS::Media::PlayerOnInfoType type,
28811+              int32_t extra,
28812+              const OHOS::Media::Format& infoBody = {}) override;
28813+  bool IsUnsupportType(int32_t errorCode);
28814+  bool IsFatalError(int32_t errorCode);
28815+
28816+ private:
28817+  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
28818+  base::WeakPtr<OHOSMediaPlayerBridge> media_player_;
28819+  DISALLOW_COPY_AND_ASSIGN(OHOSMediaPlayerCallback);
28820+};
28821+
28822+}  // namespace media
28823+
28824+#endif  // MEDIA_BASE_OHOS_MEDIA_PLAYER_CALLBACK_H_
28825diff --git a/media/base/ohos/ohos_media_player_listener.cc b/media/base/ohos/ohos_media_player_listener.cc
28826new file mode 100644
28827index 0000000000..bb08070c17
28828--- /dev/null
28829+++ b/media/base/ohos/ohos_media_player_listener.cc
28830@@ -0,0 +1,40 @@
28831+// Copyright 2022 The Huawei Authors. All rights reserved.
28832+// Use of this source code is governed by a BSD-style license that can be
28833+// found in the LICENSE file.
28834+
28835+#include "media/base/ohos/ohos_media_player_listener.h"
28836+
28837+namespace media {
28838+
28839+OHOSMediaPlayerListener::OHOSMediaPlayerListener(
28840+    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
28841+    base::WeakPtr<OHOSMediaPlayerBridge> media_player,
28842+    OHOS::sptr<OHOS::Surface> impl)
28843+    : task_runner_(task_runner), media_player_(media_player), surface_(impl) {
28844+  DCHECK(task_runner_.get());
28845+  DCHECK(media_player_);
28846+}
28847+
28848+OHOSMediaPlayerListener::~OHOSMediaPlayerListener() {}
28849+
28850+void OHOSMediaPlayerListener::OnBufferAvailable() {
28851+  OHOS::sptr<OHOS::SurfaceBuffer> buffer;
28852+  int32_t fence;
28853+  OHOS::SurfaceError ret;
28854+  auto surface_temp = surface_.promote();
28855+  if (surface_temp == nullptr) {
28856+    LOG(ERROR) << "surface is null";
28857+    return;
28858+  }
28859+
28860+  ret = surface_temp->AcquireBuffer(buffer, fence, timestamp, damage);
28861+  if (ret != OHOS::SURFACE_ERROR_OK) {
28862+    LOG(ERROR) << "acquire buffer fail, ret=" << ret;
28863+    return;
28864+  }
28865+  task_runner_->PostTask(
28866+      FROM_HERE, base::BindOnce(&OHOSMediaPlayerBridge::OnBufferAvailable,
28867+                                media_player_, buffer));
28868+}
28869+
28870+}  // namespace media
28871diff --git a/media/base/ohos/ohos_media_player_listener.h b/media/base/ohos/ohos_media_player_listener.h
28872new file mode 100644
28873index 0000000000..f2c3b70a27
28874--- /dev/null
28875+++ b/media/base/ohos/ohos_media_player_listener.h
28876@@ -0,0 +1,42 @@
28877+// Copyright 2022 The Huawei Authors. All rights reserved.
28878+// Use of this source code is governed by a BSD-style license that can be
28879+// found in the LICENSE file.
28880+
28881+#ifndef MEDIA_BASE_OHOS_MEDIA_PLAYER_LISTENER_H_
28882+#define MEDIA_BASE_OHOS_MEDIA_PLAYER_LISTENER_H_
28883+
28884+#include <surface.h>
28885+#include "base/logging.h"
28886+#include "base/single_thread_task_runner.h"
28887+#include "media/base/ohos/ohos_media_player_bridge.h"
28888+
28889+namespace base {
28890+class SingleThreadTaskRunner;
28891+}
28892+
28893+namespace media {
28894+
28895+class OHOSMediaPlayerBridge;
28896+
28897+class OHOSMediaPlayerListener : public OHOS::IBufferConsumerListener {
28898+ public:
28899+  OHOSMediaPlayerListener(
28900+      const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
28901+      base::WeakPtr<OHOSMediaPlayerBridge> media_player,
28902+      OHOS::sptr<OHOS::Surface> impl);
28903+
28904+  virtual ~OHOSMediaPlayerListener();
28905+  void OnBufferAvailable() override;
28906+
28907+ private:
28908+  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
28909+  base::WeakPtr<OHOSMediaPlayerBridge> media_player_;
28910+  OHOS::wptr<OHOS::Surface> surface_;
28911+  int64_t timestamp;
28912+  OHOS::Rect damage;
28913+  DISALLOW_COPY_AND_ASSIGN(OHOSMediaPlayerListener);
28914+};
28915+
28916+}  // namespace media
28917+
28918+#endif  // MEDIA_BASE_OHOS_MEDIA_PLAYER_LISTENER_H_
28919diff --git a/media/base/renderer_factory_selector.h b/media/base/renderer_factory_selector.h
28920index c291fb35d2..8a19d8ca35 100644
28921--- a/media/base/renderer_factory_selector.h
28922+++ b/media/base/renderer_factory_selector.h
28923@@ -47,7 +47,12 @@ enum class RendererFactoryType {
28924   kMediaFoundation = 6,  // MediaFoundationRendererClientFactory
28925   kFuchsia = 7,          // FuchsiaRendererFactory
28926   kRemoting = 8,         // RemotingRendererFactory
28927+#if defined(OS_OHOS)
28928+  kOHOSMediaPlayer = 9,  // OHOSMediaPlayerRendererFactory
28929+  kMaxValue = kOHOSMediaPlayer,
28930+#else
28931   kMaxValue = kRemoting,
28932+#endif
28933 };
28934
28935 class MEDIA_EXPORT RendererFactorySelector {
28936diff --git a/media/base/video_renderer_sink.h b/media/base/video_renderer_sink.h
28937index b7b034cdd0..82b45f062b 100644
28938--- a/media/base/video_renderer_sink.h
28939+++ b/media/base/video_renderer_sink.h
28940@@ -70,6 +70,10 @@ class MEDIA_EXPORT VideoRendererSink {
28941   virtual void PaintSingleFrame(scoped_refptr<VideoFrame> frame,
28942                                 bool repaint_duplicate_frame = false) = 0;
28943
28944+#if defined(OS_OHOS)
28945+  virtual void SetFinishPaintCallback(base::RepeatingClosure callback) = 0;
28946+#endif
28947+
28948   virtual ~VideoRendererSink() {}
28949 };
28950
28951diff --git a/media/blink/video_frame_compositor.cc b/media/blink/video_frame_compositor.cc
28952index 216883fe46..e0f171bf2b 100644
28953--- a/media/blink/video_frame_compositor.cc
28954+++ b/media/blink/video_frame_compositor.cc
28955@@ -242,9 +242,20 @@ void VideoFrameCompositor::PaintSingleFrame(scoped_refptr<VideoFrame> frame,
28956                       repaint_duplicate_frame) &&
28957       IsClientSinkAvailable()) {
28958     client_->DidReceiveFrame();
28959+#if defined(OS_OHOS)
28960+    if (finish_paint_cb_) {
28961+      finish_paint_cb_.Run();
28962+    }
28963+#endif
28964   }
28965 }
28966
28967+#if defined(OS_OHOS)
28968+void VideoFrameCompositor::SetFinishPaintCallback(FinishPaintCallback callback) {
28969+  finish_paint_cb_ = std::move(callback);
28970+}
28971+#endif
28972+
28973 void VideoFrameCompositor::UpdateCurrentFrameIfStale(UpdateType type) {
28974   TRACE_EVENT0("media", "VideoFrameCompositor::UpdateCurrentFrameIfStale");
28975   DCHECK(task_runner_->BelongsToCurrentThread());
28976diff --git a/media/blink/video_frame_compositor.h b/media/blink/video_frame_compositor.h
28977index 8ee417924f..11cb4e90a9 100644
28978--- a/media/blink/video_frame_compositor.h
28979+++ b/media/blink/video_frame_compositor.h
28980@@ -69,6 +69,10 @@ class MEDIA_BLINK_EXPORT VideoFrameCompositor : public VideoRendererSink,
28981
28982   using OnNewFramePresentedCB = base::OnceClosure;
28983
28984+#if defined(OS_OHOS)
28985+  using FinishPaintCallback = base::RepeatingClosure;
28986+#endif
28987+
28988   enum UpdateType {
28989     kNormal,
28990     kBypassClient,  // Disregards whether |client| is driving frame updates, and
28991@@ -119,6 +123,10 @@ class MEDIA_BLINK_EXPORT VideoFrameCompositor : public VideoRendererSink,
28992   void PaintSingleFrame(scoped_refptr<VideoFrame> frame,
28993                         bool repaint_duplicate_frame = false) override;
28994
28995+#if defined(OS_OHOS)
28996+  void SetFinishPaintCallback(FinishPaintCallback callback) override;
28997+#endif
28998+
28999   // If |client_| is not set, |callback_| is set, and |is_background_rendering_|
29000   // is true, it requests a new frame from |callback_|. Uses the elapsed time
29001   // between calls to this function as the render interval, defaulting to 16.6ms
29002@@ -255,6 +263,9 @@ class MEDIA_BLINK_EXPORT VideoFrameCompositor : public VideoRendererSink,
29003
29004   base::TimeTicks last_background_render_;
29005   OnNewProcessedFrameCB new_processed_frame_cb_;
29006+#if defined(OS_OHOS)
29007+  FinishPaintCallback finish_paint_cb_;
29008+#endif
29009   cc::UpdateSubmissionStateCB update_submission_state_callback_;
29010
29011   // Callback used to satisfy video.rVFC requests.
29012diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
29013index 7e0e4ef53c..fe0a375373 100644
29014--- a/media/blink/webmediaplayer_impl.cc
29015+++ b/media/blink/webmediaplayer_impl.cc
29016@@ -732,7 +732,7 @@ void WebMediaPlayerImpl::DoLoad(LoadType load_type,
29017   learning::FeatureDictionary dict;
29018   will_play_helper_.BeginObservation(dict);
29019
29020-#if defined(OS_ANDROID)
29021+#if defined(OS_ANDROID) || defined(OS_OHOS)
29022   // Only allow credentials if the crossorigin attribute is unspecified
29023   // (kCorsModeUnspecified) or "use-credentials" (kCorsModeUseCredentials).
29024   // This value is only used by the MediaPlayerRenderer.
29025@@ -2748,6 +2748,12 @@ std::unique_ptr<Renderer> WebMediaPlayerImpl::CreateRenderer(
29026 }
29027
29028 void WebMediaPlayerImpl::StartPipeline() {
29029+#if defined(OS_OHOS)
29030+  if (load_type_ == kLoadTypeURL) {
29031+    renderer_factory_selector_->SetBaseFactoryType(
29032+        RendererFactoryType::kOHOSMediaPlayer);
29033+  }
29034+#endif
29035   DCHECK(main_task_runner_->BelongsToCurrentThread());
29036
29037   Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb =
29038@@ -2760,9 +2766,12 @@ void WebMediaPlayerImpl::StartPipeline() {
29039                      base::Unretained(compositor_.get()),
29040                      BindToCurrentLoop(base::BindOnce(
29041                          &WebMediaPlayerImpl::OnFirstFrame, weak_this_))));
29042-
29043+#if defined(OS_ANDROID) || defined(OS_OHOS)
29044 #if defined(OS_ANDROID)
29045   if (demuxer_found_hls_ ||
29046+#else
29047+  if (
29048+#endif
29049       renderer_factory_selector_->GetCurrentFactory()
29050               ->GetRequiredMediaResourceType() == MediaResource::Type::URL) {
29051     // MediaPlayerRendererClientFactory is the only factory that a uses
29052@@ -2782,7 +2791,7 @@ void WebMediaPlayerImpl::StartPipeline() {
29053                                 this, false, false);
29054     return;
29055   }
29056-#endif  // defined(OS_ANDROID)
29057+#endif  // defined(OS_ANDROID) || defined(OS_OHOS)
29058
29059   // Figure out which demuxer to use.
29060   if (demuxer_override_) {
29061diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h
29062index 541a7dd70d..cdcde027a0 100644
29063--- a/media/blink/webmediaplayer_impl.h
29064+++ b/media/blink/webmediaplayer_impl.h
29065@@ -844,7 +844,7 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl
29066   // MediaResource::Type::URL for now.
29067   bool using_media_player_renderer_ = false;
29068
29069-#if defined(OS_ANDROID)
29070+#if defined(OS_ANDROID) || defined(OS_OHOS)
29071   // Set during the initial DoLoad() call. Used to determine whether to allow
29072   // credentials or not for MediaPlayerRenderer.
29073   bool allow_media_player_renderer_credentials_ = false;
29074diff --git a/media/media_options.gni b/media/media_options.gni
29075index b3e22d553b..40c6e09c5a 100644
29076--- a/media/media_options.gni
29077+++ b/media/media_options.gni
29078@@ -30,6 +30,12 @@ media_subcomponent_deps = [
29079   "//media/video",
29080 ]
29081
29082+if (is_ohos) {
29083+  media_subcomponent_deps += [
29084+    "//media/base/ohos",
29085+  ]
29086+}
29087+
29088 if (is_fuchsia) {
29089   media_subcomponent_deps += [
29090     "//media/fuchsia/cdm",
29091diff --git a/media/mojo/clients/mojo_renderer_factory.cc b/media/mojo/clients/mojo_renderer_factory.cc
29092index 3b317f7978..da7ef88cfa 100644
29093--- a/media/mojo/clients/mojo_renderer_factory.cc
29094+++ b/media/mojo/clients/mojo_renderer_factory.cc
29095@@ -100,7 +100,9 @@ std::unique_ptr<MojoRenderer> MojoRendererFactory::CreateFlingingRenderer(
29096                                         video_renderer_sink,
29097                                         std::move(renderer_remote));
29098 }
29099+#endif  // defined(OS_ANDROID)
29100
29101+#if defined(OS_ANDROID) || defined(OS_OHOS)
29102 std::unique_ptr<MojoRenderer> MojoRendererFactory::CreateMediaPlayerRenderer(
29103     mojo::PendingReceiver<mojom::MediaPlayerRendererExtension>
29104         renderer_extension_receiver,
29105@@ -120,6 +122,6 @@ std::unique_ptr<MojoRenderer> MojoRendererFactory::CreateMediaPlayerRenderer(
29106                                         video_renderer_sink,
29107                                         std::move(renderer_remote));
29108 }
29109-#endif  // defined(OS_ANDROID)
29110+#endif  // defined(OS_ANDROID) || defined(OS_OHOS)
29111
29112 }  // namespace media
29113diff --git a/media/mojo/clients/mojo_renderer_factory.h b/media/mojo/clients/mojo_renderer_factory.h
29114index bab4060fa2..51d585b05d 100644
29115--- a/media/mojo/clients/mojo_renderer_factory.h
29116+++ b/media/mojo/clients/mojo_renderer_factory.h
29117@@ -65,7 +65,9 @@ class MojoRendererFactory final : public RendererFactory {
29118           client_extenion_ptr,
29119       const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
29120       VideoRendererSink* video_renderer_sink);
29121+#endif  // defined (OS_ANDROID)
29122
29123+#if defined(OS_ANDROID) || defined(OS_OHOS)
29124   std::unique_ptr<MojoRenderer> CreateMediaPlayerRenderer(
29125       mojo::PendingReceiver<mojom::MediaPlayerRendererExtension>
29126           renderer_extension_receiver,
29127@@ -73,7 +75,7 @@ class MojoRendererFactory final : public RendererFactory {
29128           client_extension_remote,
29129       const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
29130       VideoRendererSink* video_renderer_sink);
29131-#endif  // defined (OS_ANDROID)
29132+#endif  // defined(OS_ANDROID) || defined(OS_OHOS)
29133
29134  private:
29135   // InterfaceFactory or InterfaceProvider used to create or connect to remote
29136diff --git a/media/mojo/mojom/BUILD.gn b/media/mojo/mojom/BUILD.gn
29137index def4002603..436a73a2a3 100644
29138--- a/media/mojo/mojom/BUILD.gn
29139+++ b/media/mojo/mojom/BUILD.gn
29140@@ -8,6 +8,10 @@ import("//mojo/public/tools/bindings/mojom.gni")
29141 mojom("mojom") {
29142   generate_java = true
29143
29144+  if (is_android || is_ohos) {
29145+      enabled_features = [ "is_android_or_ohos" ]
29146+  }
29147+
29148   # TODO(crbug.com/676224): Conditionally add source files in this list when we
29149   # support EnabledIf attribute in mojom files.
29150   sources = [
29151diff --git a/media/mojo/mojom/interface_factory.mojom b/media/mojo/mojom/interface_factory.mojom
29152index cf43b8cd01..8222459bb7 100644
29153--- a/media/mojo/mojom/interface_factory.mojom
29154+++ b/media/mojo/mojom/interface_factory.mojom
29155@@ -35,7 +35,7 @@ interface InterfaceFactory {
29156   CreateCastRenderer(mojo_base.mojom.UnguessableToken overlay_plane_id,
29157                      pending_receiver<Renderer> renderer);
29158
29159-  [EnableIf=is_android]
29160+  [EnableIf=is_android_or_ohos]
29161   // Creates a MediaPlayerRenderer (MediaPlayerRendererClientFactory).
29162   // - |renderer_extension| is bound in MediaPlayerRenderer, and receives calls
29163   //   from MediaPlayerRendererClient.
29164diff --git a/media/mojo/mojom/renderer_extensions.mojom b/media/mojo/mojom/renderer_extensions.mojom
29165index bd245a4113..8d8e58cda5 100644
29166--- a/media/mojo/mojom/renderer_extensions.mojom
29167+++ b/media/mojo/mojom/renderer_extensions.mojom
29168@@ -9,6 +9,15 @@ import "mojo/public/mojom/base/time.mojom";
29169 import "mojo/public/mojom/base/unguessable_token.mojom";
29170 import "ui/gfx/geometry/mojom/geometry.mojom";
29171
29172+[EnableIf=is_ohos]
29173+struct OhosSurfaceBufferHandle {
29174+  uint32 buffer_size;
29175+  int32 fd_browser;
29176+  int32 width;
29177+  int32 height;
29178+  handle<platform> buffer_fd;
29179+};
29180+
29181 // Extension of the mojo::RendererClient communication layer for HLS and Android
29182 // software rendering fallback paths.
29183 // This allows the Browser side to call
29184@@ -20,6 +29,8 @@ interface MediaPlayerRendererClientExtension {
29185   // metadata changes.
29186   OnVideoSizeChange(gfx.mojom.Size size);
29187   OnDurationChange(mojo_base.mojom.TimeDelta duration);
29188+  [EnableIf=is_ohos]
29189+  OnFrameUpdate(OhosSurfaceBufferHandle ohosSurfaceBufferHandle);
29190 };
29191
29192 // Extension of the mojo::RendererClient communication layer for HLS and Android
29193@@ -34,6 +45,9 @@ interface MediaPlayerRendererExtension {
29194   // StreamTexture's set-up.
29195   InitiateScopedSurfaceRequest()
29196       => (mojo_base.mojom.UnguessableToken request_token);
29197+
29198+  [EnableIf=is_ohos]
29199+  FinishPaint(int32 fd);
29200 };
29201
29202 // Extension of the mojo::RendererClient communication layer for media flinging,
29203diff --git a/media/mojo/services/interface_factory_impl.cc b/media/mojo/services/interface_factory_impl.cc
29204index 7fa9868bef..c4f401a140 100644
29205--- a/media/mojo/services/interface_factory_impl.cc
29206+++ b/media/mojo/services/interface_factory_impl.cc
29207@@ -119,7 +119,7 @@ void InterfaceFactoryImpl::CreateCastRenderer(
29208 }
29209 #endif
29210
29211-#if defined(OS_ANDROID)
29212+#if defined(OS_ANDROID) || defined(OS_OHOS)
29213 void InterfaceFactoryImpl::CreateMediaPlayerRenderer(
29214     mojo::PendingRemote<mojom::MediaPlayerRendererClientExtension>
29215         client_extension_ptr,
29216@@ -128,7 +128,9 @@ void InterfaceFactoryImpl::CreateMediaPlayerRenderer(
29217         renderer_extension_receiver) {
29218   NOTREACHED();
29219 }
29220+#endif //defined(OS_ANDROID) || defined(OS_OHOS)
29221
29222+#if defined(OS_ANDROID)
29223 void InterfaceFactoryImpl::CreateFlingingRenderer(
29224     const std::string& audio_device_id,
29225     mojo::PendingRemote<mojom::FlingingRendererClientExtension>
29226diff --git a/media/mojo/services/interface_factory_impl.h b/media/mojo/services/interface_factory_impl.h
29227index 8c98cc1e98..6fe4015aa9 100644
29228--- a/media/mojo/services/interface_factory_impl.h
29229+++ b/media/mojo/services/interface_factory_impl.h
29230@@ -56,13 +56,15 @@ class InterfaceFactoryImpl final
29231       const base::UnguessableToken& overlay_plane_id,
29232       mojo::PendingReceiver<mojom::Renderer> receiver) final;
29233 #endif
29234-#if defined(OS_ANDROID)
29235+#if defined(OS_ANDROID) || defined(OS_OHOS)
29236   void CreateMediaPlayerRenderer(
29237       mojo::PendingRemote<mojom::MediaPlayerRendererClientExtension>
29238           client_extension_remote,
29239       mojo::PendingReceiver<mojom::Renderer> receiver,
29240       mojo::PendingReceiver<mojom::MediaPlayerRendererExtension>
29241           renderer_extension_receiver) final;
29242+#endif  // defined(OS_ANDROID) || defined(OS_OHOS)
29243+#if defined(OS_ANDROID)
29244   void CreateFlingingRenderer(
29245       const std::string& presentation_id,
29246       mojo::PendingRemote<mojom::FlingingRendererClientExtension>
29247diff --git a/net/cert/cert_verify_proc_ohos.cc b/net/cert/cert_verify_proc_ohos.cc
29248index 08010f9f4d..b36b8d9022 100644
29249--- a/net/cert/cert_verify_proc_ohos.cc
29250+++ b/net/cert/cert_verify_proc_ohos.cc
29251@@ -1,4 +1,4 @@
29252-// Copyright (c) 2022 The Chromium Authors. All rights reserved.
29253+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
29254 // Use of this source code is governed by a BSD-style license that can be
29255 // found in the LICENSE file.
29256
29257diff --git a/net/cert/cert_verify_proc_ohos.h b/net/cert/cert_verify_proc_ohos.h
29258index 05fb1b6dfe..4680f9d2a3 100644
29259--- a/net/cert/cert_verify_proc_ohos.h
29260+++ b/net/cert/cert_verify_proc_ohos.h
29261@@ -1,4 +1,4 @@
29262-// Copyright (c) 2022 The Chromium Authors. All rights reserved.
29263+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
29264 // Use of this source code is governed by a BSD-style license that can be
29265 // found in the LICENSE file.
29266
29267diff --git a/ohos_nweb/BUILD.gn b/ohos_nweb/BUILD.gn
29268new file mode 100644
29269index 0000000000..c87c2a462f
29270--- /dev/null
29271+++ b/ohos_nweb/BUILD.gn
29272@@ -0,0 +1,190 @@
29273+# Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
29274+# Use of this source code is governed by a BSD-style license that can be
29275+# found in the LICENSE file.
29276+
29277+import("//build/buildflag_header.gni")
29278+import("//build/config/features.gni")
29279+import("//tools/grit/grit_rule.gni")
29280+import("//tools/grit/repack.gni")
29281+import("//build/config/ohos/config.gni")
29282+
29283+component("nweb_hilog") {
29284+  sources = [
29285+    "src/nweb_hilog.h",
29286+  ]
29287+
29288+  libs = [
29289+    "hilog",
29290+  ]
29291+
29292+  include_dirs = ohos_src_includes
29293+  lib_dirs = ohos_libs_dir
29294+}
29295+
29296+#################################################
29297+
29298+config("cef_nweb_config") {
29299+  include_dirs = [
29300+    "include",
29301+    "src",
29302+    "src/cef_delegate",
29303+    "//cef",
29304+    "//cef/include",
29305+    "//cef/libcef/browser/net_service",
29306+  ]
29307+  include_dirs += ohos_src_includes
29308+
29309+  lib_dirs = ohos_libs_dir
29310+  libs = [
29311+    "inputmethod_client.z",
29312+    "ipc_core.z",
29313+    "inputmethod_ability.z",
29314+  ]
29315+
29316+  defines = [
29317+    "USING_CHROMIUM_INCLUDES",
29318+  ]
29319+}
29320+
29321+component("cef_nweb") {
29322+  configs += [
29323+    ":cef_nweb_config",
29324+  ]
29325+
29326+  sources = [
29327+    "src/cef_delegate/nweb_application.h",
29328+    "src/cef_delegate/nweb_application.cc",
29329+    "src/cef_delegate/nweb_handler_delegate.h",
29330+    "src/cef_delegate/nweb_handler_delegate.cc",
29331+    "src/cef_delegate/nweb_delegate.cc",
29332+    "src/cef_delegate/nweb_delegate.h",
29333+    "src/cef_delegate/nweb_render_handler.h",
29334+    "src/cef_delegate/nweb_render_handler.cc",
29335+    "src/cef_delegate/nweb_event_handler.h",
29336+    "src/cef_delegate/nweb_event_handler.cc",
29337+    "src/cef_delegate/nweb_js_dialog_result_impl.cc",
29338+    "src/cef_delegate/nweb_js_dialog_result_impl.h",
29339+    "src/cef_delegate/nweb_geolocation_callback.h",
29340+    "src/cef_delegate/nweb_geolocation_callback.cc",
29341+    "src/cef_delegate/nweb_preference_delegate.h",
29342+    "src/cef_delegate/nweb_preference_delegate.cc",
29343+    "src/cef_delegate/nweb_cookie_manager_delegate.cc",
29344+    "src/cef_delegate/nweb_cookie_manager_delegate.h",
29345+    "src/cef_delegate/nweb_resource_handler.cc",
29346+    "src/cef_delegate/nweb_resource_handler.h",
29347+    "src/cef_delegate/nweb_inputmethod_client.h",
29348+    "src/cef_delegate/nweb_access_request_delegate.cc",
29349+    "src/cef_delegate/nweb_access_request_delegate.h",
29350+  ]
29351+
29352+  deps = [
29353+    "//base:base",
29354+    "//cef:libweb_engine",
29355+    "//cef:libcef_dll_wrapper",
29356+  ]
29357+}
29358+
29359+#################################################
29360+
29361+config("nweb_config") {
29362+  defines = [
29363+    "OHOS_NWEB",
29364+    "OS_OHOS",
29365+    "USE_CEF",
29366+  ]
29367+
29368+  include_dirs = [
29369+    "include",
29370+    "src",
29371+  ]
29372+
29373+  include_dirs += ohos_src_includes
29374+}
29375+
29376+component("nweb_sources") {
29377+  configs += [
29378+    ":nweb_config",
29379+    ":cef_nweb_config",
29380+  ]
29381+
29382+  sources = [
29383+    "include/nweb_access_request.h",
29384+    "include/nweb_console_log.h",
29385+    "include/nweb_cookie_manager.h",
29386+    "include/nweb_geolocation_callback_interface.h",
29387+    "include/nweb_js_dialog_result.h",
29388+    "include/nweb_value_callback.h",
29389+    "include/nweb_preference_delegate.h",
29390+    "include/nweb_handler.h",
29391+    "include/nweb.h",
29392+    "include/nweb_javascript_result_callback.h",
29393+    "include/nweb_value.h",
29394+    "src/nweb_cookie_manager_delegate_interface.h",
29395+    "src/nweb_cookie_manager_impl.cc",
29396+    "src/nweb_cookie_manager_impl.h",
29397+    "src/nweb_delegate_interface.h",
29398+    "src/nweb_delegate_adapter.h",
29399+    "src/nweb_delegate_adapter.cc",
29400+    "src/nweb_hilog.h",
29401+    "src/nweb_impl.cc",
29402+    "src/nweb_impl.h",
29403+    "src/nweb_input_handler.cc",
29404+    "src/nweb_input_handler.h",
29405+    "src/nweb_output_handler.cc",
29406+    "src/nweb_output_handler.h",
29407+    "src/nweb_url_resource_request_impl.h",
29408+    "src/nweb_url_resource_request_impl.cc",
29409+    "src/nweb_url_resource_error_impl.hh",
29410+    "src/nweb_inputmethod_handler.cc",
29411+    "src/nweb_inputmethod_handler.h",
29412+  ]
29413+
29414+  deps = [
29415+    ":nweb_hilog",
29416+    ":cef_nweb",
29417+  ]
29418+}
29419+
29420+shared_library("libnweb_adapter") {
29421+  deps = [
29422+    ":nweb_sources",
29423+  ]
29424+}
29425+
29426+static_library("libohosnweb_static") {
29427+  deps = [
29428+    ":nweb_sources",
29429+  ]
29430+}
29431+
29432+#################################################
29433+
29434+config("ohosnweb_core_config") {
29435+  defines = [
29436+    "OHOS_NWEB",
29437+    "OS_OHOS",
29438+  ]
29439+
29440+  include_dirs = [
29441+    "//cef",
29442+    "//cef/include",
29443+  ]
29444+
29445+  include_dirs += ohos_src_includes
29446+}
29447+
29448+executable("web_render") {
29449+  configs += [
29450+    ":ohosnweb_core_config",
29451+  ]
29452+
29453+  sources = [
29454+    "src/ohos_nweb_main.cc",
29455+  ]
29456+
29457+  deps = [
29458+    ":nweb_hilog",
29459+    "//cef:libweb_engine",
29460+    "//cef:libcef_dll_wrapper",
29461+  ]
29462+}
29463\ No newline at end of file
29464diff --git a/ohos_nweb/README.md b/ohos_nweb/README.md
29465new file mode 100644
29466index 0000000000..2b17ab6e29
29467--- /dev/null
29468+++ b/ohos_nweb/README.md
29469@@ -0,0 +1,30 @@
29470+# 目录内容
29471+
29472+该目录为OHOS系统提供对底层web内核的一层封装。各子目录内容为:
29473+
29474+- `include`:提供暴露给OHOS的接口和相关定义。OHOS侧可通过这些方法加载和使用web内核
29475+- `src`:对web内核的封装实现,其中各子目录中的内容表示对不同web内核的封装,其它部分为一些通用逻辑的实现
29476+  - `cef_delegate`: 对cef接口的封装
29477+
29478+# 编译
29479+
29480+使用nweb根目录下build.sh脚本即可使用默认参数进行编译,并输出到默认的`out/Default`路径下。也可以自定义编译:
29481+
29482+```bash
29483+gn args <output_path> # 自定义编译参数和输出路径
29484+autoninja -C <output_path> libweb_engine libnweb_adapter web_renderer
29485+```
29486+
29487+nweb侧将编译得到:
29488+
29489+  - `libweb_engine.so`,包含整个chromium内核和cef框架实现
29490+  - `libnweb_adapter.so`,包含OHOS与web内核的对接框架在内核侧的实现
29491+  - `web_renderer`二进制,用于起render子进程和网络子进程
29492+
29493+上述三个文件均位于`<output_path>`路径下
29494+
29495+此外,如果通过web_all_build.xml拉取代码,可使用nweb根目录上一级的build.sh脚本进行完整构建,其中会先将nweb侧的库编译出来,并自动将OHOS侧编译所需要的库拷贝到指定位置。
29496+
29497+# 单板运行
29498+
29499+参考OHOS侧README说明
29500\ No newline at end of file
29501diff --git a/ohos_nweb/include/nweb.h b/ohos_nweb/include/nweb.h
29502new file mode 100755
29503index 0000000000..707d3a6fd8
29504--- /dev/null
29505+++ b/ohos_nweb/include/nweb.h
29506@@ -0,0 +1,295 @@
29507+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
29508+// Use of this source code is governed by a BSD-style license that can be
29509+// found in the LICENSE file.
29510+
29511+#ifndef NWEB_H
29512+#define NWEB_H
29513+
29514+#include <list>
29515+#include <map>
29516+#include <memory>
29517+#include <string>
29518+#include "nweb_export.h"
29519+
29520+#include "nweb_download_callback.h"
29521+#include "nweb_javascript_result_callback.h"
29522+#include "nweb_preference.h"
29523+#include "nweb_value_callback.h"
29524+#include "nweb_hit_testresult.h"
29525+
29526+namespace OHOS::NWeb {
29527+class NWebHandler;
29528+
29529+struct OHOS_NWEB_EXPORT NWebInitArgs {
29530+    std::string dump_path = "";
29531+    bool frame_info_dump = false;
29532+    std::list<std::string> web_engine_args_to_add;
29533+    std::list<std::string> web_engine_args_to_delete;
29534+    bool multi_renderer_process = false;
29535+};
29536+
29537+struct OHOS_NWEB_EXPORT NWebCreateInfo {
29538+    /* size info */
29539+    uint32_t width = 0;
29540+    uint32_t height = 0;
29541+
29542+    /* output frame cb */
29543+    std::function<bool(const char*, uint32_t, uint32_t)> output_render_frame =
29544+    nullptr;
29545+
29546+    /* init args */
29547+    NWebInitArgs init_args;
29548+};
29549+
29550+class OHOS_NWEB_EXPORT NWeb : public std::enable_shared_from_this<NWeb> {
29551+    public:
29552+    NWeb() = default;
29553+    virtual ~NWeb() = default;
29554+
29555+    virtual void Resize(uint32_t width, uint32_t height) = 0;
29556+
29557+    /* lifecycle interface */
29558+    virtual void OnPause() const = 0;
29559+    virtual void OnContinue() const = 0;
29560+    virtual void OnDestroy() = 0;
29561+
29562+    /* event interface */
29563+    virtual void OnTouchPress(int32_t id, double x, double y) = 0;
29564+    virtual void OnTouchRelease(int32_t id, double x = 0, double y = 0) = 0;
29565+    virtual void OnTouchMove(int32_t id, double x, double y) = 0;
29566+    virtual void OnTouchCancel() = 0;
29567+    virtual void OnNavigateBack() = 0;
29568+
29569+    /**
29570+     * Loads the given URL.
29571+     *
29572+     * @param url String: the URL of the resource to load This value cannot be
29573+     * null.
29574+     *
29575+     * @return title string for the current page.
29576+     */
29577+    virtual void Load(const std::string& url) const = 0;
29578+    /**
29579+     * Gets whether this NWeb has a back history item.
29580+     *
29581+     * @return true if this NWeb has a back history item
29582+     */
29583+    virtual bool IsNavigatebackwardAllowed() const = 0;
29584+    /**
29585+     * Gets whether this NWeb has a forward history item.
29586+     *
29587+     * @return true if this NWeb has a forward history item
29588+     */
29589+    virtual bool IsNavigateForwardAllowed() const = 0;
29590+    /**
29591+     * Gets whether this NWeb has a back or forward history item for number of
29592+     * steps.
29593+     *
29594+     * @param numSteps int: the negative or positive number of steps to move the
29595+     * history
29596+     * @return true if this NWeb has a forward history item
29597+     */
29598+    virtual bool CanNavigateBackOrForward(int numSteps) const = 0;
29599+    /**
29600+     * Goes back in the history of this NWeb.
29601+     *
29602+     */
29603+    virtual void NavigateBack() const = 0;
29604+    /**
29605+     * Goes forward in the history of this NWeb.
29606+     *
29607+     */
29608+    virtual void NavigateForward() const = 0;
29609+    /**
29610+     * Reloads the current URL.
29611+     *
29612+     */
29613+    virtual void Reload() const = 0;
29614+    /**
29615+     * Performs a zoom operation in this NWeb.
29616+     *
29617+     * @param zoomFactor float: the zoom factor to apply. The zoom factor will be
29618+     * clamped to the NWeb's zoom limits. This value must be in the range 0.01
29619+     * to 100.0 inclusive.
29620+     *
29621+     */
29622+    virtual void Zoom(float zoomFactor) const = 0;
29623+
29624+    /**
29625+     * Stops the current load.
29626+     *
29627+     * @param code string: javascript code
29628+     */
29629+    virtual void Stop() const = 0;
29630+    /**
29631+     * ExecuteJavaScript
29632+     *
29633+     */
29634+    virtual void ExecuteJavaScript(const std::string& code) const = 0;
29635+    /**
29636+     * ExecuteJavaScript plus
29637+     *
29638+     * @param code string: javascript code
29639+     *
29640+     * @param callback NWebValueCallback: javascript running result
29641+     *
29642+     */
29643+    virtual void ExecuteJavaScript(
29644+            const std::string& code,
29645+            std::shared_ptr<NWebValueCallback<std::string>> callback) const = 0;
29646+    /**
29647+     * Gets the NWebPreference object used to control the settings for this
29648+     * NWeb.
29649+     *
29650+     * @return a NWebPreference object that can be used to control this NWeb's
29651+     * settings This value cannot be null.
29652+     */
29653+    virtual const std::shared_ptr<NWebPreference> GetPreference() const = 0;
29654+    /**
29655+     * Gets the last hit test result.
29656+     *
29657+     * @return the last HitTestResult
29658+     */
29659+     virtual const HitTestResult GetHitTestResult() const = 0;
29660+
29661+    /**
29662+     * Sets the background color for this view.
29663+     *
29664+     * @param color int: the color of the background
29665+     *
29666+     */
29667+    virtual void PutBackgroundColor(int color) const = 0;
29668+    /**
29669+     * Sets the NWebDownloadCallback that will receive download event.
29670+     * This will replace the current handler.
29671+     *
29672+     * @param downloadListener NWebDownloadCallback:
29673+     *
29674+     */
29675+    virtual void PutDownloadCallback(
29676+            std::shared_ptr<NWebDownloadCallback> downloadListener) = 0;
29677+    /**
29678+     * Sets the NWebHandler that will receive various notifications and
29679+     * requests. This will replace the current handler.
29680+     *
29681+     * @param client NWebHandler: an implementation of NWebHandler This value
29682+     * cannot be null.
29683+     *
29684+     */
29685+    virtual void SetNWebHandler(std::shared_ptr<NWebHandler> handler) = 0;
29686+    /**
29687+     * Gets the NWebHandler.
29688+     *
29689+     * @return Gets the NWebHandler.
29690+     */
29691+    virtual const std::shared_ptr<NWebHandler> GetNWebHandler() const = 0;
29692+    /**
29693+     * Gets the title for the current page.
29694+     *
29695+     * @return title string for the current page.
29696+     */
29697+    virtual std::string Title() = 0;
29698+    /**
29699+     * Gets the progress for the current page.
29700+     *
29701+     * @return progress for the current page.
29702+     */
29703+    virtual int PageLoadProgress() = 0;
29704+
29705+    /**
29706+     * Gets the height of the HTML content.
29707+     *
29708+     * @return the height of the HTML content.
29709+     */
29710+    virtual int ContentHeight() = 0;
29711+
29712+    /**
29713+     * Gets the current scale of this NWeb.
29714+     *
29715+     * @return the current scale
29716+     */
29717+    virtual float Scale() = 0;
29718+
29719+    /**
29720+     * Loads the given URL with additional HTTP headers, specified as a map
29721+     * from name to value. Note that if this map contains any of the headers that
29722+     * are set by default by this NWeb, such as those controlling caching,
29723+     * accept types or the User-Agent, their values may be overridden by this
29724+     * NWeb's defaults.
29725+     *
29726+     * @param url  String: the URL of the resource to load This value cannot be
29727+     * null.
29728+     *
29729+     * @param additionalHttpHeaders additionalHttpHeaders
29730+     */
29731+    virtual void Load(
29732+            std::string& url,
29733+            std::map<std::string, std::string> additionalHttpHeaders) = 0;
29734+
29735+    /**
29736+     * Loads the given data into this NWeb, using baseUrl as the base URL for
29737+     * the content. The base URL is used both to resolve relative URLs and when
29738+     * applying JavaScript's same origin policy. The historyUrl is used for the
29739+     * history entry.
29740+     *
29741+     * @param baseUrl  String: the URL to use as the page's base URL. If null
29742+     * defaults to 'about:blank'. This value may be null.
29743+     * @param data String: the URL to use as the page's base URL. If null defaults
29744+     * to 'about:blank'. This value may be null.
29745+     * @param mimeType String: the MIME type of the data, e.g. 'text/html'. This
29746+     * value may be null.
29747+     * @param encoding String: the encoding of the data This value may be null.
29748+     * @param historyUrl String: the URL to use as the history entry. If null
29749+     * defaults to 'about:blank'. If non-null, this must be a valid URL. This
29750+     * value may be null.
29751+     */
29752+    virtual void LoadWithDataAndBaseUrl(const std::string& baseUrl,
29753+                                        const std::string& data,
29754+                                        const std::string& mimeType,
29755+                                        const std::string& encoding,
29756+                                        const std::string& historyUrl) = 0;
29757+
29758+    /**
29759+     * Loads the given data into this NWeb.
29760+     *
29761+     * @param data String: the URL to use as the page's base URL. If null defaults
29762+     * to 'about:blank'. This value may be null.
29763+     * @param mimeType String: the MIME type of the data, e.g. 'text/html'. This
29764+     * value may be null.
29765+     * @param encoding String: the encoding of the data This value may be null.
29766+     */
29767+    virtual void LoadWithData(const std::string& data,
29768+                              const std::string& mimeType,
29769+                              const std::string& encoding) = 0;
29770+
29771+    /**
29772+     * RegisterArkJSfunction
29773+     *
29774+     * @param object_name  String: objector name
29775+     * @param method_list vector<String>: vector list ,method list
29776+     */
29777+    virtual void RegisterArkJSfunction(
29778+            const std::string& object_name,
29779+            const std::vector<std::string>& method_list) = 0;
29780+
29781+    /**
29782+     * UnregisterArkJSfunction
29783+     *
29784+     * @param object_name  String: objector name
29785+     * @param method_list vector<String>: vector list ,method list
29786+     */
29787+    virtual void UnregisterArkJSfunction(
29788+            const std::string& object_name,
29789+            const std::vector<std::string>& method_list) = 0;
29790+
29791+    /**
29792+     * SetNWebJavaScriptResultCallBack
29793+     *
29794+     * @param callback  NWebJavaScriptResultCallBack: callback client
29795+     */
29796+    virtual void SetNWebJavaScriptResultCallBack(
29797+            std::shared_ptr<NWebJavaScriptResultCallBack> callback) = 0;
29798+};
29799+}  // namespace OHOS::NWeb
29800+
29801+#endif
29802diff --git a/ohos_nweb/include/nweb_access_request.h b/ohos_nweb/include/nweb_access_request.h
29803new file mode 100644
29804index 0000000000..853c91ec86
29805--- /dev/null
29806+++ b/ohos_nweb/include/nweb_access_request.h
29807@@ -0,0 +1,58 @@
29808+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
29809+// Use of this source code is governed by a BSD-style license that can be
29810+// found in the LICENSE file.
29811+
29812+#ifndef NWEB_ACCESS_REQUEST_H
29813+#define NWEB_ACCESS_REQUEST_H
29814+
29815+#include <string>
29816+
29817+#include "nweb_export.h"
29818+
29819+namespace OHOS::NWeb {
29820+class OHOS_NWEB_EXPORT NWebAccessRequest {
29821+ public:
29822+  NWebAccessRequest() = default;
29823+
29824+  virtual ~NWebAccessRequest() = default;
29825+
29826+  enum Resources {
29827+    GEOLOCATION = 1 << 0,
29828+    VIDEO_CAPTURE = 1 << 1,
29829+    AUDIO_CAPTURE = 1 << 2,
29830+    PROTECTED_MEDIA_ID = 1 << 3,
29831+    MIDI_SYSEX = 1 << 4,
29832+  };
29833+
29834+  /**
29835+   * Get the origin of the web page which is trying to access the resource.
29836+   *
29837+   * @return the origin of the web page which is trying to access the resource.
29838+   */
29839+  virtual std::string Origin() = 0;
29840+
29841+  /**
29842+   * Get the resource id the web page is trying to access.
29843+   *
29844+   * @return the resource id the web page is trying to access.
29845+   */
29846+  virtual int ResourceAcessId() = 0;
29847+
29848+  /**
29849+   * Agree the origin to access the given resources.
29850+   * The granted access is only valid for this WebView.
29851+   *
29852+   * @param resourceId id of the resource agreed to be accessed by origin. It
29853+   * must be equal to requested resource id returned by {@link
29854+   * #GetResourceAcessId()}.
29855+   */
29856+  virtual void Agree(int resourceId) = 0;
29857+
29858+  /**
29859+   * Refuse the request.
29860+   */
29861+  virtual void Refuse() = 0;
29862+};
29863+}  // namespace OHOS::NWeb
29864+
29865+#endif  // NWEB_ACCESS_REQUEST_H
29866\ No newline at end of file
29867diff --git a/ohos_nweb/include/nweb_console_log.h b/ohos_nweb/include/nweb_console_log.h
29868new file mode 100644
29869index 0000000000..2089061420
29870--- /dev/null
29871+++ b/ohos_nweb/include/nweb_console_log.h
29872@@ -0,0 +1,79 @@
29873+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
29874+// Use of this source code is governed by a BSD-style license that can be
29875+// found in the LICENSE file.
29876+
29877+#ifndef NWEB_CONSOLE_LOG_H
29878+#define NWEB_CONSOLE_LOG_H
29879+
29880+#include <memory>
29881+#include <string>
29882+
29883+#include "nweb_export.h"
29884+
29885+namespace OHOS::NWeb {
29886+class OHOS_NWEB_EXPORT NWebConsoleLog {
29887+public:
29888+    enum NWebConsoleLogLevel {
29889+        DEBUG = 1,
29890+        INFO,
29891+        WARNING,
29892+        ERROR,
29893+        UNKNOWN
29894+    };
29895+
29896+    NWebConsoleLog(int line_number,
29897+                   std::string message,
29898+                   NWebConsoleLogLevel log_level,
29899+                   std::string sourceId)
29900+        : line_number_(line_number),
29901+          log_(message),
29902+          log_level_(log_level),
29903+          sourceId_(sourceId) {}
29904+
29905+    ~NWebConsoleLog() = default;
29906+
29907+    /**
29908+     * @brief Get console log line number
29909+     *
29910+     * @retval line number
29911+     */
29912+    int LineNumer() const {
29913+        return line_number_;
29914+    }
29915+
29916+    /**
29917+     * @brief Get console log message
29918+     *
29919+     * @retval message
29920+     */
29921+    const std::string& Log() const {
29922+        return log_;
29923+    }
29924+
29925+    /**
29926+     * @brief Get console log message level
29927+     *
29928+     * @retval message level
29929+     */
29930+    NWebConsoleLogLevel LogLevel() const {
29931+        return log_level_;
29932+    }
29933+
29934+    /**
29935+     * @brief Get console log source id
29936+     *
29937+     * @retval source id
29938+     */
29939+    const std::string& SourceId() const {
29940+        return sourceId_;
29941+    }
29942+
29943+private:
29944+    int line_number_;
29945+    std::string log_;
29946+    NWebConsoleLogLevel log_level_;
29947+    std::string sourceId_;
29948+};
29949+}
29950+
29951+#endif
29952\ No newline at end of file
29953diff --git a/ohos_nweb/include/nweb_cookie_manager.h b/ohos_nweb/include/nweb_cookie_manager.h
29954new file mode 100644
29955index 0000000000..11800d8579
29956--- /dev/null
29957+++ b/ohos_nweb/include/nweb_cookie_manager.h
29958@@ -0,0 +1,108 @@
29959+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
29960+// Use of this source code is governed by a BSD-style license that can be
29961+// found in the LICENSE file.
29962+
29963+#ifndef NWEB_COOKIE_MANAGER_H
29964+#define NWEB_COOKIE_MANAGER_H
29965+
29966+#include <memory>
29967+#include <string>
29968+
29969+#include "nweb_export.h"
29970+#include "nweb_value_callback.h"
29971+
29972+namespace OHOS::NWeb {
29973+class OHOS_NWEB_EXPORT NWebCookieManager {
29974+public:
29975+    NWebCookieManager() = default;
29976+
29977+    virtual ~NWebCookieManager() = default;
29978+
29979+    /**
29980+     * @brief Gets the singleton NWebCookieManager instance.
29981+     *
29982+     * @return the singleton NWebCookieManager instance.
29983+     */
29984+    static NWebCookieManager* GetInstance();
29985+
29986+    /**
29987+     * @brief Get whether the instance can send and accept cookies.
29988+     *
29989+     * @return true if the instance send and accept cookies.
29990+     */
29991+    virtual bool IsAcceptCookieAllowed() const = 0;
29992+
29993+    /**
29994+     * @brief Sets whether the instance should send and accept cookies.
29995+     * By default this is set to true and the nweb accepts cookies.
29996+     *
29997+     * @param accept whether the instance should send and accept cookies.
29998+     */
29999+    virtual void PutAcceptCookieEnabled(bool accept) = 0;
30000+
30001+    /**
30002+     * @brief Get whether instances can send and accept cookies for file scheme URLs.
30003+     *
30004+     * @return true if instances send and accept cookies for file scheme URLs.
30005+     */
30006+    virtual bool IsFileURLSchemeCookiesAllowed() const = 0;
30007+
30008+    /**
30009+     * @brief Sets whether the instance should send and accept cookies for file scheme URLs.
30010+     *
30011+     * @param allow whether the instance should send and accept cookies for file scheme URLs.
30012+     */
30013+    virtual void PutAcceptFileURLSchemeCookiesEnabled(bool allow) = 0;
30014+
30015+    /**
30016+     * @brief Gets all the cookies for the given URL.
30017+     *
30018+     * @param url the URL for which the cookies are requested.
30019+     * @param callback a callback which is executed when the cookies have been gotten.
30020+     */
30021+    virtual void ReturnCookie(const std::string &url,
30022+                              std::shared_ptr<NWebValueCallback<std::string>> callback) = 0;
30023+
30024+    /**
30025+     * @brief GSets a single cookie (key-value pair) for the given URL.
30026+     *
30027+     * @param url the URL for which the cookie is to be set.
30028+     * @param value the cookie as a string, using the format of the 'Set-Cookie' HTTP response header.
30029+     * @param callback a callback to be executed when the cookie has been set.
30030+     */
30031+    virtual void SetCookie(const std::string &url,
30032+                           const std::string &value,
30033+                           std::shared_ptr<NWebValueCallback<bool>> callback) = 0;
30034+
30035+    /**
30036+     * @brief Gets whether there are stored cookies.
30037+     *
30038+     * @param callback a callback to be executed when the cookie has checked.
30039+     */
30040+    virtual void ExistCookies(std::shared_ptr<NWebValueCallback<bool>> callback) = 0;
30041+
30042+    /**
30043+     * @brief Ensures all cookies currently accessible through the ReturnCookie API are written to
30044+     * persistent storage.
30045+     *
30046+     * @param callback a callback to be executed when cookies has Stored.
30047+     */
30048+    virtual void Store(std::shared_ptr<NWebValueCallback<bool>> callback) = 0;
30049+
30050+    /**
30051+     * @brief Removes all session cookies, which are cookies without an expiration date.
30052+     *
30053+     * @param callback a callback to be executed when all session cookies has removed.
30054+     */
30055+    virtual void DeleteSessionCookies(std::shared_ptr<NWebValueCallback<bool>> callback) = 0;
30056+
30057+    /**
30058+     * @brief Removes all cookies.
30059+     *
30060+     * @param callback a callback to be executed when all cookies has removed.
30061+     */
30062+    virtual void DeleteCookieEntirely(std::shared_ptr<NWebValueCallback<bool>> callback) = 0;
30063+};
30064+}
30065+
30066+#endif  // NWebCookieManager
30067\ No newline at end of file
30068diff --git a/ohos_nweb/include/nweb_download_callback.h b/ohos_nweb/include/nweb_download_callback.h
30069new file mode 100644
30070index 0000000000..5ce16d93b4
30071--- /dev/null
30072+++ b/ohos_nweb/include/nweb_download_callback.h
30073@@ -0,0 +1,35 @@
30074+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
30075+// Use of this source code is governed by a BSD-style license that can be
30076+// found in the LICENSE file.
30077+
30078+#ifndef NWEB_DOWNLOAD_CALLBACK_H
30079+#define NWEB_DOWNLOAD_CALLBACK_H
30080+
30081+#include <string>
30082+
30083+#include "nweb_export.h"
30084+
30085+namespace OHOS::NWeb {
30086+class OHOS_NWEB_EXPORT NWebDownloadCallback {
30087+public:
30088+    NWebDownloadCallback() = default;
30089+
30090+    virtual ~NWebDownloadCallback() = default;
30091+    /**
30092+     * @brief Notify the host application that a file should be downloaded
30093+     *
30094+     * @param url The full url to the content that should be downloaded.
30095+     * @param userAgent The user agent to be used for the download.
30096+     * @param contentDisposition Content-disposition http header, if present.
30097+     * @param mimetype The mimetype of the content reported by the server.
30098+     * @param contentLength The file size reported by the server.
30099+     */
30100+    virtual void OnDownloadStart(const std::string& url,
30101+                                 const std::string& userAgent,
30102+                                 const std::string& contentDisposition,
30103+                                 const std::string& mimetype,
30104+                                 long contentLength) = 0;
30105+};
30106+}  // namespace OHOS::NWeb
30107+
30108+#endif  // NWEB_DOWNLOAD_CALLBACK_H
30109\ No newline at end of file
30110diff --git a/ohos_nweb/include/nweb_export.h b/ohos_nweb/include/nweb_export.h
30111new file mode 100644
30112index 0000000000..e4ebd385d7
30113--- /dev/null
30114+++ b/ohos_nweb/include/nweb_export.h
30115@@ -0,0 +1,18 @@
30116+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
30117+// Use of this source code is governed by a BSD-style license that can be
30118+// found in the LICENSE file.
30119+
30120+#ifndef OHOS_NWEB_EXPORT_H
30121+#define OHOS_NWEB_EXPORT_H
30122+
30123+#if defined(OHOS_NWEB)
30124+
30125+#define OHOS_NWEB_EXPORT __attribute__((visibility("default")))
30126+
30127+#else
30128+
30129+#define OHOS_NWEB_EXPORT
30130+
30131+#endif
30132+
30133+#endif  // OHOS_NWEB_EXPORT_H
30134diff --git a/ohos_nweb/include/nweb_geolocation_callback_interface.h b/ohos_nweb/include/nweb_geolocation_callback_interface.h
30135new file mode 100644
30136index 0000000000..4a95f8e8db
30137--- /dev/null
30138+++ b/ohos_nweb/include/nweb_geolocation_callback_interface.h
30139@@ -0,0 +1,32 @@
30140+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
30141+// Use of this source code is governed by a BSD-style license that can be
30142+// found in the LICENSE file.
30143+
30144+#ifndef NWEB_GEOLOCATION_CALLBACK_INTERFACE_H
30145+#define NWEB_GEOLOCATION_CALLBACK_INTERFACE_H
30146+
30147+#include <string>
30148+
30149+#include "nweb_export.h"
30150+
30151+namespace OHOS::NWeb {
30152+class OHOS_NWEB_EXPORT NWebGeolocationCallbackInterface {
30153+ public:
30154+  NWebGeolocationCallbackInterface() = default;
30155+
30156+  virtual ~NWebGeolocationCallbackInterface() = default;
30157+  /**
30158+   * @brief Report the geolocation permission status from usrs.
30159+   *
30160+   * @param origin The origin that ask for the geolocation permission.
30161+   * @param allow The geolocation permission status.
30162+   * @param retain Whether to allow the geolocation permission status to be
30163+   * saved to the system.
30164+   */
30165+  virtual void GeolocationCallbackInvoke(const std::string& origin,
30166+                                         bool allow,
30167+                                         bool retain) = 0;
30168+};
30169+}  // namespace OHOS::NWeb
30170+
30171+#endif  // NWEB_GEOLOCATION_CALLBACK_INTERFACE_H
30172diff --git a/ohos_nweb/include/nweb_handler.h b/ohos_nweb/include/nweb_handler.h
30173new file mode 100644
30174index 0000000000..af68a9a3d1
30175--- /dev/null
30176+++ b/ohos_nweb/include/nweb_handler.h
30177@@ -0,0 +1,311 @@
30178+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
30179+// Use of this source code is governed by a BSD-style license that can be
30180+// found in the LICENSE file.
30181+
30182+#ifndef NWEB_HANDLER_H
30183+#define NWEB_HANDLER_H
30184+
30185+#include <memory>
30186+#include <mutex>
30187+#include <string>
30188+#include <vector>
30189+
30190+#include "nweb_access_request.h"
30191+#include "nweb.h"
30192+#include "nweb_console_log.h"
30193+#include "nweb_geolocation_callback_interface.h"
30194+#include "nweb_js_dialog_result.h"
30195+#include "nweb_url_resource_error.h"
30196+#include "nweb_url_resource_request.h"
30197+#include "nweb_url_resource_response.h"
30198+
30199+namespace OHOS::NWeb {
30200+/**
30201+ * @brief Describes how pixel bits encoder color data.
30202+ */
30203+enum class ImageColorType {
30204+  // Unknown color type.
30205+  COLOR_TYPE_UNKNOWN = -1,
30206+
30207+  // RGBA with 8 bits per pixel (32bits total).
30208+  COLOR_TYPE_RGBA_8888 = 0,
30209+
30210+  // BGRA with 8 bits per pixel (32bits total).
30211+  COLOR_TYPE_BGRA_8888 = 1,
30212+};
30213+
30214+/**
30215+ * @brief Describes how to interpret the alpha value of a pixel.
30216+ */
30217+enum class ImageAlphaType {
30218+  // Unknown alpha type.
30219+  ALPHA_TYPE_UNKNOWN = -1,
30220+
30221+  // No transparency. The alpha component is ignored.
30222+  ALPHA_TYPE_OPAQUE = 0,
30223+
30224+  // Transparency with pre-multiplied alpha component.
30225+  ALPHA_TYPE_PREMULTIPLIED = 1,
30226+
30227+  // Transparency with post-multiplied alpha component.
30228+  ALPHA_TYPE_POSTMULTIPLIED = 2,
30229+};
30230+
30231+class OHOS_NWEB_EXPORT NWebHandler {
30232+ public:
30233+  NWebHandler() = default;
30234+
30235+  virtual ~NWebHandler() = default;
30236+
30237+  virtual void SetNWeb(std::shared_ptr<NWeb> nweb) {}
30238+
30239+  virtual void OnProxyDied() {}
30240+
30241+  virtual void OnRouterPush(const std::string& param) {}
30242+
30243+  virtual void OnMessage(const std::string& param) {}
30244+
30245+  /**
30246+   * @brief Notify the SDK that a web site has finished loading. This method is
30247+   * called only for main frame.
30248+   *
30249+   * @param httpStatusCode The status code for the http request.
30250+   * @param url The url of the web site.
30251+   */
30252+  virtual void OnPageLoadEnd(int httpStatusCode, const std::string& url) {}
30253+
30254+  /**
30255+   * @brief Notify the SDK that a web site has started loading. This method is
30256+   * called once for each main frame load.
30257+   *
30258+   * @param url The url to be loaded.
30259+   */
30260+  virtual void OnPageLoadBegin(const std::string& url) {}
30261+
30262+  /**
30263+   * @brief Report a load error to the SDK.
30264+   *
30265+   * @param errorCode The error code.
30266+   * @param description The error description.
30267+   * @param failingUrl The failed url.
30268+   */
30269+  virtual void OnPageLoadError(int errorCode,
30270+                               const std::string& description,
30271+                               const std::string& failingUrl) {}
30272+
30273+  /**
30274+   * @brief Give the SDK a chance to decide wheather to continue loading the
30275+   * url.
30276+   *
30277+   * @param url The url to be loaded.
30278+   * @return true to cancel the loading, false to continue the loading.
30279+   */
30280+  virtual bool OnHandleInterceptUrlLoading(const std::string& url) {
30281+    return false;
30282+  }
30283+
30284+  /**
30285+   * @brief Notify the SDK that the nweb will load the resource specified by
30286+   * the given url.
30287+   *
30288+   * @param url The url of the resource.
30289+   */
30290+  virtual void OnResource(const std::string& url) {}
30291+
30292+  /**
30293+   * @brief Notify the SDK of the changed document title.
30294+   *
30295+   * @param title The document title.
30296+   */
30297+  virtual void OnPageTitle(const std::string& title) {}
30298+
30299+  /**
30300+   * @brief Notify the SDK the current progress of loading a web site.
30301+   *
30302+   * @param newProgress Loading progress, an integer between 0 and 100.
30303+   */
30304+  virtual void OnLoadingProgress(int newProgress) {}
30305+
30306+  /**
30307+   * @brief Request display and focus for a new nweb.
30308+   *
30309+   */
30310+  virtual void OnFocus() {}
30311+
30312+  /**
30313+   * @brief Obtains a list of all visited history items, used for link coloring
30314+   *
30315+   * @retval visited history
30316+   */
30317+  virtual const std::vector<std::string> VisitedUrlHistory() {
30318+    return std::vector<std::string>();
30319+  }
30320+
30321+  /**
30322+   * @brief Notify the host application of a resource request and allow the
30323+   * application to return the data.
30324+   *
30325+   * @param request the resource response's MIME type, for example {
30326+   * "text/html"}.
30327+   *
30328+   * @retval if NWebUrlResourceResponse is null ,No interception.
30329+   */
30330+  virtual std::shared_ptr<NWebUrlResourceResponse> OnHandleInterceptRequest(
30331+      std::shared_ptr<NWebUrlResourceRequest> request) {
30332+    return nullptr;
30333+  }
30334+
30335+  /**
30336+   * @brief Report web resource loading error to the SDK. These errors usually
30337+   * indicate inability to connect to the server.
30338+   *
30339+   * @param request The request information.
30340+   * @param error The error information.
30341+   */
30342+  virtual void OnResourceLoadError(
30343+      std::shared_ptr<NWebUrlResourceRequest> request,
30344+      std::shared_ptr<NWebUrlResourceError> error) {}
30345+
30346+  /**
30347+   * @brief Notify the SDK that an HTTP error has been received from the server
30348+   * while loading a resource.
30349+   *
30350+   * @param request The request information.
30351+   * @param errorResponse The error occurred.
30352+   */
30353+  virtual void OnHttpError(
30354+      std::shared_ptr<NWebUrlResourceRequest> request,
30355+      std::shared_ptr<NWebUrlResourceResponse> errorResponse) {}
30356+
30357+  /**
30358+   * @brief Notify the SDK of a new favicon for the current web site.
30359+   *
30360+   * @param data The raw image data for the icon.
30361+   * @param width The width of the icon in pixel.
30362+   * @param height The height of the icon in pixel.
30363+   * @param color_type The color data encoding type.
30364+   * @param alpha_type The alpha value of any pixel.
30365+   */
30366+  virtual void OnPageIcon(const void* data,
30367+                          size_t width,
30368+                          size_t height,
30369+                          ImageColorType color_type,
30370+                          ImageAlphaType alpha_type) {}
30371+
30372+  /**
30373+   * @brief Notify the SDK of the url for an touch icon.
30374+   *
30375+   * @param icon_url The icon url.
30376+   * @param precomposed The touch icon type.
30377+   */
30378+  virtual void OnDesktopIconUrl(const std::string& icon_url, bool precomposed) {
30379+  }
30380+
30381+  /**
30382+   * @brief Report a JavaScript console message to the host application.
30383+   *
30384+   * @param message Details of the console message.
30385+   * @return Return true to stop the message from being output to the console.
30386+   */
30387+  virtual bool OnConsoleLog(const NWebConsoleLog& message) { return false; }
30388+
30389+  /**
30390+   * @brief Show prompt to ask for the geolocation permission.
30391+   *
30392+   * @param origin  String: the origin of the resource to get geolocation
30393+   * @param callback  GeolocationCallbackInterface: callback to report
30394+   * geolocation
30395+   */
30396+  virtual void OnGeolocationShow(const std::string& origin,
30397+                                 NWebGeolocationCallbackInterface* callback) {}
30398+
30399+  /**
30400+   * @brief Notify the host application that the web page wants to display a
30401+   * JavaScript alert() dialog.
30402+   *
30403+   * @param url  String: The url of the page requesting the dialog.
30404+   * @param message  String: The message of the dialog.
30405+   * @param result  std::shared_ptr<NWebJSDialogResult>: A NWebJSDialogResult to
30406+   * confirm that the user closed the window.
30407+   * @return To show a custom dialog, the app should return true.
30408+   */
30409+  virtual bool OnAlertDialogByJS(const std::string& url,
30410+                                 const std::string& message,
30411+                                 std::shared_ptr<NWebJSDialogResult> result) {
30412+    return false;
30413+  }
30414+
30415+  /**
30416+   * @brief Notify the host application that the web page wants to handle
30417+   * JavaScript onbeforeunload.
30418+   *
30419+   * @param url  String: The url of the page requesting.
30420+   * @param message  String: The message of the dialog.
30421+   * @param result  std::shared_ptr<NWebJSDialogResult>: A NWebJSDialogResult to
30422+   * confirm that the user closed the window.
30423+   * @return To show a custom dialog, the app should return true.
30424+   */
30425+  virtual bool OnBeforeUnloadByJS(const std::string& url,
30426+                                  const std::string& message,
30427+                                  std::shared_ptr<NWebJSDialogResult> result) {
30428+    return false;
30429+  }
30430+
30431+  /**
30432+   * @brief Notify the host application that the web page wants to display a
30433+   * JavaScript prompt() dialog.
30434+   *
30435+   * @param url  String: The url of the page requesting the dialog.
30436+   * @param message  String: The message of the dialog.
30437+   * @param defaultValue  String: The default value of the input message.
30438+   * @param result  std::shared_ptr<NWebJSDialogResult>: A NWebJSDialogResult to
30439+   * confirm that the user closed the window.
30440+   * @return To show a custom dialog, the app should return true.
30441+   */
30442+  virtual bool OnPromptDialogByJs(const std::string& url,
30443+                                  const std::string& message,
30444+                                  const std::string& defaultValue,
30445+                                  std::shared_ptr<NWebJSDialogResult> result) {
30446+    return false;
30447+  }
30448+
30449+  /**
30450+   * @brief Notify the host application that the web page wants to display a
30451+   * JavaScript Confirm() dialog.
30452+   *
30453+   * @param url  String: The url of the page requesting the dialog.
30454+   * @param message  String: The message of the dialog.
30455+   * @param result  std::shared_ptr<NWebJSDialogResult>: A NWebJSDialogResult to
30456+   * confirm that the user closed the window.
30457+   * @return To show a custom dialog, the app should return true.
30458+   */
30459+  virtual bool OnConfirmDialogByJS(const std::string& url,
30460+                                   const std::string& message,
30461+                                   std::shared_ptr<NWebJSDialogResult> result) {
30462+    return false;
30463+  }
30464+
30465+  /**
30466+   * @brief Hide prompt to ask for the geolocation permission.
30467+   */
30468+  virtual void OnGeolocationHide() {}
30469+
30470+  /**
30471+   * @brief
30472+   *
30473+   * @param request  String:
30474+   */
30475+  virtual void OnPermissionRequest(
30476+      std::shared_ptr<NWebAccessRequest> request) {}
30477+
30478+  /**
30479+   * @brief
30480+   *
30481+   * @param request  String:
30482+   */
30483+  virtual void OnPermissionRequestCanceled(
30484+      std::shared_ptr<NWebAccessRequest> request) {}
30485+};
30486+}  // namespace OHOS::NWeb
30487+
30488+#endif  // NWEB_HANDLER_H
30489diff --git a/ohos_nweb/include/nweb_hit_testresult.h b/ohos_nweb/include/nweb_hit_testresult.h
30490new file mode 100755
30491index 0000000000..4eb0d0915b
30492--- /dev/null
30493+++ b/ohos_nweb/include/nweb_hit_testresult.h
30494@@ -0,0 +1,82 @@
30495+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
30496+// Use of this source code is governed by a BSD-style license that can be
30497+// found in the LICENSE file.
30498+
30499+#ifndef WEB_HIT_TESTRESULT_H
30500+#define WEB_HIT_TESTRESULT_H
30501+
30502+#include <string>
30503+
30504+#include "nweb_export.h"
30505+
30506+namespace OHOS::NWeb {
30507+class OHOS_NWEB_EXPORT HitTestResult {
30508+public:
30509+    HitTestResult() {
30510+        type_ = UNKNOWN_TYPE;
30511+    }
30512+    virtual ~HitTestResult() = default;
30513+    /**
30514+     * Default HitTestResult, where the target is unknown.
30515+     */
30516+    static const int UNKNOWN_TYPE = 0;
30517+    /**
30518+     * This type is no longer used.
30519+     */
30520+    static const int ANCHOR_TYPE = 1;
30521+    /**
30522+     * HitTestResult for hitting a phone number.
30523+     */
30524+    static const int PHONE_TYPE = 2;
30525+    /**
30526+     * HitTestResult for hitting a map address.
30527+     */
30528+    static const int GEO_TYPE = 3;
30529+    /**
30530+     * HitTestResult for hitting an email address.
30531+     */
30532+    static const int EMAIL_TYPE = 4;
30533+    /**
30534+     * HitTestResult for hitting an HTML::img tag.
30535+     */
30536+    static const int IMAGE_TYPE = 5;
30537+    /**
30538+     * This type is no longer used.
30539+     */
30540+    static const int IMAGE_ANCHOR_TYPE = 6;
30541+    /**
30542+     * HitTestResult for hitting a HTML::a tag with src=http.
30543+     */
30544+    static const int SRC_ANCHOR_TYPE = 7;
30545+    /**
30546+     * HitTestResult for hitting a HTML::a tag with src=http + HTML::img.
30547+     */
30548+    static const int SRC_IMAGE_ANCHOR_TYPE = 8;
30549+    /**
30550+     * HitTestResult for hitting an edit text area.
30551+     */
30552+    static const int EDIT_TEXT_TYPE = 9;
30553+
30554+    void SetType(int type) {
30555+        type_ = type;
30556+    }
30557+
30558+    void SetExtra(std::string extra) {
30559+        extra_ = extra;
30560+    }
30561+
30562+    int GetType() {
30563+        return type_;
30564+    }
30565+
30566+    std::string GetExtra() {
30567+        return extra_;
30568+    }
30569+private:
30570+    int type_;
30571+    std::string extra_;
30572+
30573+};
30574+}
30575+
30576+#endif  // WEB_HIT_TESTRESULT_H
30577diff --git a/ohos_nweb/include/nweb_javascript_result_callback.h b/ohos_nweb/include/nweb_javascript_result_callback.h
30578new file mode 100644
30579index 0000000000..2faeb6495d
30580--- /dev/null
30581+++ b/ohos_nweb/include/nweb_javascript_result_callback.h
30582@@ -0,0 +1,26 @@
30583+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
30584+// Use of this source code is governed by a BSD-style license that can be
30585+// found in the LICENSE file.
30586+
30587+#ifndef NWEB_JAVASCRIPT_RESULT_CALLBACK_H
30588+#define NWEB_JAVASCRIPT_RESULT_CALLBACK_H
30589+
30590+#include <string>
30591+#include <vector>
30592+#include "nweb_export.h"
30593+#include "nweb_value.h"
30594+
30595+namespace OHOS::NWeb {
30596+    class OHOS_NWEB_EXPORT NWebJavaScriptResultCallBack {
30597+    public:
30598+        NWebJavaScriptResultCallBack() = default;
30599+
30600+        virtual ~NWebJavaScriptResultCallBack() = default;
30601+
30602+        virtual std::shared_ptr<NWebValue> GetJavaScriptResult(
30603+                std::vector<std::shared_ptr<NWebValue>> args,
30604+                const std::string &method,
30605+                const std::string &object_name) = 0;
30606+    };
30607+}
30608+#endif
30609\ No newline at end of file
30610diff --git a/ohos_nweb/include/nweb_js_dialog_result.h b/ohos_nweb/include/nweb_js_dialog_result.h
30611new file mode 100644
30612index 0000000000..13b0fe51f0
30613--- /dev/null
30614+++ b/ohos_nweb/include/nweb_js_dialog_result.h
30615@@ -0,0 +1,35 @@
30616+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
30617+// Use of this source code is governed by a BSD-style license that can be
30618+// found in the LICENSE file.
30619+
30620+#ifndef NWEB_JS_DISLOG_RESULT_H
30621+#define NWEB_JS_DISLOG_RESULT_H
30622+
30623+#include <string>
30624+#include "nweb_export.h"
30625+
30626+namespace OHOS::NWeb {
30627+class OHOS_NWEB_EXPORT NWebJSDialogResult {
30628+public:
30629+    virtual ~NWebJSDialogResult() = default;
30630+
30631+    /**
30632+     * @brief Handle a confirmation response from the user.
30633+     */
30634+    virtual void Confirm() = 0;
30635+
30636+    /**
30637+     * @brief Handle a confirmation response from the user with input message.
30638+     *
30639+     * @param message confirm message.
30640+     */
30641+    virtual void Confirm(const std::string &message) = 0;
30642+
30643+    /**
30644+     * @brief Handle the result if the user cancelled the dialog.
30645+     */
30646+    virtual void Cancel() = 0;
30647+};
30648+}
30649+
30650+#endif
30651\ No newline at end of file
30652diff --git a/ohos_nweb/include/nweb_preference.h b/ohos_nweb/include/nweb_preference.h
30653new file mode 100644
30654index 0000000000..ca85253000
30655--- /dev/null
30656+++ b/ohos_nweb/include/nweb_preference.h
30657@@ -0,0 +1,80 @@
30658+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
30659+// Use of this source code is governed by a BSD-style license that can be
30660+// found in the LICENSE file.
30661+
30662+#ifndef NWEB_PREFERENCE_H
30663+#define NWEB_PREFERENCE_H
30664+
30665+#include <string>
30666+#include "nweb_export.h"
30667+
30668+namespace OHOS::NWeb {
30669+class OHOS_NWEB_EXPORT NWebPreference {
30670+    public:
30671+    NWebPreference() = default;
30672+    virtual ~NWebPreference() = default;
30673+
30674+    enum AccessMode { ALWAYS_ALLOW = 0, NEVER_ALLOW = 1, COMPATIBILITY_MODE = 2 };
30675+
30676+    /* synchronous set web settings and web preferences */
30677+    virtual void PutEnableContentAccess(bool flag) = 0;
30678+    virtual void PutEnableRawFileAccess(bool flag) = 0;
30679+    virtual void PutEnableRawFileAccessFromFileURLs(bool flag) = 0;
30680+    virtual void PutEnableUniversalAccessFromFileURLs(bool flag) = 0;
30681+    virtual void PutLoadImageFromNetworkDisabled(bool flag) = 0;
30682+    virtual void PutCursiveFontFamilyName(std::string font) = 0;
30683+    virtual void PutDatabaseAllowed(bool flag) = 0;
30684+    virtual void PutDefaultFixedFontSize(int size) = 0;
30685+    virtual void PutDefaultFontSize(int size) = 0;
30686+    virtual void PutDefaultTextEncodingFormat(std::string encoding) = 0;
30687+    virtual void PutDomStorageEnabled(bool flag) = 0;
30688+    virtual void PutFantasyFontFamilyName(std::string font) = 0;
30689+    virtual void PutFixedFontFamilyName(std::string font) = 0;
30690+    virtual void PutDarkModeEnabled(int forceDark) = 0;
30691+    virtual void PutIsCreateWindowsByJavaScriptAllowed(bool flag) = 0;
30692+    virtual void PutJavaScriptEnabled(bool flag) = 0;
30693+    virtual void PutImageLoadingAllowed(bool flag) = 0;
30694+    virtual void PutFontSizeLowerLimit(int size) = 0;
30695+    virtual void PutLogicalFontSizeLowerLimit(int size) = 0;
30696+    virtual void PutSansSerifFontFamilyName(std::string font) = 0;
30697+    virtual void PutSerifFontFamilyName(std::string font) = 0;
30698+    virtual void PutStandardFontFamilyName(std::string font) = 0;
30699+    virtual void PutUserAgent(std::string ua) = 0;
30700+    virtual void PutZoomingForTextFactor(int textZoom) = 0;
30701+    virtual void PutGeolocationAllowed(bool flag) = 0;
30702+    virtual void PutAccessModeForSecureOriginLoadFromInsecure(
30703+    AccessMode mode) = 0;
30704+    virtual void PutZoomingFunctionEnabled(bool flag) = 0;
30705+
30706+    /* get methods*/
30707+    virtual bool EnableContentAccess() = 0;
30708+    virtual bool EnableRawFileAccess() = 0;
30709+    virtual bool EnableRawFileAccessFromFileURLs() = 0;
30710+    virtual bool EnableUniversalAccessFromFileURLs() = 0;
30711+    virtual bool IsLoadImageFromNetworkDisabled() = 0;
30712+    virtual std::string CursiveFontFamilyName() = 0;
30713+    virtual bool IsDataBaseEnabled() = 0;
30714+    virtual int DefaultFixedFontSize() = 0;
30715+    virtual int DefaultFontSize() = 0;
30716+    virtual std::string DefaultTextEncodingFormat() = 0;
30717+    virtual std::string DefaultUserAgent() = 0;
30718+    virtual bool IsDomStorageEnabled() = 0;
30719+    virtual std::string FantasyFontFamilyName() = 0;
30720+    virtual std::string FixedFontFamilyName() = 0;
30721+    virtual int DarkModeEnabled() = 0;
30722+    virtual bool IsCreateWindowsByJavaScriptAllowed() = 0;
30723+    virtual bool IsJavaScriptAllowed() = 0;
30724+    virtual bool IsImageLoadingAllowed() = 0;
30725+    virtual int FontSizeLowerLimit() = 0;
30726+    virtual int LogicalFontSizeLowerLimit() = 0;
30727+    virtual std::string SansSerifFontFamilyName() = 0;
30728+    virtual std::string SerifFontFamilyName() = 0;
30729+    virtual std::string StandardFontFamilyName() = 0;
30730+    virtual std::string UserAgent() = 0;
30731+    virtual int ZoomingForTextFactor() = 0;
30732+    virtual bool GeolocationAllowed() = 0;
30733+    virtual int AccessModeForSecureOriginLoadFromInsecure() = 0;
30734+    virtual bool ZoomingfunctionEnabled() = 0;
30735+};
30736+}  // namespace OHOS::NWeb
30737+#endif  // NWEB_PREFERENCE_H
30738diff --git a/ohos_nweb/include/nweb_url_resource_error.h b/ohos_nweb/include/nweb_url_resource_error.h
30739new file mode 100644
30740index 0000000000..b24b7fbd90
30741--- /dev/null
30742+++ b/ohos_nweb/include/nweb_url_resource_error.h
30743@@ -0,0 +1,36 @@
30744+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
30745+// Use of this source code is governed by a BSD-style license that can be
30746+// found in the LICENSE file.
30747+
30748+#ifndef NWEB_URL_RESOURCE_ERROR_H
30749+#define NWEB_URL_RESOURCE_ERROR_H
30750+
30751+#include <string>
30752+
30753+#include "nweb_export.h"
30754+namespace OHOS::NWeb {
30755+class OHOS_NWEB_EXPORT NWebUrlResourceError {
30756+public:
30757+    NWebUrlResourceError() = default;
30758+
30759+    virtual ~NWebUrlResourceError() = default;
30760+
30761+    /**
30762+     * @brief Gets the error description.
30763+     *
30764+     * @brief Gets the ErrorInfo.
30765+     *
30766+     * @return The description of the error.
30767+     */
30768+    virtual const std::string &ErrorInfo() const = 0;
30769+
30770+    /**
30771+     * @brief Get the Error Code.
30772+     *
30773+     * @return The error code.
30774+     */
30775+    virtual int ErrorCode() const = 0;
30776+};
30777+}
30778+
30779+#endif // NWEB_URL_RESOURCE_ERROR_H
30780\ No newline at end of file
30781diff --git a/ohos_nweb/include/nweb_url_resource_request.h b/ohos_nweb/include/nweb_url_resource_request.h
30782new file mode 100644
30783index 0000000000..48e91d03ec
30784--- /dev/null
30785+++ b/ohos_nweb/include/nweb_url_resource_request.h
30786@@ -0,0 +1,64 @@
30787+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
30788+// Use of this source code is governed by a BSD-style license that can be
30789+// found in the LICENSE file.
30790+#ifndef NWEB_URL_RESOURCE_REQUEST_H
30791+#define NWEB_URL_RESOURCE_REQUEST_H
30792+#include <map>
30793+#include <string>
30794+
30795+#include "nweb_export.h"
30796+
30797+namespace OHOS::NWeb {
30798+class OHOS_NWEB_EXPORT NWebUrlResourceRequest {
30799+public:
30800+    NWebUrlResourceRequest() = default;
30801+
30802+    virtual ~NWebUrlResourceRequest() = default;
30803+
30804+    /**
30805+     * @brief Gets the method associated with the request, for example "GET".
30806+     *
30807+     * @retval method the method associated with the request.
30808+     */
30809+    virtual const std::string &Method() = 0;
30810+
30811+    /**
30812+     * @brief  Gets the headers associated with the request.
30813+     *
30814+     * @retval the headers associated with the request.
30815+     */
30816+    virtual const std::map<std::string, std::string> &RequestHeaders() = 0;
30817+
30818+    /**
30819+     * @brief Gets the URL for which the resource request was made.
30820+     *
30821+     * @retval URL url string
30822+     */
30823+    virtual const std::string &Url() = 0;
30824+
30825+    /**
30826+     * @brief Gets whether a gesture (such as a click) was associated with the
30827+     * request.
30828+     *
30829+     * @retval gesture
30830+     */
30831+    virtual bool FromGesture() = 0;
30832+
30833+    /**
30834+     * @brief Gets whether the request was made in order to fetch the main frame's
30835+     * document.
30836+     *
30837+     * @retval Is main frame
30838+     */
30839+    virtual bool IsAboutMainFrame() = 0;
30840+
30841+    /**
30842+     * @brief Gets whether the request was a result of a server-side redirect.
30843+     *
30844+     * @retval is redirect
30845+     */
30846+    virtual bool IsRequestRedirect() = 0;
30847+};
30848+}
30849+
30850+#endif
30851\ No newline at end of file
30852diff --git a/ohos_nweb/include/nweb_url_resource_response.h b/ohos_nweb/include/nweb_url_resource_response.h
30853new file mode 100644
30854index 0000000000..0efc5cd930
30855--- /dev/null
30856+++ b/ohos_nweb/include/nweb_url_resource_response.h
30857@@ -0,0 +1,174 @@
30858+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
30859+// Use of this source code is governed by a BSD-style license that can be
30860+// found in the LICENSE file.
30861+
30862+#ifndef NWEB_URL_RESOURCE_RESPONSE_H
30863+#define NWEB_URL_RESOURCE_RESPONSE_H
30864+
30865+#include <map>
30866+#include <string>
30867+
30868+namespace OHOS::NWeb {
30869+class NWebUrlResourceResponse {
30870+public:
30871+    /**
30872+     * @brief Constructs a resource response with the given parameters.
30873+     *
30874+     * @param mime_type the resource response's MIME type, for example {
30875+     * "text/html"}.
30876+     * @param encoding the resource response's character encoding, for example
30877+     * {"utf-8"}.
30878+     * @param status_code the status code needs to be in the ranges [100, 299],
30879+     * [400, 599]. Causing a redirect by specifying a 3xx code is not supported.
30880+     * @param reason_phrase the phrase describing the status code, for example
30881+     * "OK". Must be non-empty.
30882+     * @param request_headers the resource response's headers represented as a
30883+     * mapping of header name -> header value.
30884+     * @param input_stream the input stream that provides the resource response's
30885+     * data.
30886+     */
30887+    NWebUrlResourceResponse(const std::string& mime_type,
30888+                            const std::string& encoding,
30889+                            const int status_code,
30890+                            const std::string& reason_phrase,
30891+                            const std::map<std::string, std::string>& request_headers,
30892+                            std::string& input_stream)
30893+        : mime_type_(mime_type),
30894+          encoding_(encoding),
30895+          status_code_(status_code),
30896+          reason_phrase_(reason_phrase),
30897+          request_headers_(request_headers),
30898+          input_stream_(input_stream) {}
30899+
30900+    NWebUrlResourceResponse(const std::string& mime_type,
30901+                            const std::string& encoding,
30902+                            std::string& input_stream)
30903+        : mime_type_(mime_type),
30904+          encoding_(encoding),
30905+          input_stream_(input_stream) {}
30906+
30907+    ~NWebUrlResourceResponse() = default;
30908+
30909+    /**
30910+     * @brief get input stream
30911+     *
30912+     * @retval inputstream string
30913+     */
30914+    const std::string& ResponseData()
30915+    {
30916+        return input_stream_;
30917+    }
30918+
30919+    /**
30920+     * @brief set input stream
30921+     *
30922+     * @param input_stream set inputstream for example: fread(buf, 1, sizeof(buf),
30923+     * file)
30924+     */
30925+    void PutResponseData(std::string& input_stream)
30926+    {
30927+        input_stream_ = input_stream;
30928+    }
30929+
30930+    /**
30931+     * @brief Constructs a resource response with the given parameters.
30932+     *
30933+     * @param encoding encoding { "utf-8" }
30934+     */
30935+    void PutResponseEncoding(const std::string& encoding)
30936+    {
30937+        encoding_ = encoding;
30938+    }
30939+
30940+    /**
30941+     * @brief get encoding
30942+     *
30943+     * @retval encoding the resource response's encoding
30944+     */
30945+    std::string ResponseEncoding()
30946+    {
30947+        return encoding_;
30948+    }
30949+
30950+    /**
30951+     * @brief Constructs a resource response with the given parameters.
30952+     *
30953+     * @param mime_type mime_type{ "text/html" }
30954+     */
30955+    void PutResponseMimeType(const std::string& mime_type)
30956+    {
30957+        mime_type_ = mime_type;
30958+    }
30959+
30960+    /**
30961+     * @brief get mimetype
30962+     *
30963+     * @retval mimetype The resource response's MIME type
30964+     */
30965+    std::string ResponseMimeType()
30966+    {
30967+        return mime_type_;
30968+    }
30969+
30970+    /**
30971+     * @brief Set ResponseHeaders
30972+     *
30973+     * @param request_headers request header
30974+     */
30975+    void PutResponseHeaders(const std::map<std::string, std::string>& request_headers)
30976+    {
30977+        request_headers_ = request_headers;
30978+    }
30979+
30980+    /**
30981+     * @brief Get ResponseHeaders
30982+     *
30983+     * @retval request headers
30984+     */
30985+    const std::map<std::string, std::string>& ResponseHeaders()
30986+    {
30987+        return request_headers_;
30988+    }
30989+
30990+    /**
30991+     * @brief Set StatusCode And ReasonPhrase
30992+     *
30993+     * @param status_code  status code
30994+     * @param reasonphrase reason phrase
30995+     */
30996+    void PutResponseStateAndStatuscode(int status_code,
30997+                                    std::string reason_phrase)
30998+    {
30999+        status_code_ = status_code;
31000+        reason_phrase_ = reason_phrase;
31001+    }
31002+
31003+    /**
31004+     * @brief get status code
31005+     *
31006+     * @retval status code
31007+    */
31008+    int ResponseStatusCode()
31009+    {
31010+        return status_code_;
31011+    }
31012+
31013+    /**
31014+     * @brief Get ReasonPhrase
31015+     *
31016+     * @retval errorcode reason
31017+    */
31018+    std::string ResponseStatus()
31019+    {
31020+        return reason_phrase_;
31021+    }
31022+private:
31023+    std::string mime_type_;
31024+    std::string encoding_;
31025+    int status_code_ = 200;
31026+    std::string reason_phrase_;
31027+    std::map<std::string, std::string> request_headers_;
31028+    std::string& input_stream_;
31029+};
31030+}
31031+#endif
31032\ No newline at end of file
31033diff --git a/ohos_nweb/include/nweb_value.h b/ohos_nweb/include/nweb_value.h
31034new file mode 100644
31035index 0000000000..ee4c745e3c
31036--- /dev/null
31037+++ b/ohos_nweb/include/nweb_value.h
31038@@ -0,0 +1,70 @@
31039+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
31040+// Use of this source code is governed by a BSD-style license that can be
31041+// found in the LICENSE file.
31042+
31043+#ifndef NWEB_VALUE_H_
31044+#define NWEB_VALUE_H_
31045+
31046+#include <iostream>
31047+#include <string>
31048+#include "nweb_export.h"
31049+
31050+namespace OHOS::NWeb {
31051+    union data_union {
31052+        int n;
31053+        double f;
31054+        bool b;
31055+    };
31056+
31057+    class OHOS_NWEB_EXPORT NWebValue {
31058+    public:
31059+        enum class Type : unsigned char {
31060+            NONE = 0,
31061+            BOOLEAN,
31062+            INTEGER,
31063+            DOUBLE,
31064+            STRING,
31065+            BINARY,
31066+            DICTIONARY,
31067+            LIST
31068+        };
31069+
31070+        NWebValue(Type type) : type_(type) {}
31071+
31072+        ~NWebValue() = default;
31073+
31074+        bool GetBoolean() { return data_.b; }
31075+
31076+        void SetBoolean(bool b) { data_.b = b; }
31077+
31078+        void SetString(std::string str) { str_ = str; }
31079+
31080+        std::string GetString() { return str_; }
31081+
31082+        void SetDouble(double dou) { data_.f = dou; }
31083+
31084+        double GetDouble() { return data_.f; }
31085+
31086+        void SetInt(int num) { data_.n = num; }
31087+
31088+        int GetInt() { return data_.n; }
31089+
31090+        void SetJsonString(std::string json_string) { str_json_ = json_string; }
31091+
31092+        std::string GetJsonString() { return str_json_; }
31093+
31094+        Type GetType() { return type_; }
31095+
31096+        void SetType(Type type) { type_ = type; }
31097+
31098+        int error_ = 0;
31099+
31100+    private:
31101+        Type type_ = Type::NONE;
31102+        data_union data_;
31103+        std::string str_;
31104+        std::string str_json_;
31105+    };
31106+}
31107+
31108+#endif  // NWEB_VALUE_H_
31109diff --git a/ohos_nweb/include/nweb_value_callback.h b/ohos_nweb/include/nweb_value_callback.h
31110new file mode 100644
31111index 0000000000..aeba1f792a
31112--- /dev/null
31113+++ b/ohos_nweb/include/nweb_value_callback.h
31114@@ -0,0 +1,22 @@
31115+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
31116+// Use of this source code is governed by a BSD-style license that can be
31117+// found in the LICENSE file.
31118+
31119+#ifndef VALUE_CALLBACK_H
31120+#define VALUE_CALLBACK_H
31121+
31122+#include "nweb_export.h"
31123+
31124+namespace OHOS::NWeb {
31125+template <typename T>
31126+class OHOS_NWEB_EXPORT NWebValueCallback {
31127+public:
31128+    NWebValueCallback() = default;
31129+
31130+    virtual ~NWebValueCallback() = default;
31131+
31132+    virtual void OnReceiveValue(T value) = 0;
31133+};
31134+}
31135+
31136+#endif  // NWebValueCallback
31137\ No newline at end of file
31138diff --git a/ohos_nweb/src/cef_delegate/nweb_access_request_delegate.cc b/ohos_nweb/src/cef_delegate/nweb_access_request_delegate.cc
31139new file mode 100644
31140index 0000000000..304addd1ad
31141--- /dev/null
31142+++ b/ohos_nweb/src/cef_delegate/nweb_access_request_delegate.cc
31143@@ -0,0 +1,42 @@
31144+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
31145+// Use of this source code is governed by a BSD-style license that can be
31146+// found in the LICENSE file.
31147+
31148+#include "ohos_nweb/src/cef_delegate/nweb_access_request_delegate.h"
31149+#include "base/logging.h"
31150+#include "cef/include/cef_permission_request.h"
31151+
31152+namespace OHOS::NWeb {
31153+NWebAccessRequestDelegate::NWebAccessRequestDelegate(CefRefPtr<CefAccessRequest> request)
31154+    : request_(request) {}
31155+
31156+std::string NWebAccessRequestDelegate::Origin() {
31157+  if (request_ != nullptr) {
31158+    return request_->Origin();
31159+  }
31160+  return nullptr;
31161+}
31162+
31163+int NWebAccessRequestDelegate::ResourceAcessId() {
31164+  if (request_ != nullptr) {
31165+    return request_->ResourceAcessId();
31166+  }
31167+  return -1;
31168+}
31169+
31170+void NWebAccessRequestDelegate::Agree(int resourceId) {
31171+  if (request_ != nullptr) {
31172+    if (resourceId == ResourceAcessId()) {
31173+      request_->ReportRequestResult(true);
31174+    } else {
31175+      request_->ReportRequestResult(false);
31176+    }
31177+  }
31178+}
31179+
31180+void NWebAccessRequestDelegate::Refuse() {
31181+  if (request_ != nullptr) {
31182+    request_->ReportRequestResult(false);
31183+  }
31184+}
31185+}  // namespace OHOS::NWeb
31186diff --git a/ohos_nweb/src/cef_delegate/nweb_access_request_delegate.h b/ohos_nweb/src/cef_delegate/nweb_access_request_delegate.h
31187new file mode 100644
31188index 0000000000..24cc0ff87c
31189--- /dev/null
31190+++ b/ohos_nweb/src/cef_delegate/nweb_access_request_delegate.h
31191@@ -0,0 +1,30 @@
31192+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
31193+// Use of this source code is governed by a BSD-style license that can be
31194+// found in the LICENSE file.
31195+
31196+#ifndef NWEB_ACCESS_REQUEST_DELEGATE_H
31197+#define NWEB_ACCESS_REQUEST_DELEGATE_H
31198+
31199+#include "cef/include/cef_browser.h"
31200+#include "ohos_nweb/include/nweb_access_request.h"
31201+
31202+namespace OHOS::NWeb {
31203+class NWebAccessRequestDelegate : public NWebAccessRequest {
31204+ public:
31205+  explicit NWebAccessRequestDelegate(CefRefPtr<CefAccessRequest> request);
31206+  ~NWebAccessRequestDelegate() = default;
31207+
31208+  std::string Origin() override;
31209+
31210+  int ResourceAcessId() override;
31211+
31212+  void Agree(int resourceId) override;
31213+
31214+  void Refuse() override;
31215+
31216+ private:
31217+  CefRefPtr<CefAccessRequest> request_ = nullptr;
31218+};
31219+}  // namespace OHOS::NWeb
31220+
31221+#endif  // NWEB_ACCESS_REQUEST_DELEGATE_H
31222diff --git a/ohos_nweb/src/cef_delegate/nweb_application.cc b/ohos_nweb/src/cef_delegate/nweb_application.cc
31223new file mode 100644
31224index 0000000000..7bbfd31f93
31225--- /dev/null
31226+++ b/ohos_nweb/src/cef_delegate/nweb_application.cc
31227@@ -0,0 +1,93 @@
31228+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
31229+// Use of this source code is governed by a BSD-style license that can be
31230+// found in the LICENSE file.
31231+
31232+#include "nweb_application.h"
31233+
31234+#include <cstdlib>
31235+#include <thread>
31236+#include "cef/include/wrapper/cef_helpers.h"
31237+#include "nweb_handler_delegate.h"
31238+
31239+namespace OHOS::NWeb {
31240+NWebApplication::NWebApplication(
31241+    std::shared_ptr<NWebPreferenceDelegate> preference_delegate,
31242+    std::string url,
31243+    CefRefPtr<NWebHandlerDelegate> handler_delegate)
31244+    : preference_delegate_(preference_delegate),
31245+      url_(url),
31246+      handler_delegate_(handler_delegate) {}
31247+
31248+NWebApplication::~NWebApplication() {}
31249+
31250+std::string NWebApplication::GetURL() {
31251+  return url_;
31252+}
31253+
31254+/* CefApp methods begin */
31255+CefRefPtr<CefBrowserProcessHandler>
31256+NWebApplication::GetBrowserProcessHandler() {
31257+  return this;
31258+}
31259+
31260+CefRefPtr<CefRenderProcessHandler> NWebApplication::GetRenderProcessHandler() {
31261+  return this;
31262+}
31263+/* CefApp methods end */
31264+
31265+/* CefBrowserProcessHandler methods begin */
31266+void NWebApplication::OnContextInitialized() {
31267+  LOG(INFO) << "NWebApplication::OnContextInitialized";
31268+  CEF_REQUIRE_UI_THREAD();
31269+  CreateBrowser();
31270+}
31271+/* CefBrowserProcessHandler methods end */
31272+
31273+/* CefRenderProcessHandler methods begin */
31274+void NWebApplication::OnWebKitInitialized() {
31275+  LOG(INFO) << "OnWebKitInitialized";
31276+}
31277+/* CefRenderProcessHandler methods begin */
31278+
31279+CefRefPtr<CefClient> NWebApplication::GetDefaultClient() {
31280+  // Called when a new browser window is created via the Chrome runtime UI
31281+  return handler_delegate_;
31282+}
31283+
31284+void NWebApplication::PopulateCreateSettings(
31285+    CefRefPtr<CefCommandLine> command_line,
31286+    CefBrowserSettings& browser_settings) {
31287+  if (command_line->HasSwitch(switches::kOffScreenFrameRate)) {
31288+    browser_settings.windowless_frame_rate =
31289+        atoi(command_line->GetSwitchValue(switches::kOffScreenFrameRate)
31290+                 .ToString()
31291+                 .c_str());
31292+  }
31293+}
31294+
31295+void NWebApplication::CreateBrowser() {
31296+  CefRefPtr<CefCommandLine> command_line =
31297+      CefCommandLine::GetGlobalCommandLine();
31298+
31299+  // Specify CEF browser settings here.
31300+  CefBrowserSettings browser_settings;
31301+  PopulateCreateSettings(command_line, browser_settings);
31302+  browser_settings.background_color = 0xffffffff;
31303+  preference_delegate_->ComputeBrowserSettings(browser_settings);
31304+
31305+  std::string url;
31306+  url = command_line->GetSwitchValue(switches::kUrl);
31307+  if (url.empty()) {
31308+    url = GetURL();
31309+  }
31310+
31311+  // Information used when creating the native window.
31312+  CefWindowInfo window_info;
31313+  CefWindowHandle handle = kNullWindowHandle;
31314+  window_info.SetAsWindowless(handle);
31315+
31316+  // Create the first browser window.
31317+  CefBrowserHost::CreateBrowser(window_info, handler_delegate_, url,
31318+                                browser_settings, nullptr, nullptr);
31319+}
31320+}  // namespace OHOS::NWeb
31321\ No newline at end of file
31322diff --git a/ohos_nweb/src/cef_delegate/nweb_application.h b/ohos_nweb/src/cef_delegate/nweb_application.h
31323new file mode 100644
31324index 0000000000..247e813cd4
31325--- /dev/null
31326+++ b/ohos_nweb/src/cef_delegate/nweb_application.h
31327@@ -0,0 +1,56 @@
31328+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
31329+// Use of this source code is governed by a BSD-style license that can be
31330+// found in the LICENSE file.
31331+
31332+#ifndef NWEB_APPLICATION_H
31333+#define NWEB_APPLICATION_H
31334+
31335+#include <string>
31336+#include "cef/include/cef_app.h"
31337+#include "nweb_handler_delegate.h"
31338+#include "nweb_preference_delegate.h"
31339+
31340+namespace OHOS::NWeb {
31341+namespace switches {
31342+const char kUrl[] = "url";
31343+const char kOffScreenFrameRate[] = "off-screen-frame-rate";
31344+}  // namespace switches
31345+
31346+class NWebApplication : public CefApp,
31347+                        public CefBrowserProcessHandler,
31348+                        public CefRenderProcessHandler {
31349+ public:
31350+  NWebApplication(std::shared_ptr<NWebPreferenceDelegate> preference_delegate,
31351+                  std::string url,
31352+                  CefRefPtr<NWebHandlerDelegate> handler_delegate);
31353+  ~NWebApplication();
31354+
31355+  /* CefApp methods begine */
31356+  CefRefPtr<CefBrowserProcessHandler> GetBrowserProcessHandler() override;
31357+  CefRefPtr<CefRenderProcessHandler> GetRenderProcessHandler() override;
31358+  /* CefApp methods end */
31359+
31360+  /* CefBrowserProcessHandler methods begin */
31361+  void OnContextInitialized() override;
31362+  CefRefPtr<CefClient> GetDefaultClient() override;
31363+  std::string GetURL();
31364+  /* CefBrowserProcessHandler methods end */
31365+
31366+  /* CefRenderProcessHandler methods begin */
31367+  void OnWebKitInitialized() override;
31368+  /* CefRenderProcessHandler methods begin */
31369+
31370+  void CreateBrowser();
31371+
31372+ private:
31373+  void PopulateCreateSettings(CefRefPtr<CefCommandLine> command_line,
31374+                              CefBrowserSettings& browser_settings);
31375+
31376+  std::shared_ptr<NWebPreferenceDelegate> preference_delegate_ = nullptr;
31377+  std::string url_;
31378+  CefRefPtr<NWebHandlerDelegate> handler_delegate_{nullptr};
31379+  // Include the default reference counting implementation.
31380+  IMPLEMENT_REFCOUNTING(NWebApplication);
31381+};  // NWebApplication
31382+}  // namespace OHOS::NWeb
31383+#endif  // NWebApplication
31384diff --git a/ohos_nweb/src/cef_delegate/nweb_cookie_manager_delegate.cc b/ohos_nweb/src/cef_delegate/nweb_cookie_manager_delegate.cc
31385new file mode 100644
31386index 0000000000..0b0bb59284
31387--- /dev/null
31388+++ b/ohos_nweb/src/cef_delegate/nweb_cookie_manager_delegate.cc
31389@@ -0,0 +1,320 @@
31390+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
31391+// Use of this source code is governed by a BSD-style license that can be
31392+// found in the LICENSE file.
31393+
31394+#include "nweb_cookie_manager_delegate.h"
31395+#include <memory>
31396+#include <thread>
31397+#include <vector>
31398+#include "base/logging.h"
31399+#include "base/synchronization/waitable_event.h"
31400+#include "base/time/time.h"
31401+#include "cef/include/cef_waitable_event.h"
31402+#include "cef/libcef/common/net_service/net_service_util.h"
31403+#include "cef/libcef/common/time_util.h"
31404+#include "net/cookies/canonical_cookie.h"
31405+#include "url/gurl.h"
31406+
31407+using namespace OHOS::NWeb;
31408+using base::WaitableEvent;
31409+
31410+namespace {
31411+class CookieCompletionCallback : public CefCompletionCallback {
31412+ public:
31413+  explicit CookieCompletionCallback(
31414+      std::shared_ptr<WaitableEvent> event,
31415+      std::shared_ptr<NWebValueCallback<bool>> callback)
31416+      : event_(event), callback_(callback) {}
31417+  void OnComplete() override {
31418+    if (event_ != nullptr) {
31419+      event_->Signal();
31420+    }
31421+    if (callback_ != nullptr) {
31422+      callback_->OnReceiveValue(true);
31423+    }
31424+  }
31425+
31426+ private:
31427+  std::shared_ptr<WaitableEvent> event_;
31428+  std::shared_ptr<NWebValueCallback<bool>> callback_;
31429+  IMPLEMENT_REFCOUNTING(CookieCompletionCallback);
31430+  DISALLOW_COPY_AND_ASSIGN(CookieCompletionCallback);
31431+};
31432+
31433+class CookieSetCallback : public CefSetCookieCallback {
31434+ public:
31435+  explicit CookieSetCallback(std::shared_ptr<WaitableEvent> event,
31436+                             std::shared_ptr<NWebValueCallback<bool>> callback)
31437+      : event_(event), callback_(callback), set_success_(false) {}
31438+  void OnComplete(bool success) override {
31439+    set_success_ = success;
31440+    if (event_ != nullptr) {
31441+      event_->Signal();
31442+    }
31443+    if (callback_ != nullptr) {
31444+      callback_->OnReceiveValue(set_success_);
31445+    }
31446+  }
31447+
31448+  bool IsSetSuccess() const { return set_success_; }
31449+
31450+ private:
31451+  std::shared_ptr<WaitableEvent> event_;
31452+  std::shared_ptr<NWebValueCallback<bool>> callback_;
31453+  bool set_success_;
31454+
31455+  IMPLEMENT_REFCOUNTING(CookieSetCallback);
31456+  DISALLOW_COPY_AND_ASSIGN(CookieSetCallback);
31457+};
31458+
31459+class HasCookieVisitor : public CefCookieVisitor {
31460+ public:
31461+  HasCookieVisitor() = delete;
31462+  explicit HasCookieVisitor(std::shared_ptr<NWebValueCallback<bool>> callback)
31463+      : callback_(callback) {}
31464+  ~HasCookieVisitor() = default;
31465+
31466+  bool Visit(const CefCookie& cookie,
31467+             int count,
31468+             int total,
31469+             bool& deleteCookie) override {
31470+    if (total == 0) {
31471+      if (callback_ != nullptr) {
31472+        callback_->OnReceiveValue(false);
31473+      }
31474+    }
31475+    return true;
31476+  }
31477+
31478+  void SetCookieLine(const CefString& cookieLine) override {
31479+    if (callback_ != nullptr) {
31480+      callback_->OnReceiveValue(true);
31481+    }
31482+  }
31483+
31484+ private:
31485+  std::shared_ptr<NWebValueCallback<bool>> callback_;
31486+  IMPLEMENT_REFCOUNTING(HasCookieVisitor);
31487+};
31488+
31489+class ReturnCookieVisitor : public CefCookieVisitor {
31490+ public:
31491+  ReturnCookieVisitor() = delete;
31492+  explicit ReturnCookieVisitor(
31493+      std::shared_ptr<NWebValueCallback<std::string>> callback)
31494+      : cookie_line_(std::string()),
31495+        cookies_(std::vector<CefCookie>()),
31496+        callback_(callback) {}
31497+  ~ReturnCookieVisitor() = default;
31498+
31499+  bool Visit(const CefCookie& cookie,
31500+             int count,
31501+             int total,
31502+             bool& deleteCookie) override {
31503+    if (total == 0) {
31504+      if (callback_ != nullptr) {
31505+        callback_->OnReceiveValue(cookie_line_);
31506+      }
31507+      return true;
31508+    }
31509+    deleteCookie = !cookie.has_expires ? delete_session_ : false;
31510+    cookies_.push_back(cookie);
31511+    return true;
31512+  }
31513+
31514+  void SetCookieLine(const CefString& cookieLine) override {
31515+    cookie_line_ = cookieLine.ToString();
31516+
31517+    if (callback_ != nullptr) {
31518+      callback_->OnReceiveValue(cookie_line_);
31519+    }
31520+  }
31521+
31522+  std::vector<CefCookie>& GetVisitorCookies() { return cookies_; }
31523+
31524+  std::string ReturnCookieLine() const { return cookie_line_; }
31525+
31526+ private:
31527+  bool delete_session_;
31528+  std::string cookie_line_;
31529+  std::vector<CefCookie> cookies_;
31530+  std::shared_ptr<NWebValueCallback<std::string>> callback_;
31531+  IMPLEMENT_REFCOUNTING(ReturnCookieVisitor);
31532+};
31533+
31534+class CookieDeleteCallback : public CefDeleteCookiesCallback {
31535+ public:
31536+  CookieDeleteCallback() = delete;
31537+  CookieDeleteCallback(std::shared_ptr<WaitableEvent> event,
31538+                       std::shared_ptr<NWebValueCallback<bool>> callback)
31539+      : event_(event), callback_(callback), num_deleted_(0) {}
31540+  explicit CookieDeleteCallback(
31541+      std::shared_ptr<NWebValueCallback<bool>> callback)
31542+      : event_(nullptr), callback_(callback), num_deleted_(0) {}
31543+  explicit CookieDeleteCallback(std::shared_ptr<WaitableEvent> event)
31544+      : event_(event), callback_(nullptr), num_deleted_(0) {}
31545+
31546+  void OnComplete(int num_deleted) override {
31547+    num_deleted_ = num_deleted;
31548+    if (callback_ != nullptr) {
31549+      if (num_deleted_ > 0) {
31550+        callback_->OnReceiveValue(true);
31551+      } else {
31552+        callback_->OnReceiveValue(false);
31553+      }
31554+    }
31555+    if (event_ != nullptr) {
31556+      event_->Signal();
31557+    }
31558+  }
31559+
31560+  int GetNumDeleted() const { return num_deleted_; }
31561+
31562+ private:
31563+  std::shared_ptr<WaitableEvent> event_;
31564+  std::shared_ptr<NWebValueCallback<bool>> callback_;
31565+  int num_deleted_;
31566+
31567+  IMPLEMENT_REFCOUNTING(CookieDeleteCallback);
31568+  DISALLOW_COPY_AND_ASSIGN(CookieDeleteCallback);
31569+};
31570+}  // namespace
31571+
31572+namespace OHOS::NWeb {
31573+NWebCookieManagerDelegate::NWebCookieManagerDelegate() {}
31574+
31575+CefRefPtr<CefCookieManager>
31576+NWebCookieManagerDelegate::GetGlobalCookieManager() {
31577+  if (!cookie_manager_) {
31578+    cookie_manager_ = CefCookieManager::GetGlobalManager(nullptr);
31579+  }
31580+  return cookie_manager_;
31581+}
31582+
31583+bool NWebCookieManagerDelegate::IsAcceptCookieAllowed() {
31584+  CefRefPtr<CefCookieManager> cookie_manager = GetGlobalCookieManager();
31585+  if (cookie_manager == nullptr) {
31586+    return false;
31587+  }
31588+  return cookie_manager->IsAcceptCookieAllowed();
31589+}
31590+
31591+void NWebCookieManagerDelegate::PutAcceptCookieEnabled(bool accept) {
31592+  CefRefPtr<CefCookieManager> cookie_manager = GetGlobalCookieManager();
31593+  if (cookie_manager == nullptr) {
31594+    return;
31595+  }
31596+  cookie_manager->PutAcceptCookieEnabled(accept);
31597+}
31598+
31599+bool NWebCookieManagerDelegate::IsFileURLSchemeCookiesAllowed() {
31600+  CefRefPtr<CefCookieManager> cookie_manager = GetGlobalCookieManager();
31601+  if (cookie_manager == nullptr) {
31602+    return false;
31603+  }
31604+  return cookie_manager->IsFileURLSchemeCookiesAllowed();
31605+}
31606+
31607+void NWebCookieManagerDelegate::PutAcceptFileURLSchemeCookiesEnabled(
31608+    bool allow) {
31609+  CefRefPtr<CefCookieManager> cookie_manager = GetGlobalCookieManager();
31610+  if (cookie_manager == nullptr) {
31611+    return;
31612+  }
31613+  cookie_manager->PutAcceptFileURLSchemeCookiesEnabled(allow);
31614+}
31615+
31616+void NWebCookieManagerDelegate::ReturnCookie(
31617+    const std::string& url,
31618+    std::shared_ptr<NWebValueCallback<std::string>> callback) {
31619+  CefRefPtr<CefCookieManager> cookie_manager = GetGlobalCookieManager();
31620+  if (cookie_manager == nullptr) {
31621+    LOG(ERROR) << "GetGlobalCookieManager failed";
31622+    return;
31623+  }
31624+  CefRefPtr<ReturnCookieVisitor> visitor = new ReturnCookieVisitor(callback);
31625+  if (!cookie_manager->VisitUrlCookies(CefString(url), false, visitor)) {
31626+    LOG(ERROR) << "VisitUrlCookies failed";
31627+    return;
31628+  }
31629+}
31630+
31631+void NWebCookieManagerDelegate::SetCookie(
31632+    const std::string& url,
31633+    const std::string& value,
31634+    std::shared_ptr<NWebValueCallback<bool>> callback) {
31635+  CefRefPtr<CefCookieManager> cookie_manager = GetGlobalCookieManager();
31636+  if (cookie_manager == nullptr) {
31637+    LOG(ERROR) << "GetGlobalCookieManager failed";
31638+    return;
31639+  }
31640+  CefCookie cef_cookie;
31641+  if (!CefCookieManager::CreateCefCookie(CefString(url), CefString(value),
31642+                                         cef_cookie)) {
31643+    LOG(ERROR) << "CreateCefCookie failed";
31644+    return;
31645+  }
31646+  if (!cookie_manager->SetCookie(CefString(url), cef_cookie,
31647+                                 new CookieSetCallback(nullptr, callback))) {
31648+    LOG(ERROR) << "SetCookie error";
31649+    return;
31650+  }
31651+}
31652+
31653+void NWebCookieManagerDelegate::ExistCookies(
31654+    std::shared_ptr<NWebValueCallback<bool>> callback) {
31655+  CefRefPtr<CefCookieManager> cookie_manager = GetGlobalCookieManager();
31656+  if (cookie_manager == nullptr) {
31657+    return;
31658+  }
31659+  CefRefPtr<HasCookieVisitor> visitor = new HasCookieVisitor(callback);
31660+  if (!cookie_manager->VisitAllCookies(visitor)) {
31661+    LOG(INFO) << "VisitAllCookies failed";
31662+    return;
31663+  }
31664+}
31665+
31666+void NWebCookieManagerDelegate::Store(
31667+    std::shared_ptr<NWebValueCallback<bool>> callback) {
31668+  CefRefPtr<CefCookieManager> cookie_manager = GetGlobalCookieManager();
31669+  if (cookie_manager == nullptr) {
31670+    return;
31671+  }
31672+  CefRefPtr<CefCompletionCallback> complete =
31673+      new CookieCompletionCallback(nullptr, callback);
31674+  if (!cookie_manager->FlushStore(complete)) {
31675+    LOG(ERROR) << "Store Failed";
31676+    callback->OnReceiveValue(false);
31677+  }
31678+}
31679+
31680+void NWebCookieManagerDelegate::DeleteSessionCookies(
31681+    std::shared_ptr<NWebValueCallback<bool>> callback) {
31682+  CefRefPtr<CefCookieManager> cookie_manager = GetGlobalCookieManager();
31683+  if (cookie_manager == nullptr) {
31684+    return;
31685+  }
31686+  CefRefPtr<CefDeleteCookiesCallback> delete_callback =
31687+      new CookieDeleteCallback(callback);
31688+  if (!cookie_manager->DeleteCookies(CefString(std::string()),
31689+                                     CefString(std::string()), true,
31690+                                     delete_callback)) {
31691+    LOG(ERROR) << "DeleteCookieEntirely Failed";
31692+  }
31693+}
31694+
31695+void NWebCookieManagerDelegate::DeleteCookieEntirely(
31696+    std::shared_ptr<NWebValueCallback<bool>> callback) {
31697+  CefRefPtr<CefCookieManager> cookie_manager = GetGlobalCookieManager();
31698+  if (cookie_manager == nullptr) {
31699+    return;
31700+  }
31701+  CefRefPtr<CefDeleteCookiesCallback> delete_callback =
31702+      new CookieDeleteCallback(callback);
31703+  if (!cookie_manager->DeleteCookies(CefString(std::string()),
31704+                                     CefString(std::string()), false,
31705+                                     delete_callback)) {
31706+    LOG(ERROR) << "DeleteCookieEntirely Failed";
31707+  }
31708+}
31709+}  // namespace OHOS::NWeb
31710\ No newline at end of file
31711diff --git a/ohos_nweb/src/cef_delegate/nweb_cookie_manager_delegate.h b/ohos_nweb/src/cef_delegate/nweb_cookie_manager_delegate.h
31712new file mode 100644
31713index 0000000000..cb4c60b625
31714--- /dev/null
31715+++ b/ohos_nweb/src/cef_delegate/nweb_cookie_manager_delegate.h
31716@@ -0,0 +1,41 @@
31717+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
31718+// Use of this source code is governed by a BSD-style license that can be
31719+// found in the LICENSE file.
31720+
31721+#ifndef NWEB_COOKIE_MANAGER_DELEGATE_H
31722+#define NWEB_COOKIE_MANAGER_DELEGATE_H
31723+
31724+#include "cef/include/cef_base.h"
31725+#include "cef/include/cef_cookie.h"
31726+#include "nweb_cookie_manager_delegate_interface.h"
31727+#include "nweb_value_callback.h"
31728+
31729+namespace OHOS::NWeb {
31730+class NWebCookieManagerDelegate : public NWebCookieManagerDelegateInterface {
31731+ public:
31732+  NWebCookieManagerDelegate();
31733+  ~NWebCookieManagerDelegate() = default;
31734+
31735+  bool IsAcceptCookieAllowed() override;
31736+  void PutAcceptCookieEnabled(bool accept) override;
31737+  bool IsFileURLSchemeCookiesAllowed() override;
31738+  void PutAcceptFileURLSchemeCookiesEnabled(bool allow) override;
31739+  void ReturnCookie(
31740+      const std::string& url,
31741+      std::shared_ptr<NWebValueCallback<std::string>> callback) override;
31742+  void SetCookie(const std::string& url,
31743+                 const std::string& value,
31744+                 std::shared_ptr<NWebValueCallback<bool>> callback) override;
31745+  void ExistCookies(std::shared_ptr<NWebValueCallback<bool>> callback) override;
31746+  void Store(std::shared_ptr<NWebValueCallback<bool>> callback) override;
31747+  void DeleteSessionCookies(
31748+      std::shared_ptr<NWebValueCallback<bool>> callback) override;
31749+  void DeleteCookieEntirely(
31750+      std::shared_ptr<NWebValueCallback<bool>> callback) override;
31751+
31752+ private:
31753+  CefRefPtr<CefCookieManager> GetGlobalCookieManager();
31754+  CefRefPtr<CefCookieManager> cookie_manager_ = nullptr;
31755+};
31756+}  // namespace OHOS::NWeb
31757+#endif
31758\ No newline at end of file
31759diff --git a/ohos_nweb/src/cef_delegate/nweb_delegate.cc b/ohos_nweb/src/cef_delegate/nweb_delegate.cc
31760new file mode 100755
31761index 0000000000..16a7c15f74
31762--- /dev/null
31763+++ b/ohos_nweb/src/cef_delegate/nweb_delegate.cc
31764@@ -0,0 +1,459 @@
31765+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
31766+// Use of this source code is governed by a BSD-style license that can be
31767+// found in the LICENSE file.
31768+
31769+#include "nweb_delegate.h"
31770+
31771+#include <thread>
31772+#include "nweb_application.h"
31773+#include "nweb_handler_delegate.h"
31774+#include "nweb_render_handler.h"
31775+
31776+#include "cef/include/base/cef_logging.h"
31777+#include "cef/include/cef_app.h"
31778+#include "nweb_preference_delegate.h"
31779+
31780+namespace OHOS::NWeb {
31781+class JavaScriptResultCallbackImpl : public CefJavaScriptResultCallback {
31782+ public:
31783+  JavaScriptResultCallbackImpl(
31784+      std::shared_ptr<NWebValueCallback<std::string>> callback)
31785+      : callback_(callback){};
31786+  void OnJavaScriptExeResult(const CefString& result) override {
31787+    if (callback_ != nullptr) {
31788+      callback_->OnReceiveValue(result.ToString());
31789+    }
31790+  }
31791+
31792+ private:
31793+  std::shared_ptr<NWebValueCallback<std::string>> callback_;
31794+
31795+  IMPLEMENT_REFCOUNTING(JavaScriptResultCallbackImpl);
31796+  DISALLOW_COPY_AND_ASSIGN(JavaScriptResultCallbackImpl);
31797+};
31798+
31799+NWebDelegate::NWebDelegate(int argc, const char* argv[])
31800+    : argc_(argc), argv_(argv) {}
31801+
31802+bool NWebDelegate::Init() {
31803+  preference_delegate_ = std::make_shared<NWebPreferenceDelegate>();
31804+
31805+  render_handler_ = NWebRenderHandler::Create();
31806+  if (render_handler_ == nullptr) {
31807+    return false;
31808+  }
31809+
31810+  event_handler_ = NWebEventHandler::Create();
31811+  if (event_handler_ == nullptr) {
31812+    return false;
31813+  }
31814+
31815+  std::string url_for_init = "";
31816+  InitializeCef(url_for_init);
31817+
31818+  return true;
31819+}
31820+
31821+void NWebDelegate::OnDestroy(bool is_close_all) {
31822+  if (handler_delegate_ != nullptr) {
31823+    handler_delegate_->OnDestroy();
31824+  }
31825+  if (preference_delegate_ != nullptr) {
31826+    preference_delegate_->OnDestroy();
31827+  }
31828+  if (is_close_all) {
31829+    LOG(INFO) << "ready to shutdown";
31830+    CefShutdown();
31831+  }
31832+}
31833+
31834+void NWebDelegate::RegisterDownLoadListener(
31835+    std::shared_ptr<NWebDownloadCallback> download_listener) {
31836+  if (handler_delegate_ == nullptr) {
31837+    LOG(ERROR)
31838+        << "fail to register download listener, NWEB handler is nullptr";
31839+    return;
31840+  }
31841+  handler_delegate_->RegisterDownLoadListener(download_listener);
31842+}
31843+
31844+void NWebDelegate::RegisterNWebHandler(std::shared_ptr<NWebHandler> handler) {
31845+  if (handler_delegate_ == nullptr) {
31846+    LOG(ERROR)
31847+        << "fail to register nweb handler, nweb handler delegate is nullptr";
31848+    return;
31849+  }
31850+  handler_delegate_->RegisterNWebHandler(handler);
31851+}
31852+
31853+void NWebDelegate::SetInputMethodClient(
31854+    CefRefPtr<NWebInputMethodClient> client) {
31855+  if (render_handler_ == nullptr) {
31856+    LOG(ERROR)
31857+        << "fail to register inputmethod client, render handler is nullptr";
31858+    return;
31859+  }
31860+  render_handler_->SetInputMethodClient(client);
31861+}
31862+
31863+void NWebDelegate::RegisterRenderCb(
31864+    std::function<void(const char*)> render_update_cb) {
31865+  if (render_handler_ != nullptr) {
31866+    render_handler_->RegisterRenderCb(render_update_cb);
31867+  }
31868+}
31869+
31870+void NWebDelegate::Resize(uint32_t width, uint32_t height) {
31871+  if (render_handler_ != nullptr) {
31872+    render_handler_->Resize(width, height);
31873+  }
31874+}
31875+
31876+void NWebDelegate::OnTouchPress(int32_t id, double x, double y) {
31877+  if (event_handler_ != nullptr) {
31878+    event_handler_->OnTouchPress(id, x, y);
31879+  }
31880+}
31881+
31882+void NWebDelegate::OnTouchRelease(int32_t id, double x, double y) {
31883+  if (event_handler_ != nullptr) {
31884+    event_handler_->OnTouchRelease(id, x, y);
31885+  }
31886+}
31887+
31888+void NWebDelegate::OnTouchMove(int32_t id, double x, double y) {
31889+  if (event_handler_ != nullptr) {
31890+    event_handler_->OnTouchMove(id, x, y);
31891+  }
31892+}
31893+
31894+void NWebDelegate::OnTouchCancel() {
31895+  if (event_handler_ != nullptr) {
31896+    event_handler_->OnTouchCancel();
31897+  }
31898+}
31899+
31900+std::shared_ptr<NWebPreference> NWebDelegate::GetPreference() const {
31901+  return preference_delegate_;
31902+}
31903+
31904+void NWebDelegate::Load(const std::string& url) {
31905+  LOG(INFO) << "NWebDelegate::Load url=" << url;
31906+  auto browser = GetBrowser();
31907+  if (browser != nullptr) {
31908+    browser->GetMainFrame()->LoadURL(CefString(url));
31909+  }
31910+  RequestVisitedHistory();
31911+}
31912+
31913+bool NWebDelegate::IsNavigatebackwardAllowed() const {
31914+  LOG(INFO) << "NWebDelegate::IsNavigatebackwardAllowed";
31915+  if (GetBrowser().get()) {
31916+    return GetBrowser()->CanGoBack();
31917+  }
31918+  return false;
31919+}
31920+
31921+bool NWebDelegate::IsNavigateForwardAllowed() const {
31922+  LOG(INFO) << "NWebDelegate::IsNavigateForwardAllowed";
31923+  if (GetBrowser().get()) {
31924+    return GetBrowser()->CanGoForward();
31925+  }
31926+  return false;
31927+}
31928+
31929+bool NWebDelegate::CanNavigateBackOrForward(int num_steps) const {
31930+  LOG(INFO) << "NWebDelegate::CanNavigateBackOrForward";
31931+  if (GetBrowser().get()) {
31932+    return GetBrowser()->CanGoBackOrForward(num_steps);
31933+  }
31934+  return false;
31935+}
31936+
31937+void NWebDelegate::NavigateBack() const {
31938+  LOG(INFO) << "NWebDelegate::NavigateBack";
31939+  if (GetBrowser().get()) {
31940+    GetBrowser()->GoBack();
31941+  }
31942+}
31943+
31944+void NWebDelegate::NavigateForward() const {
31945+  LOG(INFO) << "NWebDelegate::NavigateForward";
31946+  if (GetBrowser().get()) {
31947+    GetBrowser()->GoForward();
31948+  }
31949+}
31950+
31951+void NWebDelegate::Reload() const {
31952+  LOG(INFO) << "NWebDelegate::Reload";
31953+  if (GetBrowser().get()) {
31954+    GetBrowser()->Reload();
31955+  }
31956+}
31957+
31958+void NWebDelegate::Zoom(float zoomFactor) const {
31959+  LOG(INFO) << "NWebDelegate::Zoom";
31960+  if (GetBrowser().get()) {
31961+    double curFactor = GetBrowser()->GetHost()->GetZoomLevel();
31962+    GetBrowser()->GetHost()->SetZoomLevel(zoomFactor + curFactor);
31963+  }
31964+}
31965+
31966+void NWebDelegate::Stop() const {
31967+  LOG(INFO) << "NWebDelegate::Stop";
31968+  if (GetBrowser().get()) {
31969+    GetBrowser()->StopLoad();
31970+  }
31971+}
31972+
31973+void NWebDelegate::ExecuteJavaScript(const std::string& code) const {
31974+  LOG(INFO) << "NWebDelegate::ExecuteJavaScript";
31975+  if (GetBrowser().get()) {
31976+    GetBrowser()->GetMainFrame()->ExecuteJavaScript(
31977+        code, GetBrowser()->GetMainFrame()->GetURL(), 0);
31978+  }
31979+}
31980+
31981+void NWebDelegate::ExecuteJavaScript(
31982+    const std::string& code,
31983+    std::shared_ptr<NWebValueCallback<std::string>> callback) const {
31984+  LOG(INFO) << "NWebDelegate::ExecuteJavaScript with callback";
31985+
31986+  if (GetBrowser().get()) {
31987+    CefRefPtr<JavaScriptResultCallbackImpl> JsResultCb =
31988+        new JavaScriptResultCallbackImpl(callback);
31989+    GetBrowser()->GetHost()->ExecuteJavaScript(code, JsResultCb);
31990+  }
31991+}
31992+
31993+void NWebDelegate::PutBackgroundColor(int color) const {
31994+  LOG(INFO) << "NWebDelegate::PutBackgroundColor";
31995+  if (GetBrowser().get()) {
31996+    GetBrowser()->GetHost()->SetBackgroundColor(color);
31997+  }
31998+}
31999+
32000+void NWebDelegate::OnPause() {
32001+  LOG(INFO) << "NWebDelegate::OnPause";
32002+  if (!GetBrowser().get()) {
32003+    return;
32004+  }
32005+
32006+  // Remove focus from the browser.
32007+  GetBrowser()->GetHost()->SendFocusEvent(false);
32008+
32009+  if (!hidden_) {
32010+    // Set the browser as hidden.
32011+    GetBrowser()->GetHost()->WasHidden(true);
32012+    hidden_ = true;
32013+  }
32014+}
32015+
32016+void NWebDelegate::OnContinue() {
32017+  LOG(INFO) << "NWebDelegate::OnContinue";
32018+  if (!GetBrowser().get()) {
32019+    return;
32020+  }
32021+
32022+  if (hidden_) {
32023+    // Set the browser as visible.
32024+    GetBrowser()->GetHost()->WasHidden(false);
32025+    hidden_ = false;
32026+  }
32027+
32028+  // Give focus to the browser.
32029+  GetBrowser()->GetHost()->SendFocusEvent(true);
32030+}
32031+
32032+void NWebDelegate::InitializeCef(std::string url) {
32033+  handler_delegate_ = NWebHandlerDelegate::Create(
32034+      preference_delegate_, render_handler_, event_handler_);
32035+  nweb_app_ =
32036+      new NWebApplication(preference_delegate_, url, handler_delegate_);
32037+
32038+  CefMainArgs mainargs(argc_, const_cast<char**>(argv_));
32039+  int exitcode = CefExecuteProcess(mainargs, nweb_app_, NULL);
32040+  if (exitcode >= 0) {
32041+    LOG(INFO) << "CefExecuteProcess returned : " << exitcode;
32042+    return;
32043+  }
32044+
32045+  CefSettings settings;
32046+  settings.windowless_rendering_enabled = true;
32047+  settings.log_severity = LOGSEVERITY_INFO;
32048+  settings.multi_threaded_message_loop = false;
32049+
32050+  settings.persist_session_cookies = true;
32051+
32052+#if !defined(CEF_USE_SANDBOX)
32053+  settings.no_sandbox = true;
32054+#endif
32055+
32056+  static bool is_initialized = false;
32057+  static std::mutex init_mtx;
32058+  std::unique_lock<std::mutex> lk(init_mtx);
32059+  if (is_initialized) {
32060+    return nweb_app_->CreateBrowser();
32061+  }
32062+
32063+  if (!CefInitialize(mainargs, settings, nweb_app_, NULL)) {
32064+    LOG(ERROR) << "CefInitialize failed";
32065+  } else {
32066+    is_initialized = true;
32067+  }
32068+}
32069+
32070+void NWebDelegate::RunMessageLoop() {
32071+  // Run the CEF message loop.
32072+  // This will block until CefQuitMessageLoop() is called.
32073+  CefRunMessageLoop();
32074+}
32075+
32076+std::string NWebDelegate::Title() {
32077+  if (!GetBrowser().get()) {
32078+    return "";
32079+  }
32080+  return GetBrowser()->GetHost()->Title();
32081+}
32082+
32083+HitTestResult NWebDelegate::GetHitTestResult() const {
32084+  HitTestResult data;
32085+  if (!GetBrowser().get()) {
32086+    return data;
32087+  }
32088+  int type;
32089+  CefString extra_data;
32090+  GetBrowser()->GetHost()->GetHitData(type, extra_data);
32091+  data.SetType(type);
32092+  data.SetExtra(extra_data.ToString());
32093+  return data;
32094+}
32095+
32096+int NWebDelegate::PageLoadProgress() {
32097+  if (!GetBrowser().get()) {
32098+    return 0;
32099+  }
32100+  return GetBrowser()->GetHost()->PageLoadProgress();
32101+}
32102+
32103+float NWebDelegate::Scale() {
32104+  if (!GetBrowser().get()) {
32105+    return 0;
32106+  }
32107+  return GetBrowser()->GetHost()->Scale();
32108+}
32109+
32110+void NWebDelegate::Load(
32111+    std::string& url,
32112+    std::map<std::string, std::string> additionalHttpHeaders) {
32113+  std::map<std::string, std::string>::iterator iter;
32114+  std::string extra = "";
32115+  for (iter = additionalHttpHeaders.begin();
32116+       iter != additionalHttpHeaders.end(); iter++) {
32117+    const std::string& key = iter->first;
32118+    const std::string& value = iter->second;
32119+    if (!key.empty()) {
32120+      // Delimit with "\r\n".
32121+      if (!value.empty())
32122+        extra += "\r\n";
32123+      extra += std::string(key) + ": " + std::string(value);
32124+    }
32125+  }
32126+  auto browser = GetBrowser();
32127+  if (browser != nullptr) {
32128+    browser->GetMainFrame()->LoadHeaderUrl(CefString(url), CefString(extra));
32129+  }
32130+  RequestVisitedHistory();
32131+}
32132+
32133+void NWebDelegate::LoadWithDataAndBaseUrl(const std::string& baseUrl,
32134+                                          const std::string& data,
32135+                                          const std::string& mimeType,
32136+                                          const std::string& encoding,
32137+                                          const std::string& historyUrl) {
32138+  LOG(INFO) << "NWebDelegate::LoadWithDataAndBaseUrl";
32139+  if (!GetBrowser().get()) {
32140+    return;
32141+  }
32142+  GetBrowser()->GetHost()->LoadWithDataAndBaseUrl(baseUrl, data, mimeType,
32143+                                                  encoding, historyUrl);
32144+  RequestVisitedHistory();
32145+}
32146+
32147+void NWebDelegate::LoadWithData(const std::string& data,
32148+                                const std::string& mimeType,
32149+                                const std::string& encoding) {
32150+  LOG(INFO) << "NWebDelegate::LoadWithData";
32151+  if (!GetBrowser().get()) {
32152+    return;
32153+  }
32154+  GetBrowser()->GetHost()->LoadWithData(data, mimeType, encoding);
32155+  RequestVisitedHistory();
32156+}
32157+
32158+const CefRefPtr<CefBrowser> NWebDelegate::GetBrowser() const {
32159+  if (handler_delegate_) {
32160+    return handler_delegate_->GetBrowser();
32161+  }
32162+  return nullptr;
32163+}
32164+
32165+bool NWebDelegate::IsReady() {
32166+  return GetBrowser() != nullptr;
32167+}
32168+
32169+void NWebDelegate::RequestVisitedHistory() {
32170+  if (!GetBrowser().get()) {
32171+    return;
32172+  }
32173+  if (!has_requested_visited_history) {
32174+    has_requested_visited_history = true;
32175+    if (handler_delegate_) {
32176+      std::vector<std::string> outUrls = handler_delegate_->GetVisitedHistory();
32177+      std::vector<CefString> urls = std::vector<CefString>();
32178+      for (auto url : outUrls) {
32179+        urls.push_back(url);
32180+      }
32181+      GetBrowser()->GetHost()->AddVisitedLinks(urls);
32182+    }
32183+  }
32184+}
32185+
32186+int NWebDelegate::ContentHeight() {
32187+  if (render_handler_ != nullptr) {
32188+    return render_handler_->ContentHeight();
32189+  }
32190+  return 0;
32191+}
32192+
32193+void NWebDelegate::RegisterArkJSfunction(
32194+    const std::string& object_name,
32195+    const std::vector<std::string>& method_list) const {
32196+  LOG(INFO) << "RegisterArkJSfunction name : " << object_name.c_str();
32197+  std::vector<CefString> method_vector;
32198+  for (std::string method : method_list) {
32199+    method_vector.push_back(method);
32200+  }
32201+  GetBrowser()->GetHost()->RegisterArkJSfunction(object_name, method_vector);
32202+}
32203+
32204+void NWebDelegate::UnregisterArkJSfunction(
32205+    const std::string& object_name,
32206+    const std::vector<std::string>& method_list) const {
32207+  LOG(INFO) << "UnregisterArkJSfunction name : " << object_name.c_str();
32208+  std::vector<CefString> method_vector;
32209+  for (std::string method : method_list) {
32210+    method_vector.push_back(method);
32211+  }
32212+  GetBrowser()->GetHost()->UnregisterArkJSfunction(object_name, method_vector);
32213+}
32214+
32215+void NWebDelegate::RegisterNWebJavaScriptCallBack(
32216+    std::shared_ptr<NWebJavaScriptResultCallBack> callback) {
32217+  if (handler_delegate_ == nullptr) {
32218+    LOG(ERROR) << "fail to register NWEB client, NWEB handler is nullptr";
32219+    return;
32220+  }
32221+  handler_delegate_->RegisterNWebJavaScriptCallBack(callback);
32222+}
32223+}  // namespace OHOS::NWEB
32224\ No newline at end of file
32225diff --git a/ohos_nweb/src/cef_delegate/nweb_delegate.h b/ohos_nweb/src/cef_delegate/nweb_delegate.h
32226new file mode 100755
32227index 0000000000..935ca4ef7f
32228--- /dev/null
32229+++ b/ohos_nweb/src/cef_delegate/nweb_delegate.h
32230@@ -0,0 +1,109 @@
32231+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
32232+// Use of this source code is governed by a BSD-style license that can be
32233+// found in the LICENSE file.
32234+
32235+#ifndef NWEB_DELEGATE_H
32236+#define NWEB_DELEGATE_H
32237+
32238+#include <condition_variable>
32239+#include <string>
32240+#include "cef/include/cef_command_line.h"
32241+#include "nweb_application.h"
32242+#include "nweb_delegate_interface.h"
32243+#include "nweb_event_handler.h"
32244+#include "nweb_handler_delegate.h"
32245+#include "nweb_inputmethod_client.h"
32246+#include "nweb_render_handler.h"
32247+
32248+namespace OHOS::NWeb {
32249+class NWebDelegate : public NWebDelegateInterface,
32250+                        public virtual CefRefCount {
32251+ public:
32252+  NWebDelegate(int argc, const char* argv[]);
32253+  ~NWebDelegate() = default;
32254+  bool Init();
32255+
32256+  bool IsReady() override;
32257+  void OnDestroy(bool is_close_all) override;
32258+
32259+  void RegisterDownLoadListener(
32260+      std::shared_ptr<NWebDownloadCallback> downloadListener) override;
32261+  void RegisterNWebHandler(std::shared_ptr<NWebHandler> handler) override;
32262+  void RegisterRenderCb(
32263+      std::function<void(const char*)> render_update_cb) override;
32264+
32265+  void SetInputMethodClient(
32266+      CefRefPtr<NWebInputMethodClient> client) override;
32267+
32268+  void Resize(uint32_t width, uint32_t height) override;
32269+  void OnTouchPress(int32_t id, double x, double y) override;
32270+  void OnTouchRelease(int32_t id, double x, double y) override;
32271+  void OnTouchMove(int32_t id, double x, double y) override;
32272+  void OnTouchCancel() override;
32273+
32274+  void Load(const std::string& url) override;
32275+  bool IsNavigatebackwardAllowed() const override;
32276+  bool IsNavigateForwardAllowed() const override;
32277+  bool CanNavigateBackOrForward(int num_steps) const override;
32278+  void NavigateBack() const override;
32279+  void NavigateForward() const override;
32280+  void Reload() const override;
32281+  void Zoom(float zoomFactor) const override;
32282+  void Stop() const override;
32283+  void ExecuteJavaScript(const std::string& code) const override;
32284+  void ExecuteJavaScript(
32285+      const std::string& code,
32286+      std::shared_ptr<NWebValueCallback<std::string>> callback) const override;
32287+  void PutBackgroundColor(int color) const override;
32288+  void OnPause() override;
32289+  void OnContinue() override;
32290+  std::shared_ptr<NWebPreference> GetPreference() const override;
32291+  std::string Title() override;
32292+  HitTestResult GetHitTestResult() const override;
32293+  int PageLoadProgress() override;
32294+  float Scale() override;
32295+  void Load(std::string& url,
32296+            std::map<std::string, std::string> additionalHttpHeaders) override;
32297+  void LoadWithDataAndBaseUrl(const std::string& baseUrl,
32298+                              const std::string& data,
32299+                              const std::string& mimeType,
32300+                              const std::string& encoding,
32301+                              const std::string& historyUrl) override;
32302+  void LoadWithData(const std::string& data,
32303+                    const std::string& mimeType,
32304+                    const std::string& encoding) override;
32305+  int ContentHeight() override;
32306+  void RegisterArkJSfunction(
32307+      const std::string& object_name,
32308+      const std::vector<std::string>& method_list) const override;
32309+
32310+  void UnregisterArkJSfunction(
32311+      const std::string& object_name,
32312+      const std::vector<std::string>& method_list) const override;
32313+
32314+  void RegisterNWebJavaScriptCallBack(
32315+      std::shared_ptr<NWebJavaScriptResultCallBack> callback) override;
32316+
32317+ public:
32318+  int argc_;
32319+  const char** argv_;
32320+
32321+ private:
32322+  void RunMessageLoop();
32323+  void InitializeCef(std::string url);
32324+  const CefRefPtr<CefBrowser> GetBrowser() const;
32325+  void RequestVisitedHistory();
32326+
32327+ private:
32328+  bool has_requested_visited_history = false;
32329+  CefRefPtr<NWebApplication> nweb_app_ = nullptr;
32330+  CefRefPtr<NWebHandlerDelegate> handler_delegate_ = nullptr;
32331+  CefRefPtr<NWebRenderHandler> render_handler_ = nullptr;
32332+  std::shared_ptr<NWebEventHandler> event_handler_ = nullptr;
32333+  std::shared_ptr<NWebPreferenceDelegate> preference_delegate_ = nullptr;
32334+
32335+  // Members only accessed on the main thread.
32336+  bool hidden_ = false;
32337+};
32338+}  // namespace OHOS::NWeb
32339+#endif
32340diff --git a/ohos_nweb/src/cef_delegate/nweb_event_handler.cc b/ohos_nweb/src/cef_delegate/nweb_event_handler.cc
32341new file mode 100644
32342index 0000000000..e737f46e20
32343--- /dev/null
32344+++ b/ohos_nweb/src/cef_delegate/nweb_event_handler.cc
32345@@ -0,0 +1,74 @@
32346+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
32347+// Use of this source code is governed by a BSD-style license that can be
32348+// found in the LICENSE file.
32349+
32350+#include "nweb_event_handler.h"
32351+
32352+#include "cef/include/base/cef_logging.h"
32353+#include "cef/include/base/cef_macros.h"
32354+#include "cef/include/internal/cef_types.h"
32355+#include "cef/include/internal/cef_types_wrappers.h"
32356+
32357+namespace OHOS::NWeb {
32358+// static
32359+std::shared_ptr<NWebEventHandler> NWebEventHandler::Create() {
32360+  auto event_handler = std::make_shared<NWebEventHandler>();
32361+  if (event_handler == nullptr) {
32362+    LOG(ERROR) << "fail to create NWebEventHandler instance";
32363+    return nullptr;
32364+  }
32365+  return event_handler;
32366+}
32367+
32368+void NWebEventHandler::OnDestroy() {
32369+  browser_ = nullptr;
32370+}
32371+
32372+void NWebEventHandler::SetBrowser(CefRefPtr<CefBrowser> browser) {
32373+  browser_ = browser;
32374+}
32375+
32376+void NWebEventHandler::OnTouchPress(int32_t id, double x, double y) {
32377+  CefTouchEvent touch_pressed;
32378+  touch_pressed.type = CEF_TET_PRESSED;
32379+  touch_pressed.id = id;
32380+  touch_pressed.x = x;
32381+  touch_pressed.y = y;
32382+  touch_pressed.modifiers = EVENTFLAG_LEFT_MOUSE_BUTTON;
32383+  if (browser_ && browser_->GetHost()) {
32384+    browser_->GetHost()->SendTouchEvent(touch_pressed);
32385+  }
32386+}
32387+
32388+void NWebEventHandler::OnTouchMove(int32_t id, double x, double y) {
32389+  CefTouchEvent touch_move;
32390+  touch_move.type = CEF_TET_MOVED;
32391+  touch_move.id = id;
32392+  touch_move.x = x;
32393+  touch_move.y = y;
32394+  touch_move.modifiers = EVENTFLAG_LEFT_MOUSE_BUTTON;
32395+  if (browser_ && browser_->GetHost()) {
32396+    browser_->GetHost()->SendTouchEvent(touch_move);
32397+  }
32398+}
32399+
32400+void NWebEventHandler::OnTouchRelease(int32_t id, double x, double y) {
32401+  CefTouchEvent touch_end;
32402+  touch_end.type = CEF_TET_RELEASED;
32403+  touch_end.id = id;
32404+  touch_end.x = x;
32405+  touch_end.y = y;
32406+  touch_end.modifiers = EVENTFLAG_LEFT_MOUSE_BUTTON;
32407+  if (browser_ && browser_->GetHost()) {
32408+    browser_->GetHost()->SendTouchEvent(touch_end);
32409+  }
32410+}
32411+
32412+void NWebEventHandler::OnTouchCancel() {
32413+  CefTouchEvent touch_cancelled;
32414+  touch_cancelled.type = CEF_TET_CANCELLED;
32415+  if (browser_ && browser_->GetHost()) {
32416+    browser_->GetHost()->SendTouchEvent(touch_cancelled);
32417+  }
32418+}
32419+}  // namespace OHOS::NWeb
32420diff --git a/ohos_nweb/src/cef_delegate/nweb_event_handler.h b/ohos_nweb/src/cef_delegate/nweb_event_handler.h
32421new file mode 100644
32422index 0000000000..4cc8b0c0d9
32423--- /dev/null
32424+++ b/ohos_nweb/src/cef_delegate/nweb_event_handler.h
32425@@ -0,0 +1,32 @@
32426+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
32427+// Use of this source code is governed by a BSD-style license that can be
32428+// found in the LICENSE file.
32429+
32430+#ifndef NWEB_EVENT_HANDLER_H
32431+#define NWEB_EVENT_HANDLER_H
32432+
32433+#include "cef/include/cef_client.h"
32434+
32435+namespace OHOS::NWeb {
32436+class NWebEventHandler {
32437+ public:
32438+  static std::shared_ptr<NWebEventHandler> Create();
32439+
32440+  NWebEventHandler() = default;
32441+  ~NWebEventHandler() = default;
32442+  void OnDestroy();
32443+
32444+  void SetBrowser(CefRefPtr<CefBrowser> browser);
32445+
32446+  void OnTouchPress(int32_t id, double x, double y);
32447+  void OnTouchMove(int32_t id, double x, double y);
32448+  void OnTouchRelease(int32_t id, double x, double y);
32449+  void OnTouchCancel();
32450+  void OnKeyBack();
32451+
32452+ private:
32453+  CefRefPtr<CefBrowser> browser_ = nullptr;
32454+};
32455+}  // namespace OHOS::NWeb
32456+
32457+#endif  // NWEB_EVENT_HANDLER_H
32458diff --git a/ohos_nweb/src/cef_delegate/nweb_geolocation_callback.cc b/ohos_nweb/src/cef_delegate/nweb_geolocation_callback.cc
32459new file mode 100644
32460index 0000000000..893b92a9bb
32461--- /dev/null
32462+++ b/ohos_nweb/src/cef_delegate/nweb_geolocation_callback.cc
32463@@ -0,0 +1,26 @@
32464+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
32465+// Use of this source code is governed by a BSD-style license that can be
32466+// found in the LICENSE file.
32467+
32468+#include "ohos_nweb/src/cef_delegate/nweb_geolocation_callback.h"
32469+#include "base/logging.h"
32470+
32471+namespace OHOS::NWeb {
32472+NWebGeolocationCallback::NWebGeolocationCallback(CefRefPtr<CefBrowser> browser)
32473+    : browser_(browser) {}
32474+
32475+void NWebGeolocationCallback::GeolocationCallbackInvoke(
32476+    const std::string& origin,
32477+    bool allow,
32478+    bool retain) {
32479+  if (retain) {
32480+    if (allow) {
32481+      browser_->GetGeolocationPermissions()->Enabled(origin);
32482+    } else {
32483+      browser_->GetGeolocationPermissions()->Disabled(origin);
32484+    }
32485+  }
32486+  browser_->GetPermissionRequestDelegate()->NotifyGeolocationPermission(allow,
32487+                                                                        origin);
32488+}
32489+}  // namespace OHOS::NWeb
32490\ No newline at end of file
32491diff --git a/ohos_nweb/src/cef_delegate/nweb_geolocation_callback.h b/ohos_nweb/src/cef_delegate/nweb_geolocation_callback.h
32492new file mode 100644
32493index 0000000000..7240ebdf2e
32494--- /dev/null
32495+++ b/ohos_nweb/src/cef_delegate/nweb_geolocation_callback.h
32496@@ -0,0 +1,26 @@
32497+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
32498+// Use of this source code is governed by a BSD-style license that can be
32499+// found in the LICENSE file.
32500+
32501+#ifndef NWEB_GEOLOCATION_CALLBACK_H
32502+#define NWEB_GEOLOCATION_CALLBACK_H
32503+
32504+#include "cef/include/cef_browser.h"
32505+#include "ohos_nweb/include/nweb_geolocation_callback_interface.h"
32506+
32507+namespace OHOS::NWeb {
32508+class NWebGeolocationCallback : public NWebGeolocationCallbackInterface {
32509+ public:
32510+  explicit NWebGeolocationCallback(CefRefPtr<CefBrowser> browser);
32511+  ~NWebGeolocationCallback() = default;
32512+
32513+  void GeolocationCallbackInvoke(const std::string& origin,
32514+                                 bool allow,
32515+                                 bool retain) override;
32516+
32517+ private:
32518+  CefRefPtr<CefBrowser> browser_ = nullptr;
32519+};
32520+}  // namespace OHOS::NWeb
32521+
32522+#endif  // NWEB_GEOLOCATION_CALLBACK_H
32523diff --git a/ohos_nweb/src/cef_delegate/nweb_handler_delegate.cc b/ohos_nweb/src/cef_delegate/nweb_handler_delegate.cc
32524new file mode 100755
32525index 0000000000..6c3bef39d1
32526--- /dev/null
32527+++ b/ohos_nweb/src/cef_delegate/nweb_handler_delegate.cc
32528@@ -0,0 +1,809 @@
32529+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
32530+// Use of this source code is governed by a BSD-style license that can be
32531+// found in the LICENSE file.
32532+
32533+#include "nweb_handler_delegate.h"
32534+
32535+#include <thread>
32536+
32537+#include "base/bind.h"
32538+#include "base/callback.h"
32539+#include "cef/include/cef_app.h"
32540+#include "cef/include/cef_parser.h"
32541+#include "cef/include/wrapper/cef_closure_task.h"
32542+#include "cef/include/wrapper/cef_helpers.h"
32543+#include "nweb_access_request_delegate.h"
32544+#include "nweb_geolocation_callback.h"
32545+#include "nweb_js_dialog_result_impl.h"
32546+#include "nweb_resource_handler.h"
32547+#include "nweb_url_resource_error_impl.h"
32548+#include "nweb_url_resource_request_impl.h"
32549+#include "nweb_url_resource_response.h"
32550+
32551+namespace OHOS::NWeb {
32552+namespace {
32553+ImageColorType TransformColorType(cef_color_type_t color_type) {
32554+  switch (color_type) {
32555+    case CEF_COLOR_TYPE_RGBA_8888:
32556+      return ImageColorType::COLOR_TYPE_RGBA_8888;
32557+    case CEF_COLOR_TYPE_BGRA_8888:
32558+      return ImageColorType::COLOR_TYPE_BGRA_8888;
32559+    default:
32560+      return ImageColorType::COLOR_TYPE_UNKNOWN;
32561+  }
32562+}
32563+
32564+ImageAlphaType TransformAlphaType(cef_alpha_type_t alpha_type) {
32565+  switch (alpha_type) {
32566+    case CEF_ALPHA_TYPE_OPAQUE:
32567+      return ImageAlphaType::ALPHA_TYPE_OPAQUE;
32568+    case CEF_ALPHA_TYPE_PREMULTIPLIED:
32569+      return ImageAlphaType::ALPHA_TYPE_PREMULTIPLIED;
32570+    case CEF_ALPHA_TYPE_POSTMULTIPLIED:
32571+      return ImageAlphaType::ALPHA_TYPE_POSTMULTIPLIED;
32572+    default:
32573+      return ImageAlphaType::ALPHA_TYPE_UNKNOWN;
32574+  }
32575+}
32576+
32577+void ConvertMapToHeaderMap(const CefRequest::HeaderMap& headers,
32578+                           std::map<std::string, std::string>& map) {
32579+  for (auto iter = headers.begin(); iter != headers.end(); ++iter) {
32580+    map.emplace(iter->first.ToString(), iter->second.ToString());
32581+  }
32582+}
32583+
32584+NWebConsoleLog::NWebConsoleLogLevel ConvertConsoleMessageLevel(
32585+    cef_log_severity_t message_level) {
32586+  switch (message_level) {
32587+    case LOGSEVERITY_DEBUG:
32588+      return NWebConsoleLog::NWebConsoleLogLevel::DEBUG;
32589+    case LOGSEVERITY_INFO:
32590+      return NWebConsoleLog::NWebConsoleLogLevel::INFO;
32591+    case LOGSEVERITY_WARNING:
32592+      return NWebConsoleLog::NWebConsoleLogLevel::WARNING;
32593+    case LOGSEVERITY_ERROR:
32594+      return NWebConsoleLog::NWebConsoleLogLevel::ERROR;
32595+    default:
32596+      return NWebConsoleLog::NWebConsoleLogLevel::UNKNOWN;
32597+  }
32598+}
32599+}  // namespace
32600+
32601+// static
32602+CefRefPtr<NWebHandlerDelegate> NWebHandlerDelegate::Create(
32603+    std::shared_ptr<NWebPreferenceDelegate> preference_delegate,
32604+    CefRefPtr<NWebRenderHandler> render_handler,
32605+    std::shared_ptr<NWebEventHandler> event_handler) {
32606+  CefRefPtr<NWebHandlerDelegate> handler_delegate = new NWebHandlerDelegate(
32607+      preference_delegate, render_handler, event_handler);
32608+  if (handler_delegate == nullptr) {
32609+    LOG(ERROR) << "fail to create NWebHandlerDelegate instance";
32610+    return nullptr;
32611+  }
32612+  return handler_delegate;
32613+}
32614+
32615+NWebHandlerDelegate::NWebHandlerDelegate(
32616+    std::shared_ptr<NWebPreferenceDelegate> preference_delegate,
32617+    CefRefPtr<NWebRenderHandler> render_handler,
32618+    std::shared_ptr<NWebEventHandler> event_handler)
32619+    : preference_delegate_(preference_delegate),
32620+      render_handler_(render_handler),
32621+      event_handler_(event_handler) {}
32622+
32623+void NWebHandlerDelegate::OnDestroy() {
32624+  if (main_browser_) {
32625+    main_browser_->GetHost()->CloseBrowser(true);
32626+    main_browser_ = nullptr;
32627+  }
32628+  if (event_handler_) {
32629+    event_handler_->OnDestroy();
32630+  }
32631+}
32632+
32633+void NWebHandlerDelegate::RegisterDownLoadListener(
32634+    std::shared_ptr<NWebDownloadCallback> download_listener) {
32635+  download_listener_ = download_listener;
32636+}
32637+
32638+void NWebHandlerDelegate::RegisterNWebHandler(
32639+    std::shared_ptr<NWebHandler> handler) {
32640+  LOG(INFO) << "RegisterNWebHandler";
32641+  nweb_handler_ = handler;
32642+}
32643+
32644+void NWebHandlerDelegate::RegisterNWebJavaScriptCallBack(
32645+    std::shared_ptr<NWebJavaScriptResultCallBack> callback) {
32646+  nweb_javascript_callback_ = callback;
32647+}
32648+
32649+const CefRefPtr<CefBrowser> NWebHandlerDelegate::GetBrowser() {
32650+  return main_browser_;
32651+}
32652+
32653+bool NWebHandlerDelegate::IsClosing() const {
32654+  return is_closing_;
32655+}
32656+
32657+void NWebHandlerDelegate::CloseAllBrowsers(bool force_close) {
32658+  LOG(INFO) << "NWebHandlerDelegate::CloseAllBrowsers";
32659+  if (!CefCurrentlyOn(TID_UI)) {
32660+    // Execute on the UI thread.
32661+    CefPostTask(TID_UI, base::Bind(&NWebHandlerDelegate::CloseAllBrowsers, this,
32662+                                   force_close));
32663+    return;
32664+  }
32665+
32666+  if (browser_list_.empty()) {
32667+    return;
32668+  }
32669+
32670+  BrowserList::const_iterator it = browser_list_.begin();
32671+  for (; it != browser_list_.end(); ++it) {
32672+    (*it)->GetHost()->CloseBrowser(force_close);
32673+  }
32674+}
32675+
32676+/* CefClient methods begin */
32677+CefRefPtr<CefDownloadHandler> NWebHandlerDelegate::GetDownloadHandler() {
32678+  return this;
32679+}
32680+
32681+CefRefPtr<CefLifeSpanHandler> NWebHandlerDelegate::GetLifeSpanHandler() {
32682+  return this;
32683+}
32684+
32685+CefRefPtr<CefLoadHandler> NWebHandlerDelegate::GetLoadHandler() {
32686+  return this;
32687+}
32688+
32689+CefRefPtr<CefRenderHandler> NWebHandlerDelegate::GetRenderHandler() {
32690+  return render_handler_;
32691+}
32692+
32693+CefRefPtr<CefRequestHandler> NWebHandlerDelegate::GetRequestHandler() {
32694+  return this;
32695+}
32696+
32697+CefRefPtr<CefDisplayHandler> NWebHandlerDelegate::GetDisplayHandler() {
32698+  return this;
32699+}
32700+
32701+CefRefPtr<CefFocusHandler> NWebHandlerDelegate::GetFocusHandler() {
32702+  return this;
32703+}
32704+
32705+CefRefPtr<CefPermissionRequest> NWebHandlerDelegate::GetPermissionRequest() {
32706+  return this;
32707+}
32708+
32709+CefRefPtr<CefJSDialogHandler> NWebHandlerDelegate::GetJSDialogHandler() {
32710+  return this;
32711+}
32712+
32713+bool NWebHandlerDelegate::OnProcessMessageReceived(
32714+    CefRefPtr<CefBrowser> browser,
32715+    CefRefPtr<CefFrame> frame,
32716+    CefProcessId source_process,
32717+    CefRefPtr<CefProcessMessage> message) {
32718+  const std::string& messageName = message->GetName();
32719+
32720+  if (messageName == "router.push") {
32721+    CefRefPtr<CefListValue> pushMsgArgs = message->GetArgumentList();
32722+    CefString url = pushMsgArgs->GetString(0);
32723+    nweb_handler_->OnRouterPush(url.ToString());
32724+    return true;
32725+  }
32726+
32727+  if (messageName == "web.postmessage") {
32728+    CefRefPtr<CefListValue> postMsgArgs = message->GetArgumentList();
32729+    CefString postMsg = postMsgArgs->GetString(0);
32730+    nweb_handler_->OnMessage(postMsg.ToString());
32731+    return true;
32732+  }
32733+
32734+  return false;
32735+}
32736+/* CefClient methods end */
32737+
32738+/* CefLifeSpanHandler methods begin */
32739+void NWebHandlerDelegate::OnAfterCreated(CefRefPtr<CefBrowser> browser) {
32740+  LOG(INFO) << "NWebHandlerDelegate::OnAfterCreated";
32741+  CEF_REQUIRE_UI_THREAD();
32742+
32743+  if (!main_browser_) {
32744+    main_browser_ = browser;
32745+    event_handler_->SetBrowser(browser);
32746+  } else if (browser->IsPopup()) {
32747+    // Add to the list of existing browsers.
32748+    browser_list_.push_back(browser);
32749+  }
32750+
32751+  if (preference_delegate_.get()) {
32752+    preference_delegate_->SetBrowser(main_browser_);
32753+  } else {
32754+    LOG(ERROR) << "Failed to set browser to settings delegate";
32755+  }
32756+}
32757+
32758+bool NWebHandlerDelegate::DoClose(CefRefPtr<CefBrowser> browser) {
32759+  LOG(INFO) << "NWebHandlerDelegate::DoClose";
32760+  CEF_REQUIRE_UI_THREAD();
32761+
32762+  // Closing the main window requires special handling. See the DoClose()
32763+  // documentation in the CEF header for a detailed destription of this
32764+  // process.
32765+  if (browser_list_.size() == 1) {
32766+    // Set a flag to indicate that the window close should be allowed.
32767+    is_closing_ = true;
32768+  }
32769+
32770+  // Allow the close. For windowed browsers this will result in the OS close
32771+  // event being sent.
32772+  return false;
32773+}
32774+
32775+void NWebHandlerDelegate::OnBeforeClose(CefRefPtr<CefBrowser> browser) {
32776+  LOG(INFO) << "NWebHandlerDelegate::OnBeforeClose";
32777+  CEF_REQUIRE_UI_THREAD();
32778+
32779+  // Remove from the list of existing browsers.
32780+  BrowserList::iterator bit = browser_list_.begin();
32781+  for (; bit != browser_list_.end(); ++bit) {
32782+    if ((*bit)->IsSame(browser)) {
32783+      browser_list_.erase(bit);
32784+      break;
32785+    }
32786+  }
32787+}
32788+
32789+bool NWebHandlerDelegate::OnBeforePopup(
32790+    CefRefPtr<CefBrowser> browser,
32791+    CefRefPtr<CefFrame> frame,
32792+    const CefString& target_url,
32793+    const CefString& target_frame_name,
32794+    CefLifeSpanHandler::WindowOpenDisposition target_disposition,
32795+    bool user_gesture,
32796+    const CefPopupFeatures& popup_features,
32797+    CefWindowInfo& window_info,
32798+    CefRefPtr<CefClient>& client,
32799+    CefBrowserSettings& settings,
32800+    CefRefPtr<CefDictionaryValue>& extra_info,
32801+    bool* no_javascript_access) {
32802+  LOG(INFO) << "NWebHandlerDelegate::OnBeforePopup";
32803+  CEF_REQUIRE_UI_THREAD();
32804+
32805+  if (main_browser_) {
32806+    preference_delegate_->WebPreferencesChanged();
32807+    main_browser_->GetMainFrame()->LoadURL(target_url);
32808+  }
32809+
32810+  return true;
32811+}
32812+
32813+/* CefLifeSpanHandler methods end */
32814+
32815+/* CefLoadHandler methods begin */
32816+void NWebHandlerDelegate::OnLoadingStateChange(CefRefPtr<CefBrowser> browser,
32817+                                               bool is_loading,
32818+                                               bool can_go_back,
32819+                                               bool can_go_forward) {}
32820+
32821+void NWebHandlerDelegate::OnLoadStart(CefRefPtr<CefBrowser> browser,
32822+                                      CefRefPtr<CefFrame> frame,
32823+                                      TransitionType transition_type) {
32824+  LOG(INFO) << "NWebHandlerDelegate::OnLoadStart";
32825+
32826+  if (nweb_handler_ != nullptr) {
32827+    nweb_handler_->OnPageLoadBegin(frame->GetURL().ToString());
32828+  }
32829+}
32830+
32831+void NWebHandlerDelegate::OnLoadEnd(CefRefPtr<CefBrowser> browser,
32832+                                    CefRefPtr<CefFrame> frame,
32833+                                    int http_status_code) {
32834+  LOG(INFO) << "NWebHandlerDelegate::OnLoadEnd";
32835+  if (frame == nullptr || !frame->IsMain()) {
32836+      return;
32837+  }
32838+  LOG(INFO) << "NWebHandlerDelegate:: Mainframe OnLoadEnd";
32839+  if (nweb_handler_ != nullptr) {
32840+    nweb_handler_->OnPageLoadEnd(http_status_code, frame->GetURL().ToString());
32841+  }
32842+}
32843+
32844+// Returns a data: URI with the specified contents.
32845+std::string GetDataURI(const std::string& data, const std::string& mime_type) {
32846+  return "data:" + mime_type + ";base64," +
32847+         CefURIEncode(CefBase64Encode(data.data(), data.size()), false)
32848+             .ToString();
32849+}
32850+
32851+void NWebHandlerDelegate::OnLoadError(CefRefPtr<CefBrowser> browser,
32852+                                      CefRefPtr<CefFrame> frame,
32853+                                      ErrorCode error_code,
32854+                                      const CefString& error_text,
32855+                                      const CefString& failed_url) {
32856+  LOG(INFO) << "NWebHandlerDelegate::OnLoadError";
32857+  CEF_REQUIRE_UI_THREAD();
32858+
32859+  // Don't display an error for downloaded files.
32860+  if (error_code == ERR_ABORTED)
32861+    return;
32862+
32863+  if (nweb_handler_ != nullptr) {
32864+    nweb_handler_->OnPageLoadError(error_code, error_text.ToString(),
32865+                                   failed_url.ToString());
32866+  } else {
32867+    // Display a load error message using a data: URI.
32868+    std::stringstream ss;
32869+    ss << "<html><body bgcolor=\"white\">"
32870+          "<h2>Failed to load URL "
32871+       << std::string(failed_url) << " with error " << std::string(error_text)
32872+       << " (" << error_code << ").</h2></body></html>";
32873+
32874+    frame->LoadURL(GetDataURI(ss.str(), "text/html"));
32875+  }
32876+}
32877+
32878+void NWebHandlerDelegate::OnLoadErrorWithRequest(CefRefPtr<CefRequest> request,
32879+                                                 bool is_main_frame,
32880+                                                 bool has_user_gesture,
32881+                                                 int error_code,
32882+                                                 const CefString& error_text) {
32883+  CefRequest::HeaderMap cef_request_headers;
32884+  request->GetHeaderMap(cef_request_headers);
32885+  std::map<std::string, std::string> request_headers;
32886+  ConvertMapToHeaderMap(cef_request_headers, request_headers);
32887+  std::shared_ptr<NWebUrlResourceRequest> web_request =
32888+      std::make_shared<NWebUrlResourceRequestImpl>(
32889+          request->GetMethod().ToString(), request_headers,
32890+          request->GetURL().ToString(), has_user_gesture, is_main_frame);
32891+  std::shared_ptr<NWebUrlResourceError> error =
32892+      std::make_shared<UrlResourceErrorImpl>(error_code, error_text.ToString());
32893+  if (nweb_handler_ != nullptr) {
32894+    nweb_handler_->OnResourceLoadError(web_request, error);
32895+  }
32896+}
32897+
32898+void NWebHandlerDelegate::OnHttpError(CefRefPtr<CefRequest> request,
32899+                                      bool is_main_frame,
32900+                                      bool has_user_gesture,
32901+                                      CefRefPtr<CefResponse> response) {
32902+  if (nweb_handler_ != nullptr) {
32903+    CefRequest::HeaderMap cef_request_headers;
32904+    request->GetHeaderMap(cef_request_headers);
32905+    std::map<std::string, std::string> request_headers;
32906+    ConvertMapToHeaderMap(cef_request_headers, request_headers);
32907+    std::shared_ptr<NWebUrlResourceRequest> web_request =
32908+        std::make_shared<NWebUrlResourceRequestImpl>(
32909+            request->GetMethod().ToString(), request_headers,
32910+            request->GetURL().ToString(), has_user_gesture, is_main_frame);
32911+    std::string data;
32912+    std::shared_ptr<NWebUrlResourceResponse> web_response =
32913+        std::make_shared<NWebUrlResourceResponse>(
32914+            response->GetMimeType(), response->GetCharset(),
32915+            response->GetStatus(), response->GetStatusText(), request_headers,
32916+            data);
32917+    nweb_handler_->OnHttpError(web_request, web_response);
32918+  }
32919+}
32920+
32921+/* CefLoadHandler methods end */
32922+
32923+/* CefRequestHandler methods begin */
32924+bool NWebHandlerDelegate::OnBeforeBrowse(CefRefPtr<CefBrowser> browser,
32925+                                         CefRefPtr<CefFrame> frame,
32926+                                         CefRefPtr<CefRequest> request,
32927+                                         bool user_gesture,
32928+                                         bool is_redirect) {
32929+  LOG(INFO) << "NWebHandlerDelegate::OnBeforeBrowse";
32930+  (void)(browser);
32931+  (void)(request);
32932+  (void)(user_gesture);
32933+  (void)(is_redirect);
32934+
32935+  if (nweb_handler_ != nullptr) {
32936+    return nweb_handler_->OnHandleInterceptUrlLoading(
32937+        frame->GetURL().ToString());
32938+  }
32939+  return false;
32940+}
32941+
32942+bool NWebHandlerDelegate::OnCertificateError(
32943+    CefRefPtr<CefBrowser> browser,
32944+    cef_errorcode_t cert_error,
32945+    const CefString& request_url,
32946+    CefRefPtr<CefSSLInfo> ssl_info,
32947+    CefRefPtr<CefRequestCallback> callback) {
32948+  LOG(INFO) << "NWebHandlerDelegate::OnCertificateError";
32949+  return false;
32950+}
32951+
32952+CefRefPtr<CefResourceRequestHandler>
32953+NWebHandlerDelegate::GetResourceRequestHandler(
32954+    CefRefPtr<CefBrowser> browser,
32955+    CefRefPtr<CefFrame> frame,
32956+    CefRefPtr<CefRequest> request,
32957+    bool is_navigation,
32958+    bool is_download,
32959+    const CefString& request_initiator,
32960+    bool& disable_default_handling) {
32961+  return this;
32962+}
32963+
32964+/* CefRequestHandler methods end */
32965+
32966+/* CefDownloadHandler methods begin */
32967+void NWebHandlerDelegate::OnBeforeDownload(
32968+    CefRefPtr<CefBrowser> browser,
32969+    CefRefPtr<CefDownloadItem> download_item,
32970+    const CefString& suggested_name,
32971+    CefRefPtr<CefBeforeDownloadCallback> callback) {
32972+  (void)suggested_name;
32973+  LOG(INFO) << "NWebHandlerDelegate::OnBeforeDownload";
32974+  if (download_item->IsValid() == false) {
32975+    LOG(ERROR) << "NWebHandlerDelegate::OnBeforeDownload error, not invalid";
32976+    return;
32977+  }
32978+  if (download_item->IsCanceled() == true) {
32979+    LOG(ERROR)
32980+        << "NWebHandlerDelegate::OnBeforeDownload error, download cancel";
32981+    return;
32982+  }
32983+  callback->Continue("", false);
32984+  LOG(INFO) << "NWebHandlerDelegate::OnBeforeDownload continue...";
32985+  if (download_listener_ != nullptr) {
32986+    download_listener_->OnDownloadStart(
32987+        download_item->GetURL().ToString(),
32988+        browser->GetHost()->DefaultUserAgent(),
32989+        download_item->GetContentDisposition().ToString(),
32990+        download_item->GetMimeType().ToString(),
32991+        download_item->GetTotalBytes());
32992+  }
32993+}
32994+/* CefDownloadHandler methods end */
32995+
32996+/* CefResourceRequestHandler method begin */
32997+CefResourceRequestHandler::ReturnValue
32998+NWebHandlerDelegate::OnBeforeResourceLoad(
32999+    CefRefPtr<CefBrowser> browser,
33000+    CefRefPtr<CefFrame> frame,
33001+    CefRefPtr<CefRequest> request,
33002+    CefRefPtr<CefRequestCallback> callback) {
33003+  if (nweb_handler_ != nullptr) {
33004+    nweb_handler_->OnResource(request->GetURL().ToString());
33005+  }
33006+  return RV_CONTINUE;
33007+}
33008+
33009+CefRefPtr<CefResourceHandler> NWebHandlerDelegate::GetResourceHandler(
33010+    CefRefPtr<CefBrowser> browser,
33011+    CefRefPtr<CefFrame> frame,
33012+    CefRefPtr<CefRequest> request) {
33013+  LOG(INFO) << "NWebHandlerDelegate::GetResourceHandler";
33014+  if (!request) {
33015+    LOG(ERROR) << "NWebHandlerDelegate::GetResourceHandler request is null";
33016+    return nullptr;
33017+  }
33018+
33019+  CefRequest::HeaderMap cef_request_headers;
33020+  request->GetHeaderMap(cef_request_headers);
33021+  std::map<std::string, std::string> request_headers;
33022+  ConvertMapToHeaderMap(cef_request_headers, request_headers);
33023+  std::shared_ptr<NWebUrlResourceRequest> NWeb_request =
33024+      std::make_shared<NWebUrlResourceRequestImpl>(
33025+          request->GetMethod().ToString(), request_headers,
33026+          request->GetURL().ToString(), false, frame->IsMain());
33027+  std::shared_ptr<NWebUrlResourceResponse> response;
33028+  if (nweb_handler_ != nullptr) {
33029+    response = nweb_handler_->OnHandleInterceptRequest(NWeb_request);
33030+  }
33031+  if (response) {
33032+    std::string str = "";
33033+    return new NWebResourceHandler(response, str);
33034+  } else {
33035+    return nullptr;
33036+  }
33037+}
33038+/* CefResourceRequestHandler method end */
33039+
33040+/* CefDisplayHandler method begin */
33041+void NWebHandlerDelegate::OnTitleChange(CefRefPtr<CefBrowser> browser,
33042+                                        const CefString& title) {
33043+  if (nweb_handler_ != nullptr) {
33044+    nweb_handler_->OnPageTitle(title.ToString());
33045+  }
33046+  return;
33047+}
33048+
33049+void NWebHandlerDelegate::OnLoadingProgressChange(CefRefPtr<CefBrowser> browser,
33050+                                                  double progress) {
33051+  if (nweb_handler_ != nullptr) {
33052+    constexpr int MAX_LOADING_PROGRESS = 100;
33053+    int new_progress = static_cast<int>(progress * MAX_LOADING_PROGRESS);
33054+    nweb_handler_->OnLoadingProgress(new_progress);
33055+  }
33056+  return;
33057+}
33058+
33059+void NWebHandlerDelegate::OnReceivedIcon(const void* data,
33060+                                         size_t width,
33061+                                         size_t height,
33062+                                         cef_color_type_t color_type,
33063+                                         cef_alpha_type_t alpha_type) {
33064+  if (!data) {
33065+    LOG(ERROR) << "onReceivedIcon get error";
33066+    return;
33067+  }
33068+  if (nweb_handler_ != nullptr) {
33069+    nweb_handler_->OnPageIcon(data, width, height,
33070+                              TransformColorType(color_type),
33071+                              TransformAlphaType(alpha_type));
33072+  }
33073+}
33074+
33075+void NWebHandlerDelegate::OnReceivedTouchIconUrl(CefRefPtr<CefBrowser> browser,
33076+                                                 const CefString& icon_url,
33077+                                                 bool precomposed) {
33078+  if (nweb_handler_ != nullptr) {
33079+    nweb_handler_->OnDesktopIconUrl(icon_url.ToString(), precomposed);
33080+  }
33081+  return;
33082+}
33083+
33084+bool NWebHandlerDelegate::OnConsoleMessage(CefRefPtr<CefBrowser> browser,
33085+                                           cef_log_severity_t level,
33086+                                           const CefString& message,
33087+                                           const CefString& source,
33088+                                           int line) {
33089+  if (nweb_handler_ != nullptr) {
33090+    NWebConsoleLog::NWebConsoleLogLevel message_level =
33091+        ConvertConsoleMessageLevel(level);
33092+    NWebConsoleLog console_message(line, message.ToString(), message_level,
33093+                                       source.ToString());
33094+    return nweb_handler_->OnConsoleLog(console_message);
33095+  }
33096+  return false;
33097+}
33098+/* CefDisplayHandler method end */
33099+
33100+/* CefFocusHandler method begin */
33101+bool NWebHandlerDelegate::OnSetFocus(CefRefPtr<CefBrowser> browser,
33102+                                     FocusSource source) {
33103+  if (nweb_handler_ != nullptr) {
33104+    nweb_handler_->OnFocus();
33105+  }
33106+  return false;
33107+}
33108+/* CefFocusHandler method end */
33109+
33110+/* CefPermissionRequest method begin */
33111+void NWebHandlerDelegate::OnGeolocationShow(const CefString& origin) {
33112+  if (nweb_handler_ != nullptr) {
33113+    NWebGeolocationCallback* callback =
33114+        new NWebGeolocationCallback(main_browser_);
33115+    nweb_handler_->OnGeolocationShow(origin, callback);
33116+    delete callback;
33117+  }
33118+  return;
33119+}
33120+
33121+void NWebHandlerDelegate::OnGeolocationHide() {
33122+  if (nweb_handler_ != nullptr) {
33123+    nweb_handler_->OnGeolocationHide();
33124+  }
33125+  return;
33126+}
33127+
33128+void NWebHandlerDelegate::OnPermissionRequest(
33129+    CefRefPtr<CefAccessRequest> request) {
33130+  if (nweb_handler_ != nullptr) {
33131+    std::shared_ptr<NWebAccessRequest> access_request =
33132+        std::make_shared<NWebAccessRequestDelegate>(request);
33133+    nweb_handler_->OnPermissionRequest(access_request);
33134+  }
33135+  return;
33136+}
33137+
33138+void NWebHandlerDelegate::OnPermissionRequestCanceled(
33139+    CefRefPtr<CefAccessRequest> request) {
33140+  if (nweb_handler_ != nullptr) {
33141+    std::shared_ptr<NWebAccessRequest> access_request =
33142+        std::make_shared<NWebAccessRequestDelegate>(request);
33143+    nweb_handler_->OnPermissionRequestCanceled(access_request);
33144+  }
33145+  return;
33146+}
33147+/* CefPermissionRequest method begin */
33148+
33149+/* CefJSDialogHandler method begin */
33150+bool NWebHandlerDelegate::OnJSDialog(CefRefPtr<CefBrowser> browser,
33151+                                     const CefString& origin_url,
33152+                                     JSDialogType dialog_type,
33153+                                     const CefString& message_text,
33154+                                     const CefString& default_prompt_text,
33155+                                     CefRefPtr<CefJSDialogCallback> callback,
33156+                                     bool& suppress_message) {
33157+  if (nweb_handler_ == nullptr) {
33158+    return false;
33159+  }
33160+  suppress_message = false;
33161+  std::shared_ptr<NWebJSDialogResult> js_result =
33162+      std::make_shared<NWebJSDialogResultImpl>(callback);
33163+  switch (dialog_type) {
33164+    case JSDIALOGTYPE_ALERT:
33165+      return nweb_handler_->OnAlertDialogByJS(origin_url, message_text,
33166+                                              js_result);
33167+    case JSDIALOGTYPE_CONFIRM:
33168+      return nweb_handler_->OnConfirmDialogByJS(origin_url, message_text,
33169+                                                js_result);
33170+    case JSDIALOGTYPE_PROMPT:
33171+      return nweb_handler_->OnPromptDialogByJs(origin_url, message_text,
33172+                                               default_prompt_text, js_result);
33173+    default:
33174+      break;
33175+  }
33176+  return false;
33177+};
33178+
33179+bool NWebHandlerDelegate::OnBeforeUnloadDialog(
33180+    CefRefPtr<CefBrowser> browser,
33181+    const CefString& message_text,
33182+    bool is_reload,
33183+    CefRefPtr<CefJSDialogCallback> callback) {
33184+  if (nweb_handler_ == nullptr) {
33185+    return false;
33186+  }
33187+  std::shared_ptr<NWebJSDialogResult> js_result =
33188+      std::make_shared<NWebJSDialogResultImpl>(callback);
33189+  return nweb_handler_->OnBeforeUnloadByJS(std::string(), message_text,
33190+                                           js_result);
33191+}
33192+
33193+/* CefJSDialogHandler method end */
33194+
33195+const std::vector<std::string> NWebHandlerDelegate::GetVisitedHistory() {
33196+  if (nweb_handler_ != nullptr) {
33197+    return nweb_handler_->VisitedUrlHistory();
33198+  }
33199+  return std::vector<std::string>();
33200+}
33201+
33202+void AddNWebValueCef(std::vector<std::shared_ptr<NWebValue>>& vector,
33203+                     NWebValue::Type type,
33204+                     CefRefPtr<CefValue> argument) {
33205+  std::shared_ptr<NWebValue> value = std::make_shared<NWebValue>(type);
33206+  switch (type) {
33207+    case NWebValue::Type::INTEGER:
33208+      value->SetInt(argument->GetInt());
33209+      vector.push_back(value);
33210+      break;
33211+    case NWebValue::Type::DOUBLE: {
33212+      value->SetDouble(argument->GetDouble());
33213+      vector.push_back(value);
33214+      break;
33215+    }
33216+    case NWebValue::Type::BOOLEAN:
33217+      value->SetBoolean(argument->GetBool());
33218+      vector.push_back(value);
33219+      break;
33220+    case NWebValue::Type::STRING:
33221+      value->SetString(argument->GetString().ToString());
33222+      vector.push_back(value);
33223+      break;
33224+    default:
33225+      LOG(INFO) << "AddNWebValueCef: not support value";
33226+      break;
33227+  }
33228+}
33229+
33230+std::vector<std::shared_ptr<NWebValue>> ParseCefValueTONWebValue(
33231+    CefRefPtr<CefListValue> args,
33232+    int size) {
33233+  std::vector<std::shared_ptr<NWebValue>> value_vector;
33234+  for (int i = 0; i < size; i++) {
33235+    CefRefPtr<CefValue> argument = args->GetValue(i);
33236+    switch (argument->GetType()) {
33237+      case CefValueType::VTYPE_INT:
33238+        AddNWebValueCef(value_vector, NWebValue::Type::INTEGER, argument);
33239+        break;
33240+      case CefValueType::VTYPE_DOUBLE: {
33241+        AddNWebValueCef(value_vector, NWebValue::Type::DOUBLE, argument);
33242+        break;
33243+      }
33244+      case CefValueType::VTYPE_BOOL:
33245+        AddNWebValueCef(value_vector, NWebValue::Type::BOOLEAN, argument);
33246+        break;
33247+      case CefValueType::VTYPE_STRING:
33248+        AddNWebValueCef(value_vector, NWebValue::Type::STRING, argument);
33249+        break;
33250+      case CefValueType::VTYPE_INVALID:
33251+        break;
33252+      default:
33253+        LOG(INFO) << "ParseCefValueTONWebValue: not support value";
33254+        break;
33255+    }
33256+  }
33257+  return value_vector;
33258+}
33259+
33260+CefValueType TranslateCefType(NWebValue::Type type) {
33261+  switch (type) {
33262+    case NWebValue::Type::INTEGER:
33263+      return CefValueType::VTYPE_INT;
33264+      break;
33265+    case NWebValue::Type::DOUBLE: {
33266+      return CefValueType::VTYPE_DOUBLE;
33267+      break;
33268+    }
33269+    case NWebValue::Type::BOOLEAN:
33270+      return CefValueType::VTYPE_BOOL;
33271+      break;
33272+    case NWebValue::Type::STRING:
33273+      return CefValueType::VTYPE_STRING;
33274+      break;
33275+    case NWebValue::Type::DICTIONARY:
33276+      return CefValueType::VTYPE_DICTIONARY;
33277+      break;
33278+    case NWebValue::Type::LIST:
33279+      return CefValueType::VTYPE_LIST;
33280+      break;
33281+    case NWebValue::Type::NONE:
33282+      return CefValueType::VTYPE_INVALID;
33283+      break;
33284+    case NWebValue::Type::BINARY:
33285+      return CefValueType::VTYPE_BINARY;
33286+      break;
33287+  }
33288+}
33289+
33290+CefRefPtr<CefListValue> ParseNWebValueToValue(std::shared_ptr<NWebValue> value,
33291+                                              CefRefPtr<CefListValue> result) {
33292+  NWebValue::Type type = value->GetType();
33293+  switch (type) {
33294+    case NWebValue::Type::INTEGER:
33295+      result->SetInt(0, value->GetInt());
33296+      break;
33297+    case NWebValue::Type::DOUBLE: {
33298+      result->SetDouble(0, value->GetDouble());
33299+      break;
33300+    }
33301+    case NWebValue::Type::BOOLEAN:
33302+      result->SetBool(0, value->GetBoolean());
33303+      break;
33304+    case NWebValue::Type::STRING:
33305+      result->SetString(0, value->GetString());
33306+      break;
33307+    case NWebValue::Type::NONE:
33308+      break;
33309+    default:
33310+      LOG(INFO) << "ParseNWebValueToValue: not support value type";
33311+      break;
33312+  }
33313+  return result;
33314+}
33315+
33316+int NWebHandlerDelegate::NotifyJavaScriptResult(
33317+    CefRefPtr<CefListValue> args,
33318+    const CefString& method,
33319+    const CefString& object_name,
33320+    CefRefPtr<CefListValue> result) {
33321+  if (args.get() == nullptr || result.get() == nullptr) {
33322+    return 0;
33323+  }
33324+  std::vector<std::shared_ptr<NWebValue>> value_vector =
33325+      ParseCefValueTONWebValue(args, args->GetSize());
33326+  if (!nweb_javascript_callback_) {
33327+    return 1;
33328+  }
33329+
33330+  std::shared_ptr<NWebValue> ark_result =
33331+      nweb_javascript_callback_->GetJavaScriptResult(value_vector, method,
33332+                                                     object_name);
33333+
33334+  ParseNWebValueToValue(ark_result, result);
33335+  return ark_result->error_;
33336+}
33337+}  // namespace OHOS::NWeb
33338diff --git a/ohos_nweb/src/cef_delegate/nweb_handler_delegate.h b/ohos_nweb/src/cef_delegate/nweb_handler_delegate.h
33339new file mode 100755
33340index 0000000000..2d92d17575
33341--- /dev/null
33342+++ b/ohos_nweb/src/cef_delegate/nweb_handler_delegate.h
33343@@ -0,0 +1,251 @@
33344+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
33345+// Use of this source code is governed by a BSD-style license that can be
33346+// found in the LICENSE file.
33347+
33348+#ifndef NWEB_HANDLER_DELEGATE_H
33349+#define NWEB_HANDLER_DELEGATE_H
33350+
33351+#include "cef/include/base/cef_lock.h"
33352+#include "cef/include/cef_client.h"
33353+#include "cef/include/cef_jsdialog_handler.h"
33354+#include "cef/include/cef_permission_request.h"
33355+#include "nweb_event_handler.h"
33356+#include "nweb_handler.h"
33357+#include "nweb_preference_delegate.h"
33358+#include "nweb_render_handler.h"
33359+
33360+#include <condition_variable>
33361+#include <functional>
33362+#include <list>
33363+#include <mutex>
33364+#include <string>
33365+#include "nweb_download_callback.h"
33366+#include "nweb_javascript_result_callback.h"
33367+#include "nweb_value.h"
33368+
33369+namespace OHOS::NWeb {
33370+class NWebHandler;
33371+
33372+class NWebHandlerDelegate : public CefClient,
33373+                            public CefLifeSpanHandler,
33374+                            public CefLoadHandler,
33375+                            public CefRequestHandler,
33376+                            public CefResourceRequestHandler,
33377+                            public CefDisplayHandler,
33378+                            public CefDownloadHandler,
33379+                            public CefFocusHandler,
33380+                            public CefPermissionRequest,
33381+                            public CefJSDialogHandler {
33382+ public:
33383+  static CefRefPtr<NWebHandlerDelegate> Create(
33384+      std::shared_ptr<NWebPreferenceDelegate> preference_delegate,
33385+      CefRefPtr<NWebRenderHandler> render_handler,
33386+      std::shared_ptr<NWebEventHandler> event_handler);
33387+
33388+  NWebHandlerDelegate(
33389+      std::shared_ptr<NWebPreferenceDelegate> preference_delegate,
33390+      CefRefPtr<NWebRenderHandler> render_handler,
33391+      std::shared_ptr<NWebEventHandler> event_handler);
33392+  ~NWebHandlerDelegate() = default;
33393+
33394+  void OnDestroy();
33395+
33396+  void RegisterDownLoadListener(
33397+      std::shared_ptr<NWebDownloadCallback> download_listener);
33398+  void RegisterNWebHandler(std::shared_ptr<NWebHandler> handler);
33399+  void RegisterNWebJavaScriptCallBack(
33400+      std::shared_ptr<NWebJavaScriptResultCallBack> callback);
33401+
33402+  // Request that all existing browser windows close.
33403+  void CloseAllBrowsers(bool force_close);
33404+  bool IsClosing() const;
33405+  const CefRefPtr<CefBrowser> GetBrowser();
33406+
33407+  /* CefClient methods begin */
33408+  CefRefPtr<CefDownloadHandler> GetDownloadHandler() override;
33409+  CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() override;
33410+  CefRefPtr<CefLoadHandler> GetLoadHandler() override;
33411+  CefRefPtr<CefRenderHandler> GetRenderHandler() override;
33412+  CefRefPtr<CefRequestHandler> GetRequestHandler() override;
33413+  CefRefPtr<CefDisplayHandler> GetDisplayHandler() override;
33414+  CefRefPtr<CefFocusHandler> GetFocusHandler() override;
33415+  CefRefPtr<CefPermissionRequest> GetPermissionRequest() override;
33416+  CefRefPtr<CefJSDialogHandler> GetJSDialogHandler() override;
33417+  virtual bool OnProcessMessageReceived(
33418+      CefRefPtr<CefBrowser> browser,
33419+      CefRefPtr<CefFrame> frame,
33420+      CefProcessId source_process,
33421+      CefRefPtr<CefProcessMessage> message) override;
33422+  int NotifyJavaScriptResult(CefRefPtr<CefListValue> args,
33423+                             const CefString& method,
33424+                             const CefString& object_name,
33425+                             CefRefPtr<CefListValue> result) override;
33426+  /* CefClient methods end */
33427+
33428+  /* CefLifeSpanHandler methods begin */
33429+  void OnAfterCreated(CefRefPtr<CefBrowser> browser) override;
33430+  bool DoClose(CefRefPtr<CefBrowser> browser) override;
33431+  void OnBeforeClose(CefRefPtr<CefBrowser> browser) override;
33432+  bool OnBeforePopup(
33433+      CefRefPtr<CefBrowser> browser,
33434+      CefRefPtr<CefFrame> frame,
33435+      const CefString& target_url,
33436+      const CefString& target_frame_name,
33437+      CefLifeSpanHandler::WindowOpenDisposition target_disposition,
33438+      bool user_gesture,
33439+      const CefPopupFeatures& popup_features,
33440+      CefWindowInfo& window_info,
33441+      CefRefPtr<CefClient>& client,
33442+      CefBrowserSettings& settings,
33443+      CefRefPtr<CefDictionaryValue>& extra_info,
33444+      bool* no_javascript_access) override;
33445+  /* CefLifeSpanHandler methods end */
33446+
33447+  /* CefLoadHandler methods begin */
33448+  void OnLoadingStateChange(CefRefPtr<CefBrowser> browser,
33449+                            bool is_loading,
33450+                            bool can_go_back,
33451+                            bool can_go_forward) override;
33452+
33453+  void OnLoadStart(CefRefPtr<CefBrowser> browser,
33454+                   CefRefPtr<CefFrame> frame,
33455+                   TransitionType transition_type) override;
33456+
33457+  void OnLoadEnd(CefRefPtr<CefBrowser> browser,
33458+                 CefRefPtr<CefFrame> frame,
33459+                 int http_status_code) override;
33460+
33461+  void OnLoadError(CefRefPtr<CefBrowser> browser,
33462+                   CefRefPtr<CefFrame> frame,
33463+                   ErrorCode error_code,
33464+                   const CefString& error_text,
33465+                   const CefString& failed_url) override;
33466+
33467+  void OnLoadErrorWithRequest(CefRefPtr<CefRequest> request,
33468+                              bool is_main_frame,
33469+                              bool has_user_gesture,
33470+                              int error_code,
33471+                              const CefString& error_text) override;
33472+
33473+  void OnHttpError(CefRefPtr<CefRequest> request,
33474+                   bool is_main_frame,
33475+                   bool has_user_gesture,
33476+                   CefRefPtr<CefResponse> response) override;
33477+  /* CefLoadHandler methods end */
33478+
33479+  /* CefRequestHandler methods begin */
33480+  bool OnBeforeBrowse(CefRefPtr<CefBrowser> browser,
33481+                      CefRefPtr<CefFrame> frame,
33482+                      CefRefPtr<CefRequest> request,
33483+                      bool user_gesture,
33484+                      bool is_redirect) override;
33485+  bool OnCertificateError(CefRefPtr<CefBrowser> browser,
33486+                          cef_errorcode_t cert_error,
33487+                          const CefString& request_url,
33488+                          CefRefPtr<CefSSLInfo> ssl_info,
33489+                          CefRefPtr<CefRequestCallback> callback) override;
33490+  CefRefPtr<CefResourceRequestHandler> GetResourceRequestHandler(
33491+      CefRefPtr<CefBrowser> browser,
33492+      CefRefPtr<CefFrame> frame,
33493+      CefRefPtr<CefRequest> request,
33494+      bool is_navigation,
33495+      bool is_download,
33496+      const CefString& request_initiator,
33497+      bool& disable_default_handling) override;
33498+  /* CefRequestHandler methods end */
33499+
33500+  /* CefDownloadHandler methods begin */
33501+  void OnBeforeDownload(CefRefPtr<CefBrowser> browser,
33502+                        CefRefPtr<CefDownloadItem> download_item,
33503+                        const CefString& suggested_name,
33504+                        CefRefPtr<CefBeforeDownloadCallback> callback) override;
33505+  /* CefDownloadHandler methods end */
33506+
33507+  /* CefResourceRequestHandler method begin */
33508+  ReturnValue OnBeforeResourceLoad(
33509+      CefRefPtr<CefBrowser> browser,
33510+      CefRefPtr<CefFrame> frame,
33511+      CefRefPtr<CefRequest> request,
33512+      CefRefPtr<CefRequestCallback> callback) override;
33513+
33514+  CefRefPtr<CefResourceHandler> GetResourceHandler(
33515+      CefRefPtr<CefBrowser> browser,
33516+      CefRefPtr<CefFrame> frame,
33517+      CefRefPtr<CefRequest> request) override;
33518+  /* CefResourceRequestHandler method end */
33519+
33520+  /* CefDisplayHandler method begin */
33521+  void OnTitleChange(CefRefPtr<CefBrowser> browser,
33522+                     const CefString& title) override;
33523+  void OnLoadingProgressChange(CefRefPtr<CefBrowser> browser,
33524+                               double progress) override;
33525+  void OnReceivedIcon(const void* data,
33526+                      size_t width,
33527+                      size_t height,
33528+                      cef_color_type_t color_type,
33529+                      cef_alpha_type_t alpha_type) override;
33530+  void OnReceivedTouchIconUrl(CefRefPtr<CefBrowser> browser,
33531+                              const CefString& icon_url,
33532+                              bool precomposed) override;
33533+  bool OnConsoleMessage(CefRefPtr<CefBrowser> browser,
33534+                        cef_log_severity_t level,
33535+                        const CefString& message,
33536+                        const CefString& source,
33537+                        int line) override;
33538+  /* CefDisplayHandler method end */
33539+
33540+  /* CefFocusHandler method begin */
33541+  bool OnSetFocus(CefRefPtr<CefBrowser> browser, FocusSource source) override;
33542+  /* CefFocusHandler method end */
33543+
33544+  /* CefPermissionRequest method begin */
33545+  void OnGeolocationShow(const CefString& origin) override;
33546+
33547+  void OnGeolocationHide() override;
33548+
33549+  void OnPermissionRequest(CefRefPtr<CefAccessRequest> request) override;
33550+  void OnPermissionRequestCanceled(
33551+      CefRefPtr<CefAccessRequest> request) override;
33552+  /* CefPermissionRequest method end */
33553+
33554+  /* CefJSDialogHandler method begin */
33555+  bool OnJSDialog(CefRefPtr<CefBrowser> browser,
33556+                  const CefString& origin_url,
33557+                  JSDialogType dialog_type,
33558+                  const CefString& message_text,
33559+                  const CefString& default_prompt_text,
33560+                  CefRefPtr<CefJSDialogCallback> callback,
33561+                  bool& suppress_message) override;
33562+
33563+  bool OnBeforeUnloadDialog(CefRefPtr<CefBrowser> browser,
33564+                            const CefString& message_text,
33565+                            bool is_reload,
33566+                            CefRefPtr<CefJSDialogCallback> callback) override;
33567+  /* CefJSDialogHandler method end */
33568+
33569+  const std::vector<std::string> GetVisitedHistory();
33570+
33571+ private:
33572+  // List of existing browser windows. Only accessed on the CEF UI thread.
33573+  typedef std::list<CefRefPtr<CefBrowser>> BrowserList;
33574+  BrowserList browser_list_;
33575+
33576+  CefRefPtr<CefBrowser> main_browser_ = nullptr;
33577+  bool is_closing_ = false;
33578+
33579+  std::shared_ptr<NWebPreferenceDelegate> preference_delegate_ = nullptr;
33580+  CefRefPtr<NWebRenderHandler> render_handler_ = nullptr;
33581+
33582+  std::shared_ptr<NWebEventHandler> event_handler_ = nullptr;
33583+
33584+  // Include the default reference counting implementation.
33585+  IMPLEMENT_REFCOUNTING(NWebHandlerDelegate);
33586+
33587+  std::shared_ptr<NWebDownloadCallback> download_listener_ = nullptr;
33588+  std::shared_ptr<NWebHandler> nweb_handler_ = nullptr;
33589+  std::shared_ptr<NWebJavaScriptResultCallBack> nweb_javascript_callback_ =
33590+      nullptr;
33591+};
33592+}  // namespace OHOS::NWeb
33593+
33594+#endif
33595diff --git a/ohos_nweb/src/cef_delegate/nweb_inputmethod_client.h b/ohos_nweb/src/cef_delegate/nweb_inputmethod_client.h
33596new file mode 100644
33597index 0000000000..73cebd5e2b
33598--- /dev/null
33599+++ b/ohos_nweb/src/cef_delegate/nweb_inputmethod_client.h
33600@@ -0,0 +1,24 @@
33601+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
33602+// Use of this source code is governed by a BSD-style license that can be
33603+// found in the LICENSE file.
33604+
33605+#ifndef OHOS_NWEB_SRC_CEF_DELEGATE_NWEB_INPUTMETHOD_CLIENT_H_
33606+#define OHOS_NWEB_SRC_CEF_DELEGATE_NWEB_INPUTMETHOD_CLIENT_H_
33607+
33608+#include "include/cef_base.h"
33609+#include "include/cef_browser.h"
33610+
33611+namespace OHOS::NWeb {
33612+class NWebInputMethodClient: public virtual CefBaseRefCounted {
33613+ public:
33614+  virtual ~NWebInputMethodClient() = default;
33615+  virtual void Attach(CefRefPtr<CefBrowser> browser) = 0;
33616+  virtual void ShowTextInput() = 0;
33617+  virtual void HideTextInput() = 0;
33618+  virtual void OnTextSelectionChanged(CefRefPtr<CefBrowser> browser,
33619+                                      const CefString& selected_text,
33620+                                      const CefRange& selected_range) = 0;
33621+};
33622+}
33623+
33624+#endif // OHOS_NWEB_SRC_CEF_DELEGATE_NWEB_INPUTMETHOD_CLIENT_H_
33625\ No newline at end of file
33626diff --git a/ohos_nweb/src/cef_delegate/nweb_js_dialog_result_impl.cc b/ohos_nweb/src/cef_delegate/nweb_js_dialog_result_impl.cc
33627new file mode 100644
33628index 0000000000..23287ae9ac
33629--- /dev/null
33630+++ b/ohos_nweb/src/cef_delegate/nweb_js_dialog_result_impl.cc
33631@@ -0,0 +1,31 @@
33632+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
33633+// Use of this source code is governed by a BSD-style license that can be
33634+// found in the LICENSE file.
33635+
33636+#include "nweb_js_dialog_result_impl.h"
33637+
33638+using namespace OHOS::NWeb;
33639+
33640+NWebJSDialogResultImpl::NWebJSDialogResultImpl(CefRefPtr<CefJSDialogCallback> callback)
33641+  : callback_(callback), has_put_(false) {}
33642+
33643+void NWebJSDialogResultImpl::Confirm() {
33644+  if (callback_ != nullptr && !has_put_) {
33645+    callback_->Continue(true, CefString(std::string()));
33646+    has_put_ = true;
33647+  }
33648+}
33649+
33650+void NWebJSDialogResultImpl::Confirm(const std::string &message) {
33651+  if (callback_ != nullptr && !has_put_) {
33652+    callback_->Continue(true, CefString(message));
33653+    has_put_ = true;
33654+  }
33655+}
33656+
33657+void NWebJSDialogResultImpl::Cancel() {
33658+  if (callback_ != nullptr && !has_put_) {
33659+    callback_->Continue(false, CefString(std::string()));
33660+    has_put_ = true;
33661+  }
33662+}
33663\ No newline at end of file
33664diff --git a/ohos_nweb/src/cef_delegate/nweb_js_dialog_result_impl.h b/ohos_nweb/src/cef_delegate/nweb_js_dialog_result_impl.h
33665new file mode 100644
33666index 0000000000..0ad0d03214
33667--- /dev/null
33668+++ b/ohos_nweb/src/cef_delegate/nweb_js_dialog_result_impl.h
33669@@ -0,0 +1,26 @@
33670+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
33671+// Use of this source code is governed by a BSD-style license that can be
33672+// found in the LICENSE file.
33673+
33674+#ifndef NWEB_JS_DIALOG_RESULT_IMPL_H
33675+#define NWEB_JS_DIALOG_RESULT_IMPL_H
33676+
33677+#include "nweb_js_dialog_result.h"
33678+#include "cef/include/cef_jsdialog_handler.h"
33679+
33680+namespace OHOS::NWeb {
33681+class NWebJSDialogResultImpl : public NWebJSDialogResult {
33682+ public:
33683+  NWebJSDialogResultImpl() = default;
33684+  explicit NWebJSDialogResultImpl(CefRefPtr<CefJSDialogCallback> callback);
33685+  ~NWebJSDialogResultImpl() = default;
33686+  void Confirm() override;
33687+  void Confirm(const std::string &message) override;
33688+  void Cancel() override;
33689+ private:
33690+  CefRefPtr<CefJSDialogCallback> callback_;
33691+  bool has_put_ = false;
33692+};
33693+}
33694+
33695+#endif
33696\ No newline at end of file
33697diff --git a/ohos_nweb/src/cef_delegate/nweb_preference_delegate.cc b/ohos_nweb/src/cef_delegate/nweb_preference_delegate.cc
33698new file mode 100644
33699index 0000000000..a97e0c4952
33700--- /dev/null
33701+++ b/ohos_nweb/src/cef_delegate/nweb_preference_delegate.cc
33702@@ -0,0 +1,392 @@
33703+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
33704+// Use of this source code is governed by a BSD-style license that can be
33705+// found in the LICENSE file.
33706+
33707+#include "ohos_nweb/src/cef_delegate/nweb_preference_delegate.h"
33708+#include "base/logging.h"
33709+#include "cef/include/internal/cef_string.h"
33710+#include "cef/include/internal/cef_string_types.h"
33711+#include "cef/include/internal/cef_string_wrappers.h"
33712+#include "cef/include/internal/cef_types.h"
33713+#include "cef/include/internal/cef_types_wrappers.h"
33714+#include "cef/libcef/browser/net_service/net_helpers.h"
33715+
33716+#include "base/feature_list.h"
33717+
33718+namespace OHOS::NWeb {
33719+NWebPreferenceDelegate::NWebPreferenceDelegate() {}
33720+
33721+NWebPreferenceDelegate::~NWebPreferenceDelegate() {}
33722+
33723+void NWebPreferenceDelegate::OnDestroy() {
33724+  browser_ = nullptr;
33725+}
33726+
33727+void NWebPreferenceDelegate::SetBrowser(CefRefPtr<CefBrowser> browser) {
33728+  this->browser_ = browser;
33729+}
33730+
33731+void NWebPreferenceDelegate::WebPreferencesChanged() {
33732+  if (!browser_) {
33733+    LOG(ERROR) << "update web preferences failed, browser is null";
33734+    return;
33735+  }
33736+
33737+  CefBrowserSettings browser_settings;
33738+  ComputeBrowserSettings(browser_settings);
33739+  browser_->GetHost()->SetWebPreferences(browser_settings);
33740+}
33741+
33742+void NWebPreferenceDelegate::ComputeBrowserSettings(
33743+    CefBrowserSettings& browser_settings) {
33744+  CefString str = CefString(StandardFontFamilyName());
33745+  cef_string_set(str.c_str(), str.length(),
33746+                 &(browser_settings.standard_font_family), true);
33747+
33748+  str = CefString(FixedFontFamilyName());
33749+  cef_string_set(str.c_str(), str.length(),
33750+                 &(browser_settings.fixed_font_family), true);
33751+
33752+  str = CefString(SerifFontFamilyName());
33753+  cef_string_set(str.c_str(), str.length(),
33754+                 &(browser_settings.serif_font_family), true);
33755+
33756+  str = CefString(SansSerifFontFamilyName());
33757+  cef_string_set(str.c_str(), str.length(),
33758+                 &(browser_settings.sans_serif_font_family), true);
33759+
33760+  str = CefString(CursiveFontFamilyName());
33761+  cef_string_set(str.c_str(), str.length(),
33762+                 &(browser_settings.cursive_font_family), true);
33763+
33764+  str = CefString(FantasyFontFamilyName());
33765+  cef_string_set(str.c_str(), str.length(),
33766+                 &(browser_settings.fantasy_font_family), true);
33767+
33768+  browser_settings.default_font_size = DefaultFontSize();
33769+  browser_settings.default_fixed_font_size = DefaultFixedFontSize();
33770+  browser_settings.minimum_font_size = FontSizeLowerLimit();
33771+  browser_settings.minimum_logical_font_size = LogicalFontSizeLowerLimit();
33772+
33773+  str = CefString(DefaultTextEncodingFormat());
33774+  cef_string_set(str.c_str(), str.length(),
33775+                 &(browser_settings.default_encoding), true);
33776+
33777+  browser_settings.javascript =
33778+      IsJavaScriptAllowed() ? STATE_ENABLED : STATE_DISABLED;
33779+  browser_settings.loads_images_automatically =
33780+      IsImageLoadingAllowed() ? STATE_ENABLED : STATE_DISABLED;
33781+  browser_settings.image_loading =
33782+      !IsLoadImageFromNetworkDisabled() ? STATE_ENABLED : STATE_DISABLED;
33783+
33784+  browser_settings.local_storage =
33785+      IsDomStorageEnabled() ? STATE_ENABLED : STATE_DISABLED;
33786+  browser_settings.databases =
33787+      IsDataBaseEnabled() ? STATE_ENABLED : STATE_DISABLED;
33788+  browser_settings.universal_access_from_file_urls =
33789+      EnableUniversalAccessFromFileURLs() ? STATE_ENABLED : STATE_DISABLED;
33790+  browser_settings.file_access_from_file_urls =
33791+      EnableRawFileAccessFromFileURLs() ? STATE_ENABLED : STATE_DISABLED;
33792+  browser_settings.force_dark_mode_enabled =
33793+      DarkModeEnabled() ? STATE_ENABLED : STATE_DISABLED;
33794+  browser_settings.javascript_can_open_windows_automatically =
33795+      IsCreateWindowsByJavaScriptAllowed();
33796+  browser_settings.text_size_percent = ZoomingForTextFactor();
33797+  browser_settings.mixed_content_mode = AccessModeForSecureOriginLoadFromInsecure();
33798+  browser_settings.allow_running_insecure_content =
33799+      RunningInsecureContentAllowed() ? STATE_ENABLED : STATE_DISABLED;
33800+  browser_settings.strict_mixed_content_checking =
33801+      UseStricMixedContentCheckingAllowed() ? STATE_ENABLED : STATE_DISABLED;
33802+  browser_settings.allow_mixed_content_upgrades =
33803+      MixedContentAutoupgradesAllowed() ? STATE_ENABLED : STATE_DISABLED;
33804+  browser_settings.geolocation_enabled = GeolocationAllowed();
33805+  browser_settings.supports_double_tap_zoom = ZoomingfunctionEnabled();
33806+  browser_settings.supports_multi_touch_zoom = ZoomingfunctionEnabled();
33807+}
33808+
33809+void NWebPreferenceDelegate::SetBrowserSettingsToNetHelpers() {
33810+  net_service::NetHelpers::allow_file_access = EnableRawFileAccess();
33811+  net_service::NetHelpers::allow_content_access = EnableContentAccess();
33812+  return;
33813+}
33814+
33815+void NWebPreferenceDelegate::PutEnableContentAccess(bool flag) {
33816+  content_access_ = flag;
33817+  SetBrowserSettingsToNetHelpers();
33818+}
33819+
33820+void NWebPreferenceDelegate::PutEnableRawFileAccess(bool flag) {
33821+  raw_file_access_ = flag;
33822+  SetBrowserSettingsToNetHelpers();
33823+}
33824+
33825+void NWebPreferenceDelegate::PutEnableRawFileAccessFromFileURLs(bool flag) {
33826+  raw_file_access_from_file_urls_ = flag;
33827+  WebPreferencesChanged();
33828+}
33829+
33830+void NWebPreferenceDelegate::PutEnableUniversalAccessFromFileURLs(bool flag) {
33831+  universal_access_from_file_urls_ = flag;
33832+  WebPreferencesChanged();
33833+}
33834+
33835+void NWebPreferenceDelegate::PutLoadImageFromNetworkDisabled(bool flag) {
33836+  images_enabled_ = !flag;
33837+  WebPreferencesChanged();
33838+}
33839+
33840+void NWebPreferenceDelegate::PutCursiveFontFamilyName(std::string font) {
33841+  cursive_font_family_name_ = font;
33842+  WebPreferencesChanged();
33843+}
33844+void NWebPreferenceDelegate::PutDatabaseAllowed(bool flag) {
33845+  databases_enabled_ = flag;
33846+  WebPreferencesChanged();
33847+}
33848+
33849+void NWebPreferenceDelegate::PutDefaultFixedFontSize(int size) {
33850+  default_fixed_font_size_ = size;
33851+  WebPreferencesChanged();
33852+}
33853+void NWebPreferenceDelegate::PutDefaultFontSize(int size) {
33854+  default_font_size_ = size;
33855+  WebPreferencesChanged();
33856+}
33857+
33858+void NWebPreferenceDelegate::PutDefaultTextEncodingFormat(std::string encoding) {
33859+  default_encoding_ = encoding;
33860+  WebPreferencesChanged();
33861+}
33862+
33863+void NWebPreferenceDelegate::PutDomStorageEnabled(bool flag) {
33864+  dom_storage_ = flag;
33865+  WebPreferencesChanged();
33866+}
33867+
33868+void NWebPreferenceDelegate::PutFantasyFontFamilyName(std::string font) {
33869+  fantasy_font_family_name_ = font;
33870+  WebPreferencesChanged();
33871+}
33872+
33873+void NWebPreferenceDelegate::PutFixedFontFamilyName(std::string font) {
33874+  fixed_font_family_name_ = font;
33875+  WebPreferencesChanged();
33876+}
33877+
33878+void NWebPreferenceDelegate::PutDarkModeEnabled(int forceDark) {
33879+  dark_mode_enabled_ = forceDark;
33880+  WebPreferencesChanged();
33881+}
33882+
33883+void NWebPreferenceDelegate::PutIsCreateWindowsByJavaScriptAllowed(
33884+    bool flag) {
33885+  create_windows_by_javascript_allowed_ = flag;
33886+  WebPreferencesChanged();
33887+}
33888+
33889+void NWebPreferenceDelegate::PutJavaScriptEnabled(bool flag) {
33890+  javascript_allowed_ = flag;
33891+  WebPreferencesChanged();
33892+}
33893+
33894+void NWebPreferenceDelegate::PutImageLoadingAllowed(bool flag) {
33895+  image_loading_allowed_ = flag;
33896+  WebPreferencesChanged();
33897+}
33898+
33899+void NWebPreferenceDelegate::PutFontSizeLowerLimit(int size) {
33900+  font_size_lower_limit_ = size;
33901+  WebPreferencesChanged();
33902+}
33903+
33904+void NWebPreferenceDelegate::PutLogicalFontSizeLowerLimit(int size) {
33905+  logical_font_size_lower_limit_ = size;
33906+  WebPreferencesChanged();
33907+}
33908+
33909+void NWebPreferenceDelegate::PutSansSerifFontFamilyName(std::string font) {
33910+  sans_serif_font_family_name_ = font;
33911+  WebPreferencesChanged();
33912+}
33913+
33914+void NWebPreferenceDelegate::PutSerifFontFamilyName(std::string font) {
33915+  serif_font_family_name_ = font;
33916+  WebPreferencesChanged();
33917+}
33918+
33919+void NWebPreferenceDelegate::PutStandardFontFamilyName(std::string font) {
33920+  standard_font_family_name_ = font;
33921+  WebPreferencesChanged();
33922+}
33923+
33924+void NWebPreferenceDelegate::PutUserAgent(std::string ua) {
33925+  std::string old_user_agent = user_agent_;
33926+  if (ua.empty() || ua.length() == 0) {
33927+    user_agent_ = DefaultUserAgent();
33928+  } else {
33929+    user_agent_ = ua;
33930+  }
33931+  if (old_user_agent != user_agent_) {
33932+    browser_->GetHost()->PutUserAgent(ua);
33933+  }
33934+}
33935+
33936+void NWebPreferenceDelegate::PutZoomingForTextFactor(int textZoom) {
33937+  if (zooming_for_text_factor_ != textZoom) {
33938+    zooming_for_text_factor_ = textZoom;
33939+    WebPreferencesChanged();
33940+  }
33941+}
33942+
33943+void NWebPreferenceDelegate::PutGeolocationAllowed(bool flag) {
33944+  geolocation_allowed_ = flag;
33945+  WebPreferencesChanged();
33946+}
33947+
33948+void NWebPreferenceDelegate::PutAccessModeForSecureOriginLoadFromInsecure(AccessMode mode) {
33949+  if (access_mode_ != mode) {
33950+    access_mode_ = mode;
33951+    WebPreferencesChanged();
33952+  }
33953+}
33954+
33955+void NWebPreferenceDelegate::PutZoomingFunctionEnabled(bool flag) {
33956+  if (zooming_function_enabled_ != flag) {
33957+    zooming_function_enabled_ = flag;
33958+    WebPreferencesChanged();
33959+  }
33960+}
33961+
33962+bool NWebPreferenceDelegate::EnableContentAccess() {
33963+  return content_access_;
33964+}
33965+bool NWebPreferenceDelegate::EnableRawFileAccess() {
33966+  return raw_file_access_;
33967+}
33968+
33969+bool NWebPreferenceDelegate::EnableRawFileAccessFromFileURLs() {
33970+  return raw_file_access_from_file_urls_;
33971+}
33972+
33973+bool NWebPreferenceDelegate::EnableUniversalAccessFromFileURLs() {
33974+  return universal_access_from_file_urls_;
33975+}
33976+
33977+bool NWebPreferenceDelegate::IsLoadImageFromNetworkDisabled() {
33978+  return !images_enabled_;
33979+}
33980+
33981+std::string NWebPreferenceDelegate::CursiveFontFamilyName() {
33982+  return cursive_font_family_name_;
33983+}
33984+
33985+bool NWebPreferenceDelegate::IsDataBaseEnabled() {
33986+  return databases_enabled_;
33987+}
33988+
33989+int NWebPreferenceDelegate::DefaultFixedFontSize() {
33990+  return default_fixed_font_size_;
33991+}
33992+
33993+int NWebPreferenceDelegate::DefaultFontSize() {
33994+  return default_font_size_;
33995+}
33996+
33997+std::string NWebPreferenceDelegate::DefaultTextEncodingFormat() {
33998+  return default_encoding_;
33999+}
34000+
34001+std::string NWebPreferenceDelegate::DefaultUserAgent() {
34002+  std::string ua = browser_->GetHost()->DefaultUserAgent();
34003+  return ua;
34004+}
34005+
34006+bool NWebPreferenceDelegate::IsDomStorageEnabled() {
34007+  return dom_storage_;
34008+}
34009+
34010+std::string NWebPreferenceDelegate::FantasyFontFamilyName() {
34011+  return fantasy_font_family_name_;
34012+}
34013+
34014+std::string NWebPreferenceDelegate::FixedFontFamilyName() {
34015+  return fixed_font_family_name_;
34016+}
34017+
34018+int NWebPreferenceDelegate::DarkModeEnabled() {
34019+  return dark_mode_enabled_;
34020+}
34021+
34022+bool NWebPreferenceDelegate::IsCreateWindowsByJavaScriptAllowed() {
34023+  return create_windows_by_javascript_allowed_;
34024+}
34025+
34026+bool NWebPreferenceDelegate::IsJavaScriptAllowed() {
34027+  return javascript_allowed_;
34028+}
34029+
34030+bool NWebPreferenceDelegate::IsImageLoadingAllowed() {
34031+  return image_loading_allowed_;
34032+}
34033+
34034+int NWebPreferenceDelegate::FontSizeLowerLimit() {
34035+  return font_size_lower_limit_;
34036+}
34037+
34038+int NWebPreferenceDelegate::LogicalFontSizeLowerLimit() {
34039+  return logical_font_size_lower_limit_;
34040+}
34041+
34042+std::string NWebPreferenceDelegate::SansSerifFontFamilyName() {
34043+  return sans_serif_font_family_name_;
34044+}
34045+
34046+std::string NWebPreferenceDelegate::SerifFontFamilyName() {
34047+  return serif_font_family_name_;
34048+}
34049+
34050+std::string NWebPreferenceDelegate::StandardFontFamilyName() {
34051+  return standard_font_family_name_;
34052+}
34053+
34054+std::string NWebPreferenceDelegate::UserAgent() {
34055+  if (user_agent_.empty()) {
34056+    user_agent_ = DefaultUserAgent();
34057+  }
34058+  return user_agent_;
34059+}
34060+
34061+int NWebPreferenceDelegate::ZoomingForTextFactor() {
34062+  return zooming_for_text_factor_;
34063+}
34064+
34065+bool NWebPreferenceDelegate::GeolocationAllowed() {
34066+  return geolocation_allowed_;
34067+}
34068+
34069+int NWebPreferenceDelegate::AccessModeForSecureOriginLoadFromInsecure() {
34070+  return access_mode_;
34071+}
34072+
34073+bool NWebPreferenceDelegate::RunningInsecureContentAllowed() {
34074+  return access_mode_ == ALWAYS_ALLOW;
34075+}
34076+
34077+bool NWebPreferenceDelegate::UseStricMixedContentCheckingAllowed() {
34078+  return access_mode_ == NEVER_ALLOW;
34079+}
34080+
34081+const base::Feature webview_mixed_content_autoupgrades{
34082+    "WebViewMixedContentAutoupgrades", base::FEATURE_DISABLED_BY_DEFAULT};
34083+
34084+bool NWebPreferenceDelegate::MixedContentAutoupgradesAllowed() {
34085+  if (base::FeatureList::IsEnabled(webview_mixed_content_autoupgrades)) {
34086+    return access_mode_ == COMPATIBILITY_MODE;
34087+  }
34088+  return false;
34089+}
34090+
34091+bool NWebPreferenceDelegate::ZoomingfunctionEnabled() {
34092+  return zooming_function_enabled_;
34093+}
34094+}
34095diff --git a/ohos_nweb/src/cef_delegate/nweb_preference_delegate.h b/ohos_nweb/src/cef_delegate/nweb_preference_delegate.h
34096new file mode 100644
34097index 0000000000..2d439ffc74
34098--- /dev/null
34099+++ b/ohos_nweb/src/cef_delegate/nweb_preference_delegate.h
34100@@ -0,0 +1,121 @@
34101+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
34102+// Use of this source code is governed by a BSD-style license that can be
34103+// found in the LICENSE file.
34104+
34105+#ifndef NWEB_PREFERENCE_DELEGATE_H
34106+#define NWEB_PREFERENCE_DELEGATE_H
34107+
34108+#include "cef/include/cef_browser.h"
34109+#include "ohos_nweb/include/nweb_preference.h"
34110+
34111+namespace OHOS::NWeb {
34112+class NWebPreferenceDelegate : public NWebPreference {
34113+ public:
34114+  NWebPreferenceDelegate();
34115+  ~NWebPreferenceDelegate();
34116+  void OnDestroy();
34117+  void SetBrowser(CefRefPtr<CefBrowser> browser);
34118+  void WebPreferencesChanged();
34119+  void ComputeBrowserSettings(CefBrowserSettings& browser_settings);
34120+
34121+  void SetBrowserSettingsToNetHelpers();
34122+
34123+  /* set methods */
34124+  void PutEnableContentAccess(bool flag) override;
34125+  void PutEnableRawFileAccess(bool flag) override;
34126+  void PutEnableRawFileAccessFromFileURLs(bool flag) override;
34127+  void PutEnableUniversalAccessFromFileURLs(bool flag) override;
34128+  void PutLoadImageFromNetworkDisabled(bool flag) override;
34129+  void PutCursiveFontFamilyName(std::string font) override;
34130+  void PutDatabaseAllowed(bool flag) override;
34131+  void PutDefaultFixedFontSize(int size) override;
34132+  void PutDefaultFontSize(int size) override;
34133+  void PutDefaultTextEncodingFormat(std::string encoding) override;
34134+  void PutDomStorageEnabled(bool flag) override;
34135+  void PutFantasyFontFamilyName(std::string font) override;
34136+  void PutFixedFontFamilyName(std::string font) override;
34137+  void PutDarkModeEnabled(int forceDark) override;
34138+  void PutIsCreateWindowsByJavaScriptAllowed(bool flag) override;
34139+  void PutJavaScriptEnabled(bool flag) override;
34140+  void PutImageLoadingAllowed(bool flag) override;
34141+  void PutFontSizeLowerLimit(int size) override;
34142+  void PutLogicalFontSizeLowerLimit(int size) override;
34143+  void PutSansSerifFontFamilyName(std::string font) override;
34144+  void PutSerifFontFamilyName(std::string font) override;
34145+  void PutStandardFontFamilyName(std::string font) override;
34146+  void PutUserAgent(std::string ua) override;
34147+  void PutZoomingForTextFactor(int textZoom) override;
34148+  void PutGeolocationAllowed(bool flag) override;
34149+  void PutAccessModeForSecureOriginLoadFromInsecure(AccessMode mode) override;
34150+  void PutZoomingFunctionEnabled(bool flag) override;
34151+
34152+  /* get methods*/
34153+  bool EnableContentAccess() override;
34154+  bool EnableRawFileAccess() override;
34155+  bool EnableRawFileAccessFromFileURLs() override;
34156+  bool EnableUniversalAccessFromFileURLs() override;
34157+  bool IsLoadImageFromNetworkDisabled() override;
34158+  std::string CursiveFontFamilyName() override;
34159+  bool IsDataBaseEnabled() override;
34160+  int DefaultFixedFontSize() override;
34161+  int DefaultFontSize() override;
34162+  std::string DefaultTextEncodingFormat() override;
34163+  std::string DefaultUserAgent() override;
34164+  bool IsDomStorageEnabled() override;
34165+  std::string FantasyFontFamilyName() override;
34166+  std::string FixedFontFamilyName() override;
34167+  int DarkModeEnabled() override;
34168+  bool IsCreateWindowsByJavaScriptAllowed() override;
34169+  bool IsJavaScriptAllowed() override;
34170+  bool IsImageLoadingAllowed() override;
34171+  int FontSizeLowerLimit() override;
34172+  int LogicalFontSizeLowerLimit() override;
34173+  std::string SansSerifFontFamilyName() override;
34174+  std::string SerifFontFamilyName() override;
34175+  std::string StandardFontFamilyName() override;
34176+  std::string UserAgent() override;
34177+  int ZoomingForTextFactor() override;
34178+  bool GeolocationAllowed() override;
34179+  int AccessModeForSecureOriginLoadFromInsecure() override;
34180+  bool ZoomingfunctionEnabled() override;
34181+
34182+  bool RunningInsecureContentAllowed();
34183+  bool UseStricMixedContentCheckingAllowed();
34184+  bool MixedContentAutoupgradesAllowed();
34185+
34186+ private:
34187+  CefRefPtr<CefBrowser> browser_ = nullptr;
34188+
34189+  /* Web preferences begin*/
34190+  std::string standard_font_family_name_{"sans-serif"};
34191+  std::string fixed_font_family_name_{"monospace"};
34192+  std::string serif_font_family_name_{"serif"};
34193+  std::string sans_serif_font_family_name_{"sans-serif"};
34194+  std::string cursive_font_family_name_{"cursive"};
34195+  std::string fantasy_font_family_name_{"fantasy"};
34196+  int default_font_size_{16};
34197+  int default_fixed_font_size_{13};
34198+  int font_size_lower_limit_{8};
34199+  int logical_font_size_lower_limit_{8};
34200+  std::string default_encoding_{"UTF-8"};
34201+  bool images_enabled_{true};
34202+  bool javascript_allowed_{false};
34203+  bool image_loading_allowed_{true};
34204+  bool dom_storage_{false};
34205+  bool databases_enabled_{false};
34206+  bool content_access_{true};
34207+  bool raw_file_access_{false};
34208+  bool universal_access_from_file_urls_{false};
34209+  bool raw_file_access_from_file_urls_{false};
34210+  bool dark_mode_enabled_{false};
34211+  /* Web preferences end*/
34212+  bool create_windows_by_javascript_allowed_{false};
34213+  std::string user_agent_{""};
34214+  int zooming_for_text_factor_{100};
34215+  bool geolocation_allowed_{true};
34216+  int access_mode_{NEVER_ALLOW};
34217+  bool zooming_function_enabled_{true};
34218+};
34219+}  // namespace OHOS::NWeb
34220+
34221+#endif
34222diff --git a/ohos_nweb/src/cef_delegate/nweb_render_handler.cc b/ohos_nweb/src/cef_delegate/nweb_render_handler.cc
34223new file mode 100644
34224index 0000000000..4b85ca9122
34225--- /dev/null
34226+++ b/ohos_nweb/src/cef_delegate/nweb_render_handler.cc
34227@@ -0,0 +1,100 @@
34228+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
34229+// Use of this source code is governed by a BSD-style license that can be
34230+// found in the LICENSE file.
34231+
34232+#include "nweb_render_handler.h"
34233+
34234+#include <sys/time.h>
34235+#include <cerrno>
34236+#include <cstring>
34237+
34238+#include "base/logging.h"
34239+
34240+namespace OHOS::NWeb {
34241+// static
34242+CefRefPtr<NWebRenderHandler> NWebRenderHandler::Create() {
34243+  CefRefPtr<NWebRenderHandler> renderHandler(new NWebRenderHandler());
34244+  if (renderHandler == nullptr) {
34245+    LOG(ERROR) << "fail to create NWebRenderHandler instance";
34246+    return nullptr;
34247+  }
34248+  return renderHandler;
34249+}
34250+
34251+void NWebRenderHandler::RegisterRenderCb(
34252+    std::function<void(const char*)> render_update_cb) {
34253+  render_update_cb_ = render_update_cb;
34254+}
34255+
34256+void NWebRenderHandler::SetInputMethodClient(
34257+    CefRefPtr<NWebInputMethodClient> client) {
34258+  inputmethod_client_ = client;
34259+}
34260+
34261+void NWebRenderHandler::Resize(uint32_t width, uint32_t height) {
34262+  width_ = width;
34263+  height_ = height;
34264+}
34265+
34266+void NWebRenderHandler::GetViewRect(CefRefPtr<CefBrowser> browser,
34267+                                    CefRect& rect) {
34268+  rect.x = 0;
34269+  rect.y = 0;
34270+  rect.width = width_;
34271+  rect.height = height_;
34272+  return;
34273+}
34274+
34275+void NWebRenderHandler::OnPaint(CefRefPtr<CefBrowser> browser,
34276+                                PaintElementType type,
34277+                                const RectList& dirty_rects,
34278+                                const void* buffer,
34279+                                int width,
34280+                                int height) {
34281+  // run render callback to take buffer.
34282+  // note: buffer must be consumed asap with no lock protected
34283+  if (render_update_cb_ != nullptr) {
34284+    render_update_cb_(reinterpret_cast<const char*>(buffer));
34285+  }
34286+}
34287+
34288+void NWebRenderHandler::OnRootLayerChanged(CefRefPtr<CefBrowser> browser,
34289+                                           int height,
34290+                                           int width) {
34291+  content_height_ = height;
34292+  content_width_ = width;
34293+}
34294+
34295+int NWebRenderHandler::ContentHeight() {
34296+  return content_height_;
34297+}
34298+
34299+void NWebRenderHandler::OnImeCompositionRangeChanged(
34300+    CefRefPtr<CefBrowser> browser,
34301+    const CefRange& selected_range,
34302+    const RectList& character_bounds) {
34303+  LOG(INFO) << "NWebRenderHandler::OnImeCompositionRangeChanged";
34304+}
34305+
34306+void NWebRenderHandler::OnTextSelectionChanged(CefRefPtr<CefBrowser> browser,
34307+                                               const CefString& selected_text,
34308+                                               const CefRange& selected_range) {
34309+  if (inputmethod_client_) {
34310+    inputmethod_client_->OnTextSelectionChanged(browser, selected_text,
34311+                                                selected_range);
34312+  }
34313+}
34314+
34315+void NWebRenderHandler::OnVirtualKeyboardRequested(
34316+    CefRefPtr<CefBrowser> browser,
34317+    TextInputMode input_mode) {
34318+  if (inputmethod_client_) {
34319+    if (input_mode != CEF_TEXT_INPUT_MODE_NONE) {
34320+      inputmethod_client_->Attach(browser);
34321+      inputmethod_client_->ShowTextInput();
34322+    } else {
34323+      inputmethod_client_->HideTextInput();
34324+    }
34325+  }
34326+}
34327+}  // namespace OHOS::NWeb
34328diff --git a/ohos_nweb/src/cef_delegate/nweb_render_handler.h b/ohos_nweb/src/cef_delegate/nweb_render_handler.h
34329new file mode 100644
34330index 0000000000..5f4165d47f
34331--- /dev/null
34332+++ b/ohos_nweb/src/cef_delegate/nweb_render_handler.h
34333@@ -0,0 +1,64 @@
34334+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
34335+// Use of this source code is governed by a BSD-style license that can be
34336+// found in the LICENSE file.
34337+
34338+#ifndef NWEB_RENDER_HANDLER_H
34339+#define NWEB_RENDER_HANDLER_H
34340+
34341+#include <functional>
34342+#include <memory>
34343+#include "cef/include/cef_render_handler.h"
34344+#include "nweb_inputmethod_client.h"
34345+
34346+namespace OHOS::NWeb {
34347+class NWebRenderHandler : public CefRenderHandler {
34348+ public:
34349+  static CefRefPtr<NWebRenderHandler> Create();
34350+  NWebRenderHandler() = default;
34351+  ~NWebRenderHandler() = default;
34352+
34353+  void RegisterRenderCb(std::function<void(const char*)> render_update_cb);
34354+  void Resize(uint32_t width, uint32_t height);
34355+  int ContentHeight();
34356+  void SetInputMethodClient(CefRefPtr<NWebInputMethodClient> client);
34357+
34358+  /* CefRenderHandler method begin */
34359+  virtual void GetViewRect(CefRefPtr<CefBrowser> browser,
34360+                           CefRect& rect) override;
34361+  virtual void OnPaint(CefRefPtr<CefBrowser> browser,
34362+                       PaintElementType type,
34363+                       const RectList& dirty_rects,
34364+                       const void* buffer,
34365+                       int width,
34366+                       int height) override;
34367+  void OnRootLayerChanged(CefRefPtr<CefBrowser> browser,
34368+                          int height,
34369+                          int width) override;
34370+
34371+  virtual void OnImeCompositionRangeChanged(
34372+      CefRefPtr<CefBrowser> browser,
34373+      const CefRange& selected_range,
34374+      const RectList& character_bounds) override;
34375+
34376+  virtual void OnTextSelectionChanged(CefRefPtr<CefBrowser> browser,
34377+                                      const CefString& selected_text,
34378+                                      const CefRange& selected_range) override;
34379+
34380+  virtual void OnVirtualKeyboardRequested(CefRefPtr<CefBrowser> browser,
34381+                                          TextInputMode input_mode) override;
34382+  /* CefRenderHandler method end */
34383+
34384+  // Include the default reference counting implementation.
34385+  IMPLEMENT_REFCOUNTING(NWebRenderHandler);
34386+
34387+ private:
34388+  std::function<void(const char*)> render_update_cb_ = nullptr;
34389+  CefRefPtr<NWebInputMethodClient> inputmethod_client_ = nullptr;
34390+  uint32_t width_ = 0;
34391+  uint32_t height_ = 0;
34392+  int content_height_ = 0;
34393+  int content_width_ = 0;
34394+};
34395+}
34396+
34397+#endif  // NWEB_RENDER_HANDLER_H
34398diff --git a/ohos_nweb/src/cef_delegate/nweb_resource_handler.cc b/ohos_nweb/src/cef_delegate/nweb_resource_handler.cc
34399new file mode 100644
34400index 0000000000..3b465b8f85
34401--- /dev/null
34402+++ b/ohos_nweb/src/cef_delegate/nweb_resource_handler.cc
34403@@ -0,0 +1,83 @@
34404+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
34405+// Use of this source code is governed by a BSD-style license that can be
34406+// found in the LICENSE file.
34407+
34408+#include "nweb_resource_handler.h"
34409+#include "base/logging.h"
34410+
34411+namespace OHOS::NWeb {
34412+void ConvertMapToHeaderMap(
34413+    CefRequest::HeaderMap& headers,
34414+    const std::map<std::string, std::string> response_map) {
34415+  for (auto iter = response_map.begin(); iter != response_map.end(); iter++) {
34416+    const std::string& key = iter->first;
34417+    const std::string& value = iter->second;
34418+    headers.emplace(key, value);
34419+  }
34420+}
34421+
34422+NWebResourceHandler::NWebResourceHandler(
34423+    std::shared_ptr<NWebUrlResourceResponse> web_response,
34424+    std::string& str)
34425+    : data_(str) {
34426+  response_ = web_response;
34427+  offset_ = 0;
34428+}
34429+
34430+/* CefResourceHandler method begin */
34431+bool NWebResourceHandler::Open(CefRefPtr<CefRequest> request,
34432+                               bool& handle_request,
34433+                               CefRefPtr<CefCallback> callback) {
34434+  LOG(INFO) << "NWebResourceHandler::Open";
34435+  handle_request = true;
34436+
34437+  if (response_) {
34438+    data_ = response_->ResponseData();
34439+  }
34440+  return true;
34441+}
34442+
34443+bool NWebResourceHandler::Read(void* data_out,
34444+                               int bytes_to_read,
34445+                               int& bytes_read,
34446+                               CefRefPtr<CefResourceReadCallback> callback) {
34447+  LOG(INFO) << "NWebResourceHandler::Read";
34448+  bool has_data = false;
34449+  bytes_read = 0;
34450+
34451+  if (offset_ < data_.length()) {
34452+    // Copy the next block of data into the buffer.
34453+    int transfer_size =
34454+        std::min(bytes_to_read, static_cast<int>(data_.length() - offset_));
34455+    memcpy(data_out, data_.c_str() + offset_, transfer_size);
34456+    offset_ += transfer_size;
34457+
34458+    bytes_read = transfer_size;
34459+    has_data = true;
34460+  }
34461+
34462+  return has_data;
34463+}
34464+
34465+void NWebResourceHandler::GetResponseHeaders(CefRefPtr<CefResponse> response,
34466+                                             int64& response_length,
34467+                                             CefString& redirectUrl) {
34468+  LOG(INFO) << "NWebResourceHandler::GetResponseHeaders";
34469+  if (response_ && response) {
34470+    response->SetMimeType(response_->ResponseMimeType());
34471+    response->SetStatus(response_->ResponseStatusCode());
34472+    response->SetStatusText(response_->ResponseStatus());
34473+    response->SetCharset(response_->ResponseEncoding());
34474+    CefRequest::HeaderMap cef_request_headers;
34475+    std::map<std::string, std::string> request_headers =
34476+        response_->ResponseHeaders();
34477+    ConvertMapToHeaderMap(cef_request_headers, request_headers);
34478+    response->SetHeaderMap(cef_request_headers);
34479+  }
34480+
34481+  response_length = data_.length();
34482+}
34483+
34484+void NWebResourceHandler::Cancel() {}
34485+/* CefResourceHandler method end */
34486+}  // namespace OHOS::NWeb
34487diff --git a/ohos_nweb/src/cef_delegate/nweb_resource_handler.h b/ohos_nweb/src/cef_delegate/nweb_resource_handler.h
34488new file mode 100644
34489index 0000000000..fc23967df1
34490--- /dev/null
34491+++ b/ohos_nweb/src/cef_delegate/nweb_resource_handler.h
34492@@ -0,0 +1,48 @@
34493+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
34494+// Use of this source code is governed by a BSD-style license that can be
34495+// found in the LICENSE file.
34496+
34497+#ifndef NWEB_REOURCE_HANDLER_H
34498+#define NWEB_REOURCE_HANDLER_H
34499+
34500+#include <condition_variable>
34501+#include <mutex>
34502+#include <string>
34503+#include <vector>
34504+#include "cef/include/cef_resource_handler.h"
34505+#include "nweb_url_resource_response.h"
34506+
34507+namespace OHOS::NWeb {
34508+class NWebResourceHandler : public CefResourceHandler {
34509+ public:
34510+  NWebResourceHandler(std::shared_ptr<NWebUrlResourceResponse> web_response, std::string& str);
34511+  ~NWebResourceHandler() = default;
34512+
34513+  /* CefResourceHandler method begin */
34514+  bool Open(CefRefPtr<CefRequest> request,
34515+            bool& handle_request,
34516+            CefRefPtr<CefCallback> callback) override;
34517+
34518+  bool Read(void* data_out,
34519+            int bytes_to_read,
34520+            int& bytes_read,
34521+            CefRefPtr<CefResourceReadCallback> callback) override;
34522+
34523+  void GetResponseHeaders(CefRefPtr<CefResponse> response,
34524+                          int64& response_length,
34525+                          CefString& redirectUrl) override;
34526+
34527+  void Cancel() override;
34528+  /* CefResourceHandler method end */
34529+
34530+  // Include the default reference counting implementation.
34531+  IMPLEMENT_REFCOUNTING(NWebResourceHandler);
34532+
34533+ private:
34534+  std::string data_;
34535+  size_t offset_ = 0;
34536+  std::shared_ptr<NWebUrlResourceResponse> response_;
34537+};
34538+}
34539+
34540+#endif
34541diff --git a/ohos_nweb/src/nweb_cookie_manager_delegate_interface.h b/ohos_nweb/src/nweb_cookie_manager_delegate_interface.h
34542new file mode 100644
34543index 0000000000..564c57934e
34544--- /dev/null
34545+++ b/ohos_nweb/src/nweb_cookie_manager_delegate_interface.h
34546@@ -0,0 +1,35 @@
34547+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
34548+// Use of this source code is governed by a BSD-style license that can be
34549+// found in the LICENSE file.
34550+
34551+#ifndef NWEB_COOKIE_MANAGER_DELEGATE_INTERFACE_H
34552+#define NWEB_COOKIE_MANAGER_DELEGATE_INTERFACE_H
34553+
34554+#include <memory>
34555+#include <string>
34556+#include "nweb_value_callback.h"
34557+
34558+namespace OHOS::NWeb {
34559+class NWebCookieManagerDelegateInterface {
34560+ public:
34561+  virtual ~NWebCookieManagerDelegateInterface() = default;
34562+  virtual bool IsAcceptCookieAllowed() = 0;
34563+  virtual void PutAcceptCookieEnabled(bool accept) = 0;
34564+  virtual bool IsFileURLSchemeCookiesAllowed() = 0;
34565+  virtual void PutAcceptFileURLSchemeCookiesEnabled(bool allow) = 0;
34566+  virtual void ReturnCookie(
34567+      const std::string& url,
34568+      std::shared_ptr<NWebValueCallback<std::string>> callback) = 0;
34569+  virtual void SetCookie(const std::string& url,
34570+                         const std::string& value,
34571+                         std::shared_ptr<NWebValueCallback<bool>> callback) = 0;
34572+  virtual void ExistCookies(
34573+      std::shared_ptr<NWebValueCallback<bool>> callback) = 0;
34574+  virtual void Store(std::shared_ptr<NWebValueCallback<bool>> callback) = 0;
34575+  virtual void DeleteSessionCookies(
34576+      std::shared_ptr<NWebValueCallback<bool>> callback) = 0;
34577+  virtual void DeleteCookieEntirely(
34578+      std::shared_ptr<NWebValueCallback<bool>> callback) = 0;
34579+};
34580+}  // namespace OHOS::NWeb
34581+#endif
34582\ No newline at end of file
34583diff --git a/ohos_nweb/src/nweb_cookie_manager_impl.cc b/ohos_nweb/src/nweb_cookie_manager_impl.cc
34584new file mode 100644
34585index 0000000000..5d0659ed85
34586--- /dev/null
34587+++ b/ohos_nweb/src/nweb_cookie_manager_impl.cc
34588@@ -0,0 +1,93 @@
34589+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
34590+// Use of this source code is governed by a BSD-style license that can be
34591+// found in the LICENSE file.
34592+
34593+#include "nweb_cookie_manager_impl.h"
34594+#include "nweb_cookie_manager_delegate.h"
34595+#include "nweb_hilog.h"
34596+
34597+using namespace OHOS::NWeb;
34598+
34599+namespace OHOS::NWeb {
34600+NWebCookieManagerImpl::NWebCookieManagerImpl() {
34601+#if defined(USE_CEF)
34602+  delegate_ = std::make_shared<NWebCookieManagerDelegate>();
34603+#endif
34604+}
34605+
34606+bool NWebCookieManagerImpl::IsAcceptCookieAllowed() const {
34607+  if (delegate_ != nullptr) {
34608+    return delegate_->IsAcceptCookieAllowed();
34609+  }
34610+  return false;
34611+}
34612+
34613+void NWebCookieManagerImpl::PutAcceptCookieEnabled(bool accept) {
34614+  if (delegate_ != nullptr) {
34615+    delegate_->PutAcceptCookieEnabled(accept);
34616+  }
34617+}
34618+
34619+bool NWebCookieManagerImpl::IsFileURLSchemeCookiesAllowed() const {
34620+  if (delegate_ != nullptr) {
34621+    return delegate_->IsFileURLSchemeCookiesAllowed();
34622+  }
34623+  return false;
34624+}
34625+
34626+void NWebCookieManagerImpl::PutAcceptFileURLSchemeCookiesEnabled(bool allow) {
34627+  if (delegate_ != nullptr) {
34628+    delegate_->PutAcceptFileURLSchemeCookiesEnabled(allow);
34629+  }
34630+}
34631+
34632+void NWebCookieManagerImpl::SetCookie(
34633+    const std::string& url,
34634+    const std::string& value,
34635+    std::shared_ptr<NWebValueCallback<bool>> callback) {
34636+  if (delegate_ != nullptr) {
34637+    delegate_->SetCookie(url, value, callback);
34638+  }
34639+}
34640+
34641+void NWebCookieManagerImpl::ReturnCookie(
34642+    const std::string& url,
34643+    std::shared_ptr<NWebValueCallback<std::string>> callback) {
34644+  if (delegate_ != nullptr) {
34645+    delegate_->ReturnCookie(url, callback);
34646+  }
34647+}
34648+
34649+void NWebCookieManagerImpl::ExistCookies(
34650+    std::shared_ptr<NWebValueCallback<bool>> callback) {
34651+  if (delegate_ != nullptr) {
34652+    delegate_->ExistCookies(callback);
34653+  }
34654+}
34655+
34656+void NWebCookieManagerImpl::Store(
34657+    std::shared_ptr<NWebValueCallback<bool>> callback) {
34658+  if (delegate_ != nullptr) {
34659+    delegate_->Store(callback);
34660+  }
34661+}
34662+
34663+void NWebCookieManagerImpl::DeleteSessionCookies(
34664+    std::shared_ptr<NWebValueCallback<bool>> callback) {
34665+  if (delegate_ != nullptr) {
34666+    delegate_->DeleteSessionCookies(callback);
34667+  }
34668+}
34669+
34670+void NWebCookieManagerImpl::DeleteCookieEntirely(
34671+    std::shared_ptr<NWebValueCallback<bool>> callback) {
34672+  if (delegate_ != nullptr) {
34673+    delegate_->DeleteCookieEntirely(callback);
34674+  }
34675+}
34676+
34677+NWebCookieManager* NWebCookieManager::GetInstance() {
34678+  static NWebCookieManagerImpl instance;
34679+  return &instance;
34680+}
34681+}  // namespace OHOS::NWeb
34682\ No newline at end of file
34683diff --git a/ohos_nweb/src/nweb_cookie_manager_impl.h b/ohos_nweb/src/nweb_cookie_manager_impl.h
34684new file mode 100644
34685index 0000000000..128ab637b7
34686--- /dev/null
34687+++ b/ohos_nweb/src/nweb_cookie_manager_impl.h
34688@@ -0,0 +1,39 @@
34689+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
34690+// Use of this source code is governed by a BSD-style license that can be
34691+// found in the LICENSE file.
34692+
34693+#ifndef NWEB_COOKIE_MANAGER_IMPL_H
34694+#define NWEB_COOKIE_MANAGER_IMPL_H
34695+
34696+#include "nweb_cookie_manager.h"
34697+#include "nweb_cookie_manager_delegate_interface.h"
34698+
34699+namespace OHOS::NWeb {
34700+class NWebCookieManagerImpl : public NWebCookieManager {
34701+ public:
34702+  NWebCookieManagerImpl();
34703+  ~NWebCookieManagerImpl() = default;
34704+
34705+  bool IsAcceptCookieAllowed() const override;
34706+  void PutAcceptCookieEnabled(bool accept) override;
34707+  bool IsFileURLSchemeCookiesAllowed() const override;
34708+  void PutAcceptFileURLSchemeCookiesEnabled(bool allow) override;
34709+  void ReturnCookie(
34710+      const std::string& url,
34711+      std::shared_ptr<NWebValueCallback<std::string>> callback) override;
34712+  void SetCookie(const std::string& url,
34713+                 const std::string& value,
34714+                 std::shared_ptr<NWebValueCallback<bool>> callback) override;
34715+  void ExistCookies(std::shared_ptr<NWebValueCallback<bool>> callback) override;
34716+  void Store(std::shared_ptr<NWebValueCallback<bool>> callback) override;
34717+  void DeleteSessionCookies(
34718+      std::shared_ptr<NWebValueCallback<bool>> callback) override;
34719+  void DeleteCookieEntirely(
34720+      std::shared_ptr<NWebValueCallback<bool>> callback) override;
34721+
34722+ private:
34723+  std::shared_ptr<NWebCookieManagerDelegateInterface> delegate_ = nullptr;
34724+};
34725+}  // namespace OHOS::NWeb
34726+
34727+#endif  // NWEB_COOKIE_MANAGER_IMPL_H
34728\ No newline at end of file
34729diff --git a/ohos_nweb/src/nweb_delegate_adapter.cc b/ohos_nweb/src/nweb_delegate_adapter.cc
34730new file mode 100644
34731index 0000000000..f0f17c61c0
34732--- /dev/null
34733+++ b/ohos_nweb/src/nweb_delegate_adapter.cc
34734@@ -0,0 +1,31 @@
34735+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
34736+// Use of this source code is governed by a BSD-style license that can be
34737+// found in the LICENSE file.
34738+
34739+#include "nweb_delegate_adapter.h"
34740+
34741+#include "nweb_hilog.h"
34742+
34743+#if defined(USE_CEF)
34744+#include "cef_delegate/nweb_delegate.h"
34745+#endif
34746+namespace OHOS::NWeb {
34747+// static
34748+std::shared_ptr<NWebDelegateInterface>
34749+NWebDelegateAdapter::CreateNWebDelegate(int argc, const char* argv[]) {
34750+#if defined(USE_CEF)
34751+  std::shared_ptr<NWebDelegate> delegate =
34752+      std::make_shared<NWebDelegate>(argc, argv);
34753+
34754+  if (delegate == nullptr || !delegate->Init()) {
34755+    WVLOG_I("FAIL to create nweb delegate instance");
34756+    return nullptr;
34757+  }
34758+
34759+  return delegate;
34760+#else
34761+  WVLOG_E("NO IMPLEMENTATION");
34762+  return nullptr;
34763+#endif
34764+}
34765+}
34766diff --git a/ohos_nweb/src/nweb_delegate_adapter.h b/ohos_nweb/src/nweb_delegate_adapter.h
34767new file mode 100644
34768index 0000000000..1af15ad639
34769--- /dev/null
34770+++ b/ohos_nweb/src/nweb_delegate_adapter.h
34771@@ -0,0 +1,21 @@
34772+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
34773+// Use of this source code is governed by a BSD-style license that can be
34774+// found in the LICENSE file.
34775+
34776+#ifndef NWEB_DELEGATE_HELPER_H
34777+#define NWEB_DELEGATE_HELPER_H
34778+
34779+#include <memory>
34780+#include "nweb_export.h"
34781+#include "nweb_delegate_interface.h"
34782+
34783+namespace OHOS::NWeb {
34784+class OHOS_NWEB_EXPORT NWebDelegateAdapter {
34785+ public:
34786+  static std::shared_ptr<NWebDelegateInterface> CreateNWebDelegate(
34787+      int argc,
34788+      const char* argv[]);
34789+};
34790+}
34791+
34792+#endif  // NWEB_DELEGATE_HELPER_H
34793diff --git a/ohos_nweb/src/nweb_delegate_interface.h b/ohos_nweb/src/nweb_delegate_interface.h
34794new file mode 100755
34795index 0000000000..179578beec
34796--- /dev/null
34797+++ b/ohos_nweb/src/nweb_delegate_interface.h
34798@@ -0,0 +1,80 @@
34799+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
34800+// Use of this source code is governed by a BSD-style license that can be
34801+// found in the LICENSE file.
34802+
34803+#ifndef NWEB_DELEGATE_INTERFACE_H
34804+#define NWEB_DELEGATE_INTERFACE_H
34805+
34806+#include <functional>
34807+#include <string>
34808+#include "cef_delegate/nweb_inputmethod_client.h"
34809+#include "nweb_download_callback.h"
34810+#include "nweb_preference.h"
34811+#include "nweb_handler.h"
34812+namespace OHOS::NWeb {
34813+class NWebDelegateInterface {
34814+ public:
34815+  virtual ~NWebDelegateInterface() = default;
34816+
34817+  virtual bool IsReady() = 0;
34818+  virtual void OnDestroy(bool is_close_all) = 0;
34819+  virtual void RegisterDownLoadListener(
34820+      std::shared_ptr<NWebDownloadCallback> downloadListener) = 0;
34821+  virtual void RegisterNWebHandler(std::shared_ptr<NWebHandler> handler) = 0;
34822+  virtual void RegisterRenderCb(
34823+      std::function<void(const char*)> render_update_cb) = 0;
34824+  virtual void SetInputMethodClient(
34825+      CefRefPtr<NWebInputMethodClient> client) = 0;
34826+
34827+  /* event interface */
34828+  virtual void Resize(uint32_t width, uint32_t height) = 0;
34829+  virtual void OnTouchPress(int32_t id, double x, double y) = 0;
34830+  virtual void OnTouchRelease(int32_t id, double x, double y) = 0;
34831+  virtual void OnTouchMove(int32_t id, double x, double y) = 0;
34832+  virtual void OnTouchCancel() = 0;
34833+
34834+  virtual void Load(const std::string& url) = 0;
34835+  virtual bool IsNavigatebackwardAllowed() const = 0;
34836+  virtual bool IsNavigateForwardAllowed() const = 0;
34837+  virtual bool CanNavigateBackOrForward(int numSteps) const = 0;
34838+  virtual void NavigateBack() const = 0;
34839+  virtual void NavigateForward() const = 0;
34840+  virtual void Reload() const = 0;
34841+  virtual void Zoom(float zoomFactor) const = 0;
34842+  virtual void Stop() const = 0;
34843+  virtual void ExecuteJavaScript(const std::string& code) const = 0;
34844+  virtual void ExecuteJavaScript(
34845+      const std::string& code,
34846+      std::shared_ptr<NWebValueCallback<std::string>> callback) const = 0;
34847+  virtual void PutBackgroundColor(int color) const = 0;
34848+  virtual void OnPause() = 0;
34849+  virtual void OnContinue() = 0;
34850+  virtual std::shared_ptr<NWebPreference> GetPreference() const = 0;
34851+  virtual std::string Title() = 0;
34852+  virtual HitTestResult GetHitTestResult() const = 0;
34853+  virtual int PageLoadProgress() = 0;
34854+  virtual float Scale() = 0;
34855+  virtual void Load(
34856+      std::string& url,
34857+      std::map<std::string, std::string> additionalHttpHeaders) = 0;
34858+  virtual void LoadWithDataAndBaseUrl(const std::string& baseUrl,
34859+                                      const std::string& data,
34860+                                      const std::string& mimeType,
34861+                                      const std::string& encoding,
34862+                                      const std::string& historyUrl) = 0;
34863+  virtual void LoadWithData(const std::string& data,
34864+                            const std::string& mimeType,
34865+                            const std::string& encoding) = 0;
34866+  virtual int ContentHeight() = 0;
34867+  virtual void RegisterArkJSfunction(
34868+      const std::string& object_name,
34869+      const std::vector<std::string>& method_list) const = 0;
34870+  virtual void UnregisterArkJSfunction(
34871+      const std::string& object_name,
34872+      const std::vector<std::string>& method_list) const = 0;
34873+  virtual void RegisterNWebJavaScriptCallBack(
34874+      std::shared_ptr<NWebJavaScriptResultCallBack> callback) = 0;
34875+};
34876+}  // namespace OHOS::NWeb
34877+
34878+#endif  // nweb_delegate_INTERFACE_H
34879diff --git a/ohos_nweb/src/nweb_hilog.h b/ohos_nweb/src/nweb_hilog.h
34880new file mode 100644
34881index 0000000000..0e9518b413
34882--- /dev/null
34883+++ b/ohos_nweb/src/nweb_hilog.h
34884@@ -0,0 +1,42 @@
34885+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
34886+// Use of this source code is governed by a BSD-style license that can be
34887+// found in the LICENSE file.
34888+
34889+#ifndef NWEB_HILOG_H
34890+#define NWEB_HILOG_H
34891+
34892+#if defined(OHOS_NWEB)
34893+#include "hilog/log.h"
34894+constexpr OHOS::HiviewDFX::HiLogLabel kLogLabel = {LOG_APP, 0, "NWEB"};
34895+
34896+#define FUNC_LINE_FMT " %{public}s<%{public}d>: "
34897+
34898+#define WVLOG_D(fmt, ...)                                                   \
34899+  OHOS::HiviewDFX::HiLog::Debug(kLogLabel, FUNC_LINE_FMT fmt, __FUNCTION__, \
34900+                                __LINE__, ##__VA_ARGS__)
34901+#define WVLOG_I(fmt, ...)                                                  \
34902+  OHOS::HiviewDFX::HiLog::Info(kLogLabel, FUNC_LINE_FMT fmt, __FUNCTION__, \
34903+                               __LINE__, ##__VA_ARGS__)
34904+#define WVLOG_W(fmt, ...)                                                  \
34905+  OHOS::HiviewDFX::HiLog::Warn(kLogLabel, FUNC_LINE_FMT fmt, __FUNCTION__, \
34906+                               __LINE__, ##__VA_ARGS__)
34907+#define WVLOG_E(fmt, ...)                                                   \
34908+  OHOS::HiviewDFX::HiLog::Error(kLogLabel, FUNC_LINE_FMT fmt, __FUNCTION__, \
34909+                                __LINE__, ##__VA_ARGS__)
34910+#define WVLOG_F(fmt, ...)                                                   \
34911+  OHOS::HiviewDFX::HiLog::Fatal(kLogLabel, FUNC_LINE_FMT fmt, __FUNCTION__, \
34912+                                __LINE__, ##__VA_ARGS__)
34913+
34914+#else  // not OHOS_NWEB
34915+
34916+#define WVLOG(fmt, ...)
34917+
34918+#define WVLOG_D(fmt, ...) WVLOG(fmt, ##__VA_ARGS__)
34919+#define WVLOG_I(fmt, ...) WVLOG(fmt, ##__VA_ARGS__)
34920+#define WVLOG_W(fmt, ...) WVLOG(fmt, ##__VA_ARGS__)
34921+#define WVLOG_E(fmt, ...) WVLOG(fmt, ##__VA_ARGS__)
34922+#define WVLOG_F(fmt, ...) WVLOG(fmt, ##__VA_ARGS__)
34923+
34924+#endif  // OHOS_NWEB
34925+
34926+#endif  // NWEB_HILOG_H
34927diff --git a/ohos_nweb/src/nweb_impl.cc b/ohos_nweb/src/nweb_impl.cc
34928new file mode 100755
34929index 0000000000..925a5561ef
34930--- /dev/null
34931+++ b/ohos_nweb/src/nweb_impl.cc
34932@@ -0,0 +1,426 @@
34933+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
34934+// Use of this source code is governed by a BSD-style license that can be
34935+// found in the LICENSE file.
34936+
34937+#include "nweb_impl.h"
34938+
34939+#include <unistd.h>
34940+#include <cerrno>
34941+#include <iostream>
34942+#include <map>
34943+#include <string>
34944+#include <thread>
34945+#include "nweb_delegate_adapter.h"
34946+#include "nweb_export.h"
34947+#include "nweb_handler.h"
34948+#include "nweb_hilog.h"
34949+
34950+namespace {
34951+uint32_t g_nweb_count = 0;
34952+const uint32_t kSurfaceMaxWidth = 7680;
34953+const uint32_t kSurfaceMaxHeight = 7680;
34954+}
34955+
34956+using namespace OHOS::NWeb;
34957+extern "C" OHOS_NWEB_EXPORT NWeb* CreateNWeb(
34958+    const NWebCreateInfo& create_info) {
34959+  static uint32_t current_nweb_id = 0;
34960+  uint32_t nweb_id = ++current_nweb_id;
34961+  WVLOG_I("creating nweb %{public}u, size %{public}u*%{public}u", nweb_id,
34962+          create_info.width, create_info.height);
34963+  auto nweb = new NWebImpl(nweb_id);
34964+  if (nweb == nullptr) {
34965+    WVLOG_E("fail to create nweb instance");
34966+    return nullptr;
34967+  }
34968+
34969+  if (!nweb->Init(create_info)) {
34970+    WVLOG_E("fail to init nweb");
34971+    return nullptr;
34972+  }
34973+
34974+  ++g_nweb_count;
34975+  return nweb;
34976+}
34977+
34978+namespace OHOS::NWeb {
34979+NWebImpl::NWebImpl(uint32_t id) : nweb_id_(id) {}
34980+
34981+bool NWebImpl::Init(const NWebCreateInfo& create_info) {
34982+  output_handler_ = NWebOutputHandler::Create(
34983+      create_info.width, create_info.height, create_info.output_render_frame);
34984+  if (output_handler_ == nullptr) {
34985+    return false;
34986+  }
34987+  output_handler_->SetNWebId(nweb_id_);
34988+
34989+  ProcessInitArgs(create_info.init_args);
34990+
34991+  if (!InitWebEngine()) {
34992+    WVLOG_E("web engine init fail");
34993+    return false;
34994+  }
34995+
34996+  input_handler_ = NWebInputHandler::Create(nweb_delegate_);
34997+  if (input_handler_ == nullptr) {
34998+    return false;
34999+  }
35000+
35001+  return true;
35002+}
35003+
35004+void NWebImpl::OnDestroy() {
35005+  if (g_nweb_count == 0) {
35006+    return;
35007+  }
35008+  bool is_close_all = (--g_nweb_count) == 0 ? true : false;
35009+  if (nweb_delegate_ != nullptr) {
35010+    nweb_delegate_->OnDestroy(is_close_all);
35011+    nweb_delegate_ = nullptr;
35012+  }
35013+  if (input_handler_ != nullptr) {
35014+    input_handler_->OnDestroy();
35015+  }
35016+}
35017+
35018+void NWebImpl::ProcessInitArgs(const NWebInitArgs& init_args) {
35019+  if (!init_args.dump_path.empty() && output_handler_ != nullptr) {
35020+    output_handler_->SetDumpPath(init_args.dump_path);
35021+  }
35022+  if (init_args.frame_info_dump && output_handler_ != nullptr) {
35023+    output_handler_->SetFrameInfoDump(init_args.frame_info_dump);
35024+  }
35025+
35026+  InitWebEngineArgs(init_args);
35027+}
35028+
35029+bool NWebImpl::InitWebEngine() {
35030+  if (web_engine_args_.empty()) {
35031+    WVLOG_E("fail to init web engine args");
35032+    return false;
35033+  }
35034+
35035+  int argc = web_engine_args_.size();
35036+  const char** argv = new const char*[argc];
35037+  int i = 0;
35038+  for (auto it = web_engine_args_.begin(); i < argc; ++i, ++it) {
35039+    argv[i] = it->c_str();
35040+  }
35041+
35042+  nweb_delegate_ = NWebDelegateAdapter::CreateNWebDelegate(argc, argv);
35043+  if (nweb_delegate_ == nullptr) {
35044+    WVLOG_E("fail to create nweb delegate of web engine");
35045+    return false;
35046+  }
35047+
35048+  std::weak_ptr<NWebOutputHandler> output_handler_weak(output_handler_);
35049+  auto render_update_cb = [output_handler_weak](const char* buffer) -> void {
35050+    if (!output_handler_weak.expired()) {
35051+      output_handler_weak.lock()->OnRenderUpdate(buffer);
35052+    }
35053+  };
35054+
35055+  uint32_t width, height;
35056+  output_handler_->GetWindowInfo(width, height);
35057+  nweb_delegate_->Resize(width, height);
35058+  nweb_delegate_->RegisterRenderCb(render_update_cb);
35059+
35060+  inputmethod_handler_ = new NWebInputMethodHandler();
35061+  nweb_delegate_->SetInputMethodClient(inputmethod_handler_);
35062+
35063+  delete[] argv;
35064+  return nweb_delegate_->IsReady();
35065+}
35066+
35067+void NWebImpl::InitWebEngineArgs(const NWebInitArgs& init_args) {
35068+  web_engine_args_.clear();
35069+  web_engine_args_.emplace_back("/system/bin/web_render");
35070+  web_engine_args_.emplace_back("--in-process-gpu");
35071+  web_engine_args_.emplace_back("--disable-dev-shm-usage");
35072+  web_engine_args_.emplace_back("--no-unsandboxed-zygote");
35073+  web_engine_args_.emplace_back("--off-screen-frame-rate=60");
35074+  web_engine_args_.emplace_back("--enable-features=UseOzonePlatform");
35075+  web_engine_args_.emplace_back("-ozone-platform=headless");
35076+  web_engine_args_.emplace_back("--no-sandbox");
35077+  web_engine_args_.emplace_back("--ignore-certificate-errors");
35078+  web_engine_args_.emplace_back("--use-mobile-user-agent");
35079+  web_engine_args_.emplace_back(
35080+      "--browser-subprocess-path=/system/bin/web_render");
35081+  web_engine_args_.emplace_back("--zygote-cmd-prefix=/system/bin/web_render");
35082+
35083+  for (auto arg : init_args.web_engine_args_to_delete) {
35084+    auto it = std::find(web_engine_args_.begin(), web_engine_args_.end(), arg);
35085+    if (it != web_engine_args_.end()) {
35086+      web_engine_args_.erase(it);
35087+    }
35088+  }
35089+  for (auto arg : init_args.web_engine_args_to_add) {
35090+    web_engine_args_.emplace_back(arg);
35091+  }
35092+  if (init_args.multi_renderer_process) {
35093+    web_engine_args_.emplace_back("--enable-multi-renderer-process");
35094+  }
35095+}
35096+
35097+void NWebImpl::PutDownloadCallback(
35098+    std::shared_ptr<NWebDownloadCallback> downloadListener) {
35099+  nweb_delegate_->RegisterDownLoadListener(downloadListener);
35100+}
35101+
35102+void NWebImpl::SetNWebHandler(std::shared_ptr<NWebHandler> client) {
35103+  nweb_handle_ = client;
35104+  nweb_delegate_->RegisterNWebHandler(client);
35105+  client->SetNWeb(shared_from_this());
35106+}
35107+
35108+const std::shared_ptr<NWebHandler> NWebImpl::GetNWebHandler() const {
35109+  return nweb_handle_;
35110+}
35111+
35112+void NWebImpl::Resize(uint32_t width, uint32_t height) {
35113+  if (input_handler_ == nullptr || output_handler_ == nullptr) {
35114+    return;
35115+  }
35116+  if (width > kSurfaceMaxWidth || height > kSurfaceMaxHeight) {
35117+    return;
35118+  }
35119+  nweb_delegate_->Resize(width, height);
35120+  output_handler_->Resize(width, height);
35121+}
35122+
35123+void NWebImpl::OnTouchPress(int32_t id, double x, double y) {
35124+  if (input_handler_ == nullptr) {
35125+    return;
35126+  }
35127+  input_handler_->OnTouchPress(id, x, y);
35128+}
35129+
35130+void NWebImpl::OnTouchRelease(int32_t id, double x, double y) {
35131+  if (input_handler_ == nullptr) {
35132+    return;
35133+  }
35134+  input_handler_->OnTouchRelease(id, x, y);
35135+}
35136+
35137+void NWebImpl::OnTouchMove(int32_t id, double x, double y) {
35138+  if (input_handler_ == nullptr) {
35139+    return;
35140+  }
35141+  input_handler_->OnTouchMove(id, x, y);
35142+}
35143+
35144+void NWebImpl::OnTouchCancel() {
35145+  if (input_handler_ == nullptr) {
35146+    return;
35147+  }
35148+  input_handler_->OnTouchCancel();
35149+}
35150+
35151+void NWebImpl::OnNavigateBack() {
35152+  if (input_handler_ == nullptr) {
35153+    return;
35154+  }
35155+  input_handler_->OnNavigateBack();
35156+}
35157+
35158+void NWebImpl::Load(const std::string& url) const {
35159+  if (nweb_delegate_ == nullptr || output_handler_ == nullptr) {
35160+    return;
35161+  }
35162+
35163+  if (!output_handler_->IsSizeValid()) {
35164+    WVLOG_E("nweb size is invalid, stop Load");
35165+    return;
35166+  }
35167+
35168+  nweb_delegate_->Load(url);
35169+  output_handler_->StartRenderOutput();
35170+}
35171+
35172+bool NWebImpl::IsNavigatebackwardAllowed() const {
35173+  if (nweb_delegate_ == nullptr) {
35174+    return false;
35175+  }
35176+  return nweb_delegate_->IsNavigatebackwardAllowed();
35177+}
35178+
35179+bool NWebImpl::IsNavigateForwardAllowed() const {
35180+  if (nweb_delegate_ == nullptr) {
35181+    return false;
35182+  }
35183+  return nweb_delegate_->IsNavigateForwardAllowed();
35184+}
35185+
35186+bool NWebImpl::CanNavigateBackOrForward(int numSteps) const {
35187+  if (nweb_delegate_ == nullptr) {
35188+    return false;
35189+  }
35190+  return nweb_delegate_->CanNavigateBackOrForward(numSteps);
35191+}
35192+
35193+void NWebImpl::NavigateBack() const {
35194+  if (nweb_delegate_ == nullptr) {
35195+    return;
35196+  }
35197+  nweb_delegate_->NavigateBack();
35198+}
35199+
35200+void NWebImpl::NavigateForward() const {
35201+  if (nweb_delegate_ == nullptr) {
35202+    return;
35203+  }
35204+  nweb_delegate_->NavigateForward();
35205+}
35206+
35207+void NWebImpl::Reload() const {
35208+  if (nweb_delegate_ == nullptr) {
35209+    return;
35210+  }
35211+  nweb_delegate_->Reload();
35212+}
35213+
35214+void NWebImpl::Zoom(float zoomFactor) const {
35215+  if (nweb_delegate_ == nullptr) {
35216+    return;
35217+  }
35218+  nweb_delegate_->Zoom(zoomFactor);
35219+}
35220+
35221+void NWebImpl::Stop() const {
35222+  if (nweb_delegate_ == nullptr) {
35223+    return;
35224+  }
35225+  nweb_delegate_->Stop();
35226+}
35227+
35228+void NWebImpl::ExecuteJavaScript(const std::string& code) const {
35229+  if (nweb_delegate_ == nullptr) {
35230+    return;
35231+  }
35232+  nweb_delegate_->ExecuteJavaScript(code);
35233+}
35234+
35235+void NWebImpl::PutBackgroundColor(int color) const {
35236+  if (nweb_delegate_ == nullptr) {
35237+    return;
35238+  }
35239+  nweb_delegate_->PutBackgroundColor(color);
35240+}
35241+
35242+void NWebImpl::OnPause() const {
35243+  if (nweb_delegate_ == nullptr) {
35244+    return;
35245+  }
35246+  nweb_delegate_->OnPause();
35247+}
35248+
35249+void NWebImpl::OnContinue() const {
35250+  if (nweb_delegate_ == nullptr) {
35251+    return;
35252+  }
35253+  nweb_delegate_->OnContinue();
35254+}
35255+
35256+const std::shared_ptr<NWebPreference> NWebImpl::GetPreference() const {
35257+  if (nweb_delegate_ == nullptr) {
35258+    return nullptr;
35259+  }
35260+  return nweb_delegate_->GetPreference();
35261+}
35262+
35263+std::string NWebImpl::Title() {
35264+  if (nweb_delegate_ == nullptr) {
35265+    return "";
35266+  }
35267+  return nweb_delegate_->Title();
35268+}
35269+
35270+const HitTestResult NWebImpl::GetHitTestResult() const {
35271+  return nweb_delegate_->GetHitTestResult();
35272+}
35273+
35274+int NWebImpl::PageLoadProgress() {
35275+  if (nweb_delegate_ == nullptr) {
35276+    return 0;
35277+  }
35278+  return nweb_delegate_->PageLoadProgress();
35279+}
35280+
35281+int NWebImpl::ContentHeight() {
35282+  if (nweb_delegate_ == nullptr) {
35283+    return 0;
35284+  }
35285+  return nweb_delegate_->ContentHeight();
35286+}
35287+
35288+float NWebImpl::Scale() {
35289+  if (nweb_delegate_ == nullptr) {
35290+    return 0;
35291+  }
35292+  return nweb_delegate_->Scale();
35293+}
35294+
35295+void NWebImpl::Load(std::string& url,
35296+                    std::map<std::string, std::string> additionalHttpHeaders) {
35297+  if (nweb_delegate_ == nullptr) {
35298+    return;
35299+  }
35300+  return nweb_delegate_->Load(url, additionalHttpHeaders);
35301+}
35302+
35303+void NWebImpl::LoadWithDataAndBaseUrl(const std::string& baseUrl,
35304+                                      const std::string& data,
35305+                                      const std::string& mimeType,
35306+                                      const std::string& encoding,
35307+                                      const std::string& historyUrl) {
35308+  if (nweb_delegate_ == nullptr) {
35309+    return;
35310+  }
35311+  return nweb_delegate_->LoadWithDataAndBaseUrl(baseUrl, data, mimeType,
35312+                                                encoding, historyUrl);
35313+}
35314+
35315+void NWebImpl::LoadWithData(const std::string& data,
35316+                            const std::string& mimeType,
35317+                            const std::string& encoding) {
35318+  if (nweb_delegate_ == nullptr) {
35319+    return;
35320+  }
35321+  return nweb_delegate_->LoadWithData(data, mimeType, encoding);
35322+}
35323+
35324+void NWebImpl::RegisterArkJSfunction(
35325+    const std::string& object_name,
35326+    const std::vector<std::string>& method_list) {
35327+  if (nweb_delegate_ == nullptr) {
35328+    return;
35329+  }
35330+  return nweb_delegate_->RegisterArkJSfunction(object_name, method_list);
35331+}
35332+
35333+void NWebImpl::UnregisterArkJSfunction(
35334+    const std::string& object_name,
35335+    const std::vector<std::string>& method_list) {
35336+  if (nweb_delegate_ == nullptr) {
35337+    return;
35338+  }
35339+  return nweb_delegate_->UnregisterArkJSfunction(object_name, method_list);
35340+}
35341+
35342+void NWebImpl::SetNWebJavaScriptResultCallBack(
35343+    std::shared_ptr<NWebJavaScriptResultCallBack> callback) {
35344+  if (nweb_delegate_ == nullptr) {
35345+    return;
35346+  }
35347+  nweb_delegate_->RegisterNWebJavaScriptCallBack(callback);
35348+}
35349+
35350+void NWebImpl::ExecuteJavaScript(
35351+    const std::string& code,
35352+    std::shared_ptr<NWebValueCallback<std::string>> callback) const {
35353+  if (nweb_delegate_ == nullptr) {
35354+    return;
35355+  }
35356+  nweb_delegate_->ExecuteJavaScript(code, callback);
35357+}
35358+}  // namespace OHOS::NWeb
35359diff --git a/ohos_nweb/src/nweb_impl.h b/ohos_nweb/src/nweb_impl.h
35360new file mode 100755
35361index 0000000000..559f8487f2
35362--- /dev/null
35363+++ b/ohos_nweb/src/nweb_impl.h
35364@@ -0,0 +1,99 @@
35365+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
35366+// Use of this source code is governed by a BSD-style license that can be
35367+// found in the LICENSE file.
35368+
35369+#ifndef NWEB_IMPL_H
35370+#define NWEB_IMPL_H
35371+
35372+#include <condition_variable>
35373+#include <list>
35374+#include <memory>
35375+#include <mutex>
35376+#include <vector>
35377+#include "nweb_download_callback.h"
35378+#include "nweb.h"
35379+#include "nweb_input_handler.h"
35380+#include "nweb_inputmethod_handler.h"
35381+#include "nweb_output_handler.h"
35382+
35383+namespace OHOS::NWeb {
35384+class NWebImpl : public NWeb {
35385+ public:
35386+  NWebImpl(uint32_t id);
35387+  ~NWebImpl() = default;
35388+
35389+  bool Init(const NWebCreateInfo& create_info);
35390+  void OnDestroy() override;
35391+
35392+  /* event interface */
35393+  void Resize(uint32_t width, uint32_t height) override;
35394+  void OnTouchPress(int32_t id, double x, double y) override;
35395+  void OnTouchRelease(int32_t id, double x, double y) override;
35396+  void OnTouchMove(int32_t id, double x, double y) override;
35397+  void OnTouchCancel() override;
35398+  void OnNavigateBack() override;
35399+
35400+  // public api
35401+  void Load(const std::string& url) const override;
35402+  bool IsNavigatebackwardAllowed() const override;
35403+  bool IsNavigateForwardAllowed() const override;
35404+  bool CanNavigateBackOrForward(int numSteps) const override;
35405+  void NavigateBack() const override;
35406+  void NavigateForward() const override;
35407+  void Reload() const override;
35408+  void Zoom(float zoomFactor) const override;
35409+  void Stop() const override;
35410+  void ExecuteJavaScript(const std::string& code) const override;
35411+  void ExecuteJavaScript(
35412+      const std::string& code,
35413+      std::shared_ptr<NWebValueCallback<std::string>> callback) const override;
35414+  void PutBackgroundColor(int color) const override;
35415+  void OnPause() const override;
35416+  void OnContinue() const override;
35417+  const std::shared_ptr<NWebPreference> GetPreference() const override;
35418+  void PutDownloadCallback(
35419+      std::shared_ptr<NWebDownloadCallback> downloadListener) override;
35420+  void SetNWebHandler(std::shared_ptr<NWebHandler> handler) override;
35421+  const std::shared_ptr<NWebHandler> GetNWebHandler() const override;
35422+  std::string Title() override;
35423+  const HitTestResult GetHitTestResult() const override;
35424+  int PageLoadProgress() override;
35425+  int ContentHeight() override;
35426+  float Scale() override;
35427+  void Load(std::string& url,
35428+            std::map<std::string, std::string> additionalHttpHeaders) override;
35429+  void LoadWithDataAndBaseUrl(const std::string& baseUrl,
35430+                              const std::string& data,
35431+                              const std::string& mimeType,
35432+                              const std::string& encoding,
35433+                              const std::string& historyUrl) override;
35434+  void LoadWithData(const std::string& data,
35435+                    const std::string& mimeType,
35436+                    const std::string& encoding) override;
35437+  void RegisterArkJSfunction(
35438+      const std::string& object_name,
35439+      const std::vector<std::string>& method_list) override;
35440+  void UnregisterArkJSfunction(
35441+      const std::string& object_name,
35442+      const std::vector<std::string>& method_list) override;
35443+  void SetNWebJavaScriptResultCallBack(
35444+      std::shared_ptr<NWebJavaScriptResultCallBack> callback) override;
35445+
35446+ private:
35447+  void ProcessInitArgs(const NWebInitArgs& init_args);
35448+  void InitWebEngineArgs(const NWebInitArgs& init_args);
35449+  bool InitWebEngine();
35450+
35451+ private:
35452+  uint32_t nweb_id_ = 0;
35453+  std::shared_ptr<NWebHandler> nweb_handle_ = nullptr;
35454+  std::shared_ptr<NWebOutputHandler> output_handler_ = nullptr;
35455+  std::shared_ptr<NWebInputHandler> input_handler_ = nullptr;
35456+  CefRefPtr<NWebInputMethodHandler> inputmethod_handler_ = nullptr;
35457+
35458+  std::shared_ptr<NWebDelegateInterface> nweb_delegate_ = nullptr;
35459+  std::list<std::string> web_engine_args_;
35460+};
35461+}  // namespace OHOS::NWeb
35462+
35463+#endif  // NWEB_IMPL_H
35464diff --git a/ohos_nweb/src/nweb_input_handler.cc b/ohos_nweb/src/nweb_input_handler.cc
35465new file mode 100644
35466index 0000000000..710cbc5df4
35467--- /dev/null
35468+++ b/ohos_nweb/src/nweb_input_handler.cc
35469@@ -0,0 +1,119 @@
35470+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
35471+// Use of this source code is governed by a BSD-style license that can be
35472+// found in the LICENSE file.
35473+
35474+#include "nweb_input_handler.h"
35475+#include "nweb_hilog.h"
35476+
35477+namespace OHOS::NWeb {
35478+// static
35479+std::shared_ptr<NWebInputHandler> NWebInputHandler::Create(
35480+    std::shared_ptr<NWebDelegateInterface> nweb_delegate) {
35481+  auto input_handler = std::make_shared<NWebInputHandler>(nweb_delegate);
35482+  if (input_handler == nullptr) {
35483+    WVLOG_E("fail to create NWebOutputHandler instance");
35484+    return nullptr;
35485+  }
35486+  input_handler->Init();
35487+  return input_handler;
35488+}
35489+
35490+NWebInputHandler::NWebInputHandler(
35491+    std::shared_ptr<NWebDelegateInterface> nweb_delegate)
35492+    : nweb_delegate_(nweb_delegate) {}
35493+
35494+bool NWebInputHandler::Init() {
35495+  return true;
35496+}
35497+
35498+void NWebInputHandler::OnDestroy() {
35499+  nweb_delegate_ = nullptr;
35500+}
35501+
35502+void NWebInputHandler::OnTouchPress(int32_t id, double x, double y) {
35503+  if (nweb_delegate_ == nullptr) {
35504+    return;
35505+  }
35506+  nweb_delegate_->OnTouchPress(id, x, y);
35507+
35508+  touch_press_id_map_[id] = true;
35509+  last_touch_start_x_ = x;
35510+  last_x_ = x;
35511+  last_y_ = y;
35512+}
35513+
35514+void NWebInputHandler::OnTouchRelease(int32_t id, double x, double y) {
35515+  if (nweb_delegate_ == nullptr) {
35516+    return;
35517+  }
35518+  if (x == 0 && y == 0) {
35519+    x = last_x_;
35520+    y = last_y_;
35521+  }
35522+  nweb_delegate_->OnTouchRelease(id, x, y);
35523+  CheckSlideNavigation(last_touch_start_x_, x);
35524+  touch_press_id_map_.erase(id);
35525+}
35526+
35527+void NWebInputHandler::OnTouchMove(int32_t id, double x, double y) {
35528+  if (nweb_delegate_ == nullptr) {
35529+    return;
35530+  }
35531+
35532+  // For multi-finger touch-move event get from ArkUI, some fingers may start
35533+  // move without previous touch-press event, which may cause these fingers
35534+  // unrecognized by web_engine, and multi-finger gestures like pinch unsupport.
35535+  // For this reason, the first touch-move event would be treated as touch-press
35536+  // event.
35537+  if (touch_press_id_map_.find(id) == touch_press_id_map_.end() ||
35538+      !touch_press_id_map_.at(id)) {
35539+    this->OnTouchPress(id, x, y);
35540+  }
35541+
35542+  nweb_delegate_->OnTouchMove(id, x, y);
35543+  last_x_ = x;
35544+  last_y_ = y;
35545+}
35546+
35547+void NWebInputHandler::OnTouchCancel() {
35548+  if (nweb_delegate_ == nullptr) {
35549+    return;
35550+  }
35551+  nweb_delegate_->OnTouchCancel();
35552+}
35553+
35554+void NWebInputHandler::OnNavigateBack() {
35555+  if (nweb_delegate_ == nullptr) {
35556+    return;
35557+  }
35558+  WVLOG_I("receive key navigate back");
35559+  if (nweb_delegate_->IsNavigatebackwardAllowed()) {
35560+    WVLOG_I("do navigate back");
35561+    nweb_delegate_->NavigateBack();
35562+  }
35563+}
35564+
35565+void NWebInputHandler::CheckSlideNavigation(int16_t start_x, int16_t end_x) {
35566+  if (nweb_delegate_ == nullptr) {
35567+    return;
35568+  }
35569+
35570+  constexpr int16_t kTriggerDistance = 100;
35571+  constexpr int16_t kScreenWidth = 2560;
35572+  constexpr int16_t kEdgeWidth = 10;
35573+  if (start_x < kEdgeWidth && (end_x - start_x) > kTriggerDistance) {
35574+    WVLOG_I("receive slide navigate back");
35575+    if (nweb_delegate_->IsNavigatebackwardAllowed()) {
35576+      WVLOG_I("do navigate back");
35577+      nweb_delegate_->NavigateBack();
35578+    }
35579+  } else if (start_x > (kScreenWidth - kEdgeWidth) &&
35580+             (start_x - end_x) > kTriggerDistance) {
35581+    WVLOG_I("receive slide navigate forward");
35582+    if (nweb_delegate_->IsNavigateForwardAllowed()) {
35583+      WVLOG_I("do navigate forward");
35584+      nweb_delegate_->NavigateForward();
35585+    }
35586+  }
35587+}
35588+}  // namespace OHOS::NWeb
35589diff --git a/ohos_nweb/src/nweb_input_handler.h b/ohos_nweb/src/nweb_input_handler.h
35590new file mode 100644
35591index 0000000000..ee88ec0055
35592--- /dev/null
35593+++ b/ohos_nweb/src/nweb_input_handler.h
35594@@ -0,0 +1,44 @@
35595+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
35596+// Use of this source code is governed by a BSD-style license that can be
35597+// found in the LICENSE file.
35598+
35599+#ifndef NWEB_INPUT_HANDLER_H
35600+#define NWEB_INPUT_HANDLER_H
35601+
35602+#include <memory>
35603+#include <unordered_map>
35604+#include "nweb_delegate_interface.h"
35605+
35606+namespace OHOS::NWeb {
35607+class NWebInputHandler {
35608+ public:
35609+  static std::shared_ptr<NWebInputHandler> Create(
35610+      std::shared_ptr<NWebDelegateInterface> nweb_delegate);
35611+
35612+  NWebInputHandler(
35613+      std::shared_ptr<NWebDelegateInterface> nweb_delegate);
35614+  ~NWebInputHandler() = default;
35615+
35616+  bool Init();
35617+  void OnDestroy();
35618+
35619+  /* event interface */
35620+  void OnTouchPress(int32_t id, double x, double y);
35621+  void OnTouchRelease(int32_t id, double x, double y);
35622+  void OnTouchMove(int32_t id, double x, double y);
35623+  void OnTouchCancel();
35624+  void OnNavigateBack();
35625+
35626+ private:
35627+  void CheckSlideNavigation(int16_t start_x, int16_t end_x);
35628+
35629+ private:
35630+  std::shared_ptr<NWebDelegateInterface> nweb_delegate_;
35631+  int32_t last_touch_start_x_ = -1;
35632+  double last_x_ = -1;
35633+  double last_y_ = -1;
35634+  std::unordered_map<uint32_t, bool> touch_press_id_map_;
35635+};
35636+}
35637+
35638+#endif  // NWEB_INPUT_HANDLER_H
35639diff --git a/ohos_nweb/src/nweb_inputmethod_handler.cc b/ohos_nweb/src/nweb_inputmethod_handler.cc
35640new file mode 100644
35641index 0000000000..0456edc290
35642--- /dev/null
35643+++ b/ohos_nweb/src/nweb_inputmethod_handler.cc
35644@@ -0,0 +1,214 @@
35645+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
35646+// Use of this source code is governed by a BSD-style license that can be
35647+// found in the LICENSE file.
35648+
35649+#include "nweb_inputmethod_handler.h"
35650+
35651+#include <input_method_controller.h>
35652+#include <input_method_utils.h>
35653+
35654+#include "base/bind.h"
35655+#include "base/callback.h"
35656+#include "base/callback_helpers.h"
35657+#include "base/logging.h"
35658+#include "cef/include/cef_task.h"
35659+#include "content/public/browser/browser_thread.h"
35660+#include "libcef/browser/thread_util.h"
35661+
35662+namespace OHOS::NWeb {
35663+class OnTextChangedListenerImpl
35664+    : public OHOS::MiscServices::OnTextChangedListener {
35665+ public:
35666+  OnTextChangedListenerImpl(NWebInputMethodHandler* handler)
35667+      : handler_(handler) {}
35668+
35669+  // All following listenser callbacks should invoke call on UI thread
35670+  void InsertText(const std::u16string& text) override {
35671+    handler_->InsertText(text);
35672+  }
35673+
35674+  void DeleteForward(int32_t length) override {
35675+    handler_->DeleteForward(length);
35676+  }
35677+
35678+  void DeleteBackward(int32_t length) override {
35679+    handler_->DeleteBackward(length);
35680+  }
35681+
35682+  void SendKeyEventFromInputMethod(
35683+      const OHOS::MiscServices::KeyEvent& event) override {
35684+    LOG(INFO) << "NWebInputMethodHandler::DeleteBackward";
35685+  }
35686+
35687+  void SendKeyboardInfo(const OHOS::MiscServices::KeyboardInfo& info) override {
35688+
35689+  }
35690+
35691+  void SetKeyboardStatus(bool status) override {
35692+    handler_->SetIMEStatus(status);
35693+  }
35694+
35695+  void MoveCursor(const OHOS::MiscServices::Direction direction) override {
35696+    LOG(INFO) << "NWebInputMethodHandler::MoveCursor ";
35697+  }
35698+
35699+ private:
35700+  NWebInputMethodHandler* handler_;
35701+};
35702+
35703+// The object should be freed while keyboard hidden.
35704+OHOS::sptr<OHOS::MiscServices::OnTextChangedListener> g_listener = nullptr;
35705+
35706+class InputMethodTask : public CefTask {
35707+ public:
35708+  explicit InputMethodTask(const base::Closure& closure) : closure_(closure) {}
35709+
35710+  virtual void Execute() OVERRIDE {
35711+    closure_.Run();
35712+    closure_.Reset();
35713+  }
35714+
35715+ private:
35716+  base::Closure closure_;
35717+
35718+  IMPLEMENT_REFCOUNTING(InputMethodTask);
35719+  DISALLOW_COPY_AND_ASSIGN(InputMethodTask);
35720+};
35721+
35722+NWebInputMethodHandler::NWebInputMethodHandler()
35723+    : selected_from_(0), selected_to_(0) {}
35724+
35725+NWebInputMethodHandler::~NWebInputMethodHandler() {}
35726+
35727+void NWebInputMethodHandler::Attach(CefRefPtr<CefBrowser> browser) {
35728+  browser_ = browser;
35729+  if (ime_shown_) {
35730+    return;
35731+  }
35732+
35733+  if (g_listener == nullptr) {
35734+    g_listener = new OnTextChangedListenerImpl(this);
35735+  }
35736+  OHOS::MiscServices::InputMethodController::GetInstance()->Attach(g_listener);
35737+}
35738+
35739+void NWebInputMethodHandler::ShowTextInput() {
35740+  LOG(INFO) << "NWebInputMethodHandler::ShowTextInput";
35741+}
35742+
35743+void NWebInputMethodHandler::HideTextInput() {
35744+  LOG(INFO) << "NWebInputMethodHandler::HideTextInput " << ime_shown_;
35745+  OHOS::MiscServices::InputMethodController::GetInstance()->HideTextInput();
35746+}
35747+
35748+void NWebInputMethodHandler::OnTextSelectionChanged(
35749+    CefRefPtr<CefBrowser> browser,
35750+    const CefString& selected_text,
35751+    const CefRange& selected_range) {
35752+  selected_text_ = selected_text.ToString16();
35753+  selected_from_ = selected_range.from;
35754+  selected_to_ = selected_range.to;
35755+  ime_text_composing_ = false;
35756+  composing_text_.clear();
35757+}
35758+
35759+void NWebInputMethodHandler::SetIMEStatus(bool status) {
35760+  if (browser_ != nullptr && browser_->GetHost() != nullptr) {
35761+    CefRefPtr<CefTask> insert_task = new InputMethodTask(base::Bind(
35762+        &NWebInputMethodHandler::SetIMEStatusOnUI, this, std::move(status)));
35763+    browser_->GetHost()->PostTaskToUIThread(insert_task);
35764+  }
35765+}
35766+
35767+void NWebInputMethodHandler::InsertText(const std::u16string& text) {
35768+  if (browser_ != nullptr && browser_->GetHost() != nullptr) {
35769+    CefRefPtr<CefTask> insert_task = new InputMethodTask(base::Bind(
35770+        &NWebInputMethodHandler::InsertTextHandlerOnUI, this, std::move(text)));
35771+    browser_->GetHost()->PostTaskToUIThread(insert_task);
35772+  }
35773+}
35774+
35775+void NWebInputMethodHandler::DeleteBackward(int32_t length) {
35776+  if (browser_ != nullptr && browser_->GetHost() != nullptr) {
35777+    CefRefPtr<CefTask> delete_task = new InputMethodTask(base::Bind(
35778+        &NWebInputMethodHandler::DeleteBackwardHandlerOnUI, this, length));
35779+    browser_->GetHost()->PostTaskToUIThread(delete_task);
35780+  }
35781+}
35782+
35783+void NWebInputMethodHandler::DeleteForward(int32_t length) {
35784+  if (browser_ != nullptr && browser_->GetHost() != nullptr) {
35785+    CefRefPtr<CefTask> delete_task = new InputMethodTask(base::Bind(
35786+        &NWebInputMethodHandler::DeleteForwardHandlerOnUI, this, length));
35787+    browser_->GetHost()->PostTaskToUIThread(delete_task);
35788+  }
35789+}
35790+
35791+void NWebInputMethodHandler::SetIMEStatusOnUI(bool status) {
35792+  if (!status && ime_text_composing_) {
35793+    browser_->GetHost()->ImeFinishComposingText(false);
35794+    ime_text_composing_ = false;
35795+  }
35796+  ime_shown_ = status;
35797+}
35798+
35799+void NWebInputMethodHandler::InsertTextHandlerOnUI(const std::u16string& text) {
35800+  if (text.empty()) {
35801+    LOG(ERROR) << "insert text empty!";
35802+    return;
35803+  }
35804+
35805+  if (!ime_text_composing_) {
35806+    ime_text_composing_ = true;
35807+    composing_text_.clear();
35808+  }
35809+  composing_text_.append(text);
35810+
35811+  std::vector<CefCompositionUnderline> underlines;
35812+  CefRange new_range(0, static_cast<int>(composing_text_.length()));
35813+  cef_composition_underline_t line = {new_range, 0xFF000000, 0, false};
35814+  underlines.push_back(line);
35815+  CefRange replacement_range(selected_from_, selected_to_);
35816+  CefRange selection_range(0, static_cast<int>(composing_text_.length()));
35817+  browser_->GetHost()->ImeSetComposition(CefString(composing_text_), underlines,
35818+                                         replacement_range, selection_range);
35819+}
35820+
35821+void NWebInputMethodHandler::DeleteBackwardHandlerOnUI(int32_t length) {
35822+  LOG(INFO) << "DeleteBackwardHandlerOnUI unimplement" << length;
35823+}
35824+
35825+void NWebInputMethodHandler::DeleteForwardHandlerOnUI(int32_t length) {
35826+  std::vector<CefCompositionUnderline> underlines;
35827+  if (ime_text_composing_) {
35828+    int text_length = static_cast<int>(composing_text_.length());
35829+    int new_to = (text_length > length) ? (text_length - length) : 0;
35830+    if (new_to == 0) {
35831+      browser_->GetHost()->ImeFinishComposingText(false);
35832+      ime_text_composing_ = false;
35833+    } else {
35834+      composing_text_ = composing_text_.substr(0, new_to);
35835+      CefRange new_range(0, new_to);
35836+      cef_composition_underline_t line = {new_range, 0xFF000000, 0, false};
35837+      underlines.push_back(line);
35838+      CefRange replacement_range(selected_from_, selected_to_);
35839+      CefRange selection_range(0, new_to);
35840+      browser_->GetHost()->ImeSetComposition(
35841+          composing_text_, underlines, replacement_range, selection_range);
35842+    }
35843+  }
35844+
35845+  if (!ime_text_composing_) {
35846+    CefRange replace_range;
35847+    if (selected_from_ == selected_to_) {
35848+      replace_range.from =
35849+          (selected_from_ > length) ? (selected_from_ - length) : 0;
35850+    } else {
35851+      replace_range.from = selected_from_;
35852+    }
35853+    replace_range.to = selected_to_;
35854+    CefString result = CefString("");
35855+    browser_->GetHost()->ImeCommitText(result, replace_range, 0);
35856+  }
35857+}
35858+}  // namespace OHOS::NWeb
35859\ No newline at end of file
35860diff --git a/ohos_nweb/src/nweb_inputmethod_handler.h b/ohos_nweb/src/nweb_inputmethod_handler.h
35861new file mode 100644
35862index 0000000000..7fc624e2b3
35863--- /dev/null
35864+++ b/ohos_nweb/src/nweb_inputmethod_handler.h
35865@@ -0,0 +1,46 @@
35866+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
35867+// Use of this source code is governed by a BSD-style license that can be
35868+// found in the LICENSE file.
35869+
35870+#ifndef OHOS_NWEB_SRC_NWEB_INPUTMETHOD_HANDLER_H_
35871+#define OHOS_NWEB_SRC_NWEB_INPUTMETHOD_HANDLER_H_
35872+
35873+#include "cef_delegate/nweb_inputmethod_client.h"
35874+
35875+namespace OHOS::NWeb {
35876+class NWebInputMethodHandler : public NWebInputMethodClient {
35877+ public:
35878+  NWebInputMethodHandler();
35879+  ~NWebInputMethodHandler();
35880+  void Attach(CefRefPtr<CefBrowser> browser) override;
35881+  void ShowTextInput() override;
35882+  void HideTextInput() override;
35883+  void OnTextSelectionChanged(CefRefPtr<CefBrowser> browser,
35884+                              const CefString& selected_text,
35885+                              const CefRange& selected_range) override;
35886+
35887+  void SetIMEStatus(bool status);
35888+  void InsertText(const std::u16string& text);
35889+  void DeleteBackward(int32_t length);
35890+  void DeleteForward(int32_t length);
35891+
35892+ private:
35893+  void SetIMEStatusOnUI(bool status);
35894+  void InsertTextHandlerOnUI(const std::u16string& text);
35895+  void DeleteBackwardHandlerOnUI(int32_t length);
35896+  void DeleteForwardHandlerOnUI(int32_t length);
35897+
35898+  CefRefPtr<CefBrowser> browser_;
35899+  bool ime_shown_ = false;
35900+  bool ime_text_composing_ = false;
35901+  std::u16string selected_text_;
35902+  std::u16string composing_text_;
35903+  int selected_from_;
35904+  int selected_to_;
35905+
35906+  IMPLEMENT_REFCOUNTING(NWebInputMethodHandler);
35907+  DISALLOW_COPY_AND_ASSIGN(NWebInputMethodHandler);
35908+};
35909+} // namespace OHOS::NWeb
35910+
35911+#endif  // OHOS_NWEB_SRC_NWEB_INPUTMETHOD_HANDLER_H_
35912\ No newline at end of file
35913diff --git a/ohos_nweb/src/nweb_output_handler.cc b/ohos_nweb/src/nweb_output_handler.cc
35914new file mode 100644
35915index 0000000000..07ddbc0c87
35916--- /dev/null
35917+++ b/ohos_nweb/src/nweb_output_handler.cc
35918@@ -0,0 +1,296 @@
35919+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
35920+// Use of this source code is governed by a BSD-style license that can be
35921+// found in the LICENSE file.
35922+
35923+#include "nweb_output_handler.h"
35924+
35925+#include <sys/time.h>
35926+#include <unistd.h>
35927+#include <cerrno>
35928+#include <cstdio>
35929+#include <cstring>
35930+#include <iomanip>
35931+#include <iostream>
35932+#include <thread>
35933+#include "nweb_hilog.h"
35934+
35935+namespace OHOS::NWeb {
35936+namespace {
35937+#pragma pack(1)
35938+struct BmpFileHeader {
35939+  unsigned int bf_size;             /* Size of file */
35940+  unsigned short bf_reserved_1 = 0; /* Reserved */
35941+  unsigned short bf_reserved_2 = 0; /* ... */
35942+  unsigned int bf_offbits = 0x36;   /* Offset to bitmap data */
35943+};
35944+
35945+/**** BMP file info structure ****/
35946+struct BmpInfoHeader {
35947+  unsigned int bi_size;                 /* Size of info header */
35948+  int bi_width;                         /* Width of image */
35949+  int bi_height;                        /* Height of image */
35950+  unsigned short bi_planes = 1;         /* Number of color planes */
35951+  unsigned short bi_bit_count = 24;     /* Number of bits per pixel */
35952+  unsigned int bi_compression = 0;      /* Type of compression to use */
35953+  unsigned int bi_size_image = 0;       /* Size of image data */
35954+  int bi_x_pixels_per_meter = 5000;     /* X pixels per meter */
35955+  int bi_y_pixels_per_meter = 5000;     /* Y pixels per meter */
35956+  unsigned int bi_colors_used = 0;      /* Number of colors used */
35957+  unsigned int bi_colors_important = 0; /* Number of important colors */
35958+};
35959+
35960+constexpr uint8_t kBitsPerPixel = 4;
35961+
35962+static int64_t GetNowTime() {
35963+  struct timeval start = {};
35964+  gettimeofday(&start, nullptr);
35965+  constexpr uint32_t kSecToUsec = 1000 * 1000;
35966+  return static_cast<int64_t>(start.tv_sec) * kSecToUsec + start.tv_usec;
35967+}
35968+}  // namespace
35969+
35970+// static
35971+std::shared_ptr<NWebOutputHandler> NWebOutputHandler::Create(
35972+    uint32_t width,
35973+    uint32_t height,
35974+    std::function<bool(const char*, uint32_t, uint32_t)> output_frame_cb) {
35975+  if (output_frame_cb == nullptr) {
35976+    WVLOG_E("NWeb user must provide valid outputFrame callback!");
35977+    return nullptr;
35978+  }
35979+
35980+  auto output_handler = std::make_shared<NWebOutputHandler>(output_frame_cb);
35981+  if (output_handler == nullptr) {
35982+    WVLOG_E("fail to create NWebOutputHandler instance");
35983+    return nullptr;
35984+  }
35985+
35986+  output_handler->Init(width, height);
35987+
35988+  return output_handler;
35989+}
35990+
35991+NWebOutputHandler::NWebOutputHandler(
35992+    std::function<bool(const char*, uint32_t, uint32_t)> output_frame_cb)
35993+    : output_frame_cb_(output_frame_cb) {
35994+  dump_buf_.reset(nullptr);
35995+}
35996+
35997+void NWebOutputHandler::Init(uint32_t width, uint32_t height) {
35998+  Resize(width, height);
35999+}
36000+
36001+void NWebOutputHandler::GetWindowInfo(uint32_t& width, uint32_t& height) {
36002+  width = width_;
36003+  height = height_;
36004+}
36005+
36006+void NWebOutputHandler::Resize(uint32_t width, uint32_t height) {
36007+  if (width_ != width || height_ != height) {
36008+    WVLOG_I(
36009+        "NWeb size change from %{public}u*%{public}u to "
36010+        "%{public}u*%{public}u",
36011+        width_, height_, width, height);
36012+    width_ = width;
36013+    height_ = height;
36014+    frame_size_ = width_ * height_ * kBitsPerPixel;
36015+    if (!dump_path_.empty() || dump_buf_ == nullptr) {
36016+      dump_buf_.reset(new char[frame_size_]);
36017+    }
36018+  }
36019+}
36020+
36021+void NWebOutputHandler::StartDumpToFile() {
36022+  std::weak_ptr<NWebOutputHandler> output_handler_weak(shared_from_this());
36023+  std::thread dump_thread([output_handler_weak]() {
36024+    while (!output_handler_weak.expired() &&
36025+           !output_handler_weak.lock()->dump_path_.empty()) {
36026+      auto outputHandler = output_handler_weak.lock();
36027+      std::unique_lock<std::mutex> lk(outputHandler->dump_mtx_);
36028+      outputHandler->dump_cv_.wait(lk);
36029+      static BmpDumpHelper helper;
36030+      const std::string kFileName = "1.bmp";
36031+      std::string full_name = outputHandler->dump_path_ + kFileName;
36032+      if (outputHandler->dump_buf_ == nullptr) {
36033+        continue;
36034+      }
36035+      helper.DumpToBmp(full_name, outputHandler->dump_buf_.get(),
36036+                       outputHandler->width_, outputHandler->height_);
36037+    }
36038+  });
36039+  dump_thread.detach();
36040+}
36041+
36042+void NWebOutputHandler::StartFrameStat() {
36043+  std::weak_ptr<NWebOutputHandler> output_handler_weak(shared_from_this());
36044+  std::thread frame_stat_thread([output_handler_weak]() {
36045+    while (!output_handler_weak.expired() &&
36046+           output_handler_weak.lock()->frame_info_dump_) {
36047+      {
36048+        auto output_handler = output_handler_weak.lock();
36049+        std::unique_lock<std::mutex> lk(output_handler->frame_stat_mtx_);
36050+        if (output_handler->local_time_base_ !=
36051+            output_handler->local_time_curr_) {
36052+          auto fps_cur = 1000.0 * 1000 *
36053+                         (output_handler->local_render_count_ - 1) /
36054+                         (output_handler->local_time_curr_ -
36055+                          output_handler->local_time_base_);
36056+          WVLOG_W(
36057+              "NWeb %{public}u fps_cur=%{public}0.1f "
36058+              "frame_total_count=%{public}lld"
36059+              " frame_miss_count=%{public}lld",
36060+              output_handler->nweb_id_, fps_cur,
36061+              output_handler->render_count_, output_handler->frame_miss_count_);
36062+          std::cout << "NWeb " << output_handler->nweb_id_
36063+                    << " fps_cur=" << std::fixed << std::setprecision(1)
36064+                    << fps_cur
36065+                    << " frame_total_count=" << output_handler->render_count_
36066+                    << " frame_miss_count=" << output_handler->frame_miss_count_
36067+                    << std::endl;
36068+        }
36069+        output_handler->local_render_count_ = 0;
36070+        output_handler->local_time_base_ = 0;
36071+        output_handler->local_time_curr_ = 0;
36072+      }
36073+      // during sleep(), output_handler_weak should not be
36074+      // promote to shared_ptr, to avoid add refcount
36075+      constexpr int kOutoutFrameStatDur = 1;
36076+      sleep(kOutoutFrameStatDur);
36077+    }
36078+  });
36079+  frame_stat_thread.detach();
36080+}
36081+
36082+void NWebOutputHandler::StartRenderOutput() {
36083+  if (!dump_path_.empty()) {
36084+    StartDumpToFile();
36085+  }
36086+  if (frame_info_dump_) {
36087+    StartFrameStat();
36088+  }
36089+}
36090+
36091+void NWebOutputHandler::OnRenderUpdate(const char* buffer) {
36092+  if (output_frame_cb_ == nullptr) {
36093+    WVLOG_I("output render frame cb is not available");
36094+    UpdateStat(false);
36095+    return;
36096+  }
36097+
36098+  if (!output_frame_cb_(buffer, width_, height_)) {
36099+    WVLOG_W("render frame is not consumed");
36100+    UpdateStat(false);
36101+  } else {
36102+    UpdateStat(true);
36103+  }
36104+
36105+  if (!dump_path_.empty()) {
36106+    if (dump_buf_ != nullptr) {
36107+      std::unique_lock<std::mutex> lk(dump_mtx_);
36108+      memcpy(dump_buf_.get(), buffer, frame_size_);
36109+      dump_cv_.notify_one();
36110+    } else {
36111+      WVLOG_E("fail to dump file. dump buffer is nullptr");
36112+    }
36113+  }
36114+}
36115+
36116+void NWebOutputHandler::UpdateStat(bool flag) {
36117+  if (!frame_info_dump_) {
36118+    return;
36119+  }
36120+  std::unique_lock<std::mutex> lk(frame_stat_mtx_);
36121+  local_time_curr_ = GetNowTime();
36122+  if (local_time_base_ <= 0L) {
36123+    local_time_base_ = local_time_curr_;
36124+  }
36125+  render_count_++;
36126+  local_render_count_++;
36127+  if (!flag) {
36128+    frame_miss_count_++;
36129+  }
36130+}
36131+
36132+void NWebOutputHandler::SetFrameInfoDump(bool flag) {
36133+  frame_info_dump_ = flag;
36134+}
36135+
36136+void NWebOutputHandler::SetDumpPath(const std::string& path) {
36137+  dump_path_ = path;
36138+}
36139+
36140+void NWebOutputHandler::BmpDumpHelper::DumpToBmp(const std::string& filename,
36141+                                                    char* buf,
36142+                                                    int width,
36143+                                                    int height) {
36144+  RgbaToRgb(buf, width, height);
36145+  WriteToBmp(filename, buf, width, height);
36146+  WVLOG_I("save render frame to %{public}s", filename.c_str());
36147+}
36148+
36149+void NWebOutputHandler::BmpDumpHelper::RgbaToRgb(char* buf,
36150+                                                    int width,
36151+                                                    int height) {
36152+  char* p_rgba = buf;
36153+  char* p_rgb = buf;
36154+  uint64_t len = width * height * kBitsPerPixel;
36155+  for (uint64_t i = 0; i < len; i++, p_rgba++) {
36156+    if (i % 4 == 3) {
36157+      // check alpha value, if 0, set related color to white
36158+      if (buf[i] == 0) {
36159+        *(p_rgb - 3) = 255;
36160+        *(p_rgb - 2) = 255;
36161+        *(p_rgb - 1) = 255;
36162+      }
36163+      continue;
36164+    }
36165+    *p_rgb++ = *p_rgba;
36166+    if (i % 4 == 2) {
36167+      char tmp = *(p_rgb - 1);
36168+      *(p_rgb - 1) = *(p_rgb - 3);
36169+      *(p_rgb - 3) = tmp;
36170+    }
36171+  }
36172+}
36173+
36174+void NWebOutputHandler::BmpDumpHelper::WriteToBmp(
36175+    const std::string& filename,
36176+    char* buf,
36177+    int width,
36178+    int height) {
36179+  BmpFileHeader bmp_file_header;
36180+  BmpInfoHeader bmp_info_header;
36181+  // Magic number for file. It does not fit in the header structure
36182+  // due to alignment requirements, so put it outside
36183+  unsigned short bmp_file_type = 0x4d42;
36184+  constexpr int kRgbBitsPerPixel = 3;
36185+  int rgb_buf_size = width * height * kRgbBitsPerPixel;
36186+  bmp_file_header.bf_size =
36187+      sizeof(BmpFileHeader) + sizeof(BmpInfoHeader) + rgb_buf_size;
36188+  bmp_info_header.bi_size = sizeof(BmpInfoHeader);
36189+  bmp_info_header.bi_width = width;
36190+  bmp_info_header.bi_height = -height;
36191+
36192+  FILE* file = fopen(filename.c_str(), "wb");
36193+  if (!file) {
36194+    WVLOG_E("FAIL to open %{public}s", filename.c_str());
36195+    return;
36196+  }
36197+
36198+  // Write headers
36199+  fwrite(&bmp_file_type, sizeof(bmp_file_type), 1, file);
36200+  fwrite(&bmp_file_header, sizeof(bmp_file_header), 1, file);
36201+  fwrite(&bmp_info_header, sizeof(bmp_info_header), 1, file);
36202+  fwrite(buf, rgb_buf_size, 1, file);
36203+  fclose(file);
36204+}
36205+
36206+void NWebOutputHandler::SetNWebId(uint32_t id) {
36207+  nweb_id_ = id;
36208+}
36209+
36210+bool NWebOutputHandler::IsSizeValid()
36211+{
36212+  return (width_ > 0) && (height_ > 0);
36213+}
36214+}  // namespace OHOS::NWeb
36215\ No newline at end of file
36216diff --git a/ohos_nweb/src/nweb_output_handler.h b/ohos_nweb/src/nweb_output_handler.h
36217new file mode 100644
36218index 0000000000..0954f3f7a5
36219--- /dev/null
36220+++ b/ohos_nweb/src/nweb_output_handler.h
36221@@ -0,0 +1,81 @@
36222+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
36223+// Use of this source code is governed by a BSD-style license that can be
36224+// found in the LICENSE file.
36225+
36226+#ifndef NWEB_OUTPUT_HANDLER_H
36227+#define NWEB_OUTPUT_HANDLER_H
36228+
36229+#include <condition_variable>
36230+#include <functional>
36231+#include <memory>
36232+#include <mutex>
36233+
36234+namespace OHOS::NWeb {
36235+class NWebOutputHandler
36236+    : public std::enable_shared_from_this<NWebOutputHandler> {
36237+ public:
36238+  static std::shared_ptr<NWebOutputHandler> Create(
36239+      uint32_t width,
36240+      uint32_t height,
36241+      std::function<bool(const char*, uint32_t, uint32_t)> output_frame_cb);
36242+
36243+  NWebOutputHandler(
36244+      std::function<bool(const char*, uint32_t, uint32_t)> output_frame_cb);
36245+  ~NWebOutputHandler() = default;
36246+
36247+  void Init(uint32_t width, uint32_t height);
36248+  void GetWindowInfo(uint32_t& width, uint32_t& height);
36249+  void Resize(uint32_t width, uint32_t height);
36250+  void OnRenderUpdate(const char* buffer);
36251+  void SetFrameInfoDump(bool flag);
36252+  void StartFrameStat();
36253+  void SetDumpPath(const std::string& path);
36254+  void StartRenderOutput();
36255+  void SetNWebId(uint32_t id);
36256+  bool IsSizeValid();
36257+
36258+ private:
36259+  class BmpDumpHelper {
36260+   public:
36261+    void DumpToBmp(const std::string& filename,
36262+                   char* buf,
36263+                   int width,
36264+                   int height);
36265+
36266+   private:
36267+    void RgbaToRgb(char* buf, int width, int height);
36268+    void WriteToBmp(const std::string& filename,
36269+                    char* buf,
36270+                    int width,
36271+                    int height);
36272+  };
36273+
36274+  void StartDumpToFile();
36275+  void UpdateStat(bool flag);
36276+
36277+ private:
36278+  uint32_t width_ = 0;
36279+  uint32_t height_ = 0;
36280+  uint32_t frame_size_ = 0;
36281+
36282+  std::function<bool(const char*, uint32_t, uint32_t)> output_frame_cb_;
36283+
36284+  std::string dump_path_;
36285+  std::mutex dump_mtx_;
36286+  std::condition_variable dump_cv_;
36287+  std::unique_ptr<char> dump_buf_;
36288+
36289+  /* stat info */
36290+  bool frame_info_dump_ = false;
36291+  std::mutex frame_stat_mtx_;
36292+  int64_t render_count_ = 0L;
36293+  int64_t local_render_count_ = 0L;
36294+  int64_t local_time_base_ = 0L;
36295+  int64_t local_time_curr_ = 0L;
36296+  int64_t frame_miss_count_ = 0L;
36297+
36298+  uint32_t nweb_id_ = 0;
36299+};
36300+}  // namespace OHOS::NWeb
36301+
36302+#endif  // NWEB_OUTPUT_HANDLER_H
36303diff --git a/ohos_nweb/src/nweb_url_resource_error_impl.h b/ohos_nweb/src/nweb_url_resource_error_impl.h
36304new file mode 100644
36305index 0000000000..d935afea26
36306--- /dev/null
36307+++ b/ohos_nweb/src/nweb_url_resource_error_impl.h
36308@@ -0,0 +1,25 @@
36309+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
36310+// Use of this source code is governed by a BSD-style license that can be
36311+// found in the LICENSE file.
36312+
36313+#ifndef NWEB_URL_RESOURCE_ERROR_IMPL
36314+#define NWEB_URL_RESOURCE_ERROR_IMPL
36315+
36316+#include "nweb_url_resource_error.h"
36317+
36318+namespace OHOS::NWeb {
36319+class UrlResourceErrorImpl : public NWebUrlResourceError {
36320+ public:
36321+  UrlResourceErrorImpl(int error_code, const std::string& error_info)
36322+      : error_code_(error_code), error_info_(error_info){};
36323+  ~UrlResourceErrorImpl() = default;
36324+
36325+  const std::string& ErrorInfo() const override { return error_info_; }
36326+  int ErrorCode() const override { return error_code_; }
36327+
36328+ private:
36329+  int error_code_;
36330+  std::string error_info_;
36331+};
36332+}  // namespace OHOS::NWeb
36333+#endif  // NWEB_URL_RESOURCE_ERROR_IMPL
36334\ No newline at end of file
36335diff --git a/ohos_nweb/src/nweb_url_resource_request_impl.cc b/ohos_nweb/src/nweb_url_resource_request_impl.cc
36336new file mode 100644
36337index 0000000000..45b819debd
36338--- /dev/null
36339+++ b/ohos_nweb/src/nweb_url_resource_request_impl.cc
36340@@ -0,0 +1,45 @@
36341+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
36342+// Use of this source code is governed by a BSD-style license that can be
36343+// found in the LICENSE file.
36344+
36345+#include "nweb_url_resource_request_impl.h"
36346+
36347+namespace OHOS::NWeb {
36348+NWebUrlResourceRequestImpl::NWebUrlResourceRequestImpl(
36349+    const std::string& method,
36350+    const std::map<std::string, std::string>& request_headers,
36351+    const std::string& url,
36352+    bool has_gesture,
36353+    bool is_for_main_frame,
36354+    bool is_redirect)
36355+    : method_(method),
36356+      request_headers_(request_headers),
36357+      url_(url),
36358+      has_gesture_(has_gesture),
36359+      is_for_main_frame_(is_for_main_frame),
36360+      is_redirect_(is_redirect) {}
36361+
36362+const std::string& NWebUrlResourceRequestImpl::Method() {
36363+  return method_;
36364+}
36365+
36366+const std::map<std::string, std::string>& NWebUrlResourceRequestImpl::RequestHeaders() {
36367+  return request_headers_;
36368+}
36369+
36370+const std::string& NWebUrlResourceRequestImpl::Url() {
36371+  return url_;
36372+}
36373+
36374+bool NWebUrlResourceRequestImpl::FromGesture() {
36375+  return has_gesture_;
36376+}
36377+
36378+bool NWebUrlResourceRequestImpl::IsAboutMainFrame() {
36379+  return is_for_main_frame_;
36380+}
36381+
36382+bool NWebUrlResourceRequestImpl::IsRequestRedirect() {
36383+  return is_redirect_;
36384+}
36385+}
36386diff --git a/ohos_nweb/src/nweb_url_resource_request_impl.h b/ohos_nweb/src/nweb_url_resource_request_impl.h
36387new file mode 100644
36388index 0000000000..9387b49884
36389--- /dev/null
36390+++ b/ohos_nweb/src/nweb_url_resource_request_impl.h
36391@@ -0,0 +1,37 @@
36392+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
36393+// Use of this source code is governed by a BSD-style license that can be
36394+// found in the LICENSE file.
36395+
36396+#ifndef NWEB_URL_RESOURCE_REQUEAST_IMPL_H
36397+#define NWEB_URL_RESOURCE_REQUEAST_IMPL_H
36398+
36399+#include "nweb_url_resource_request.h"
36400+
36401+namespace OHOS::NWeb {
36402+class NWebUrlResourceRequestImpl : public NWebUrlResourceRequest {
36403+ public:
36404+  NWebUrlResourceRequestImpl(const std::string& method,
36405+                         const std::map<std::string, std::string>& request_headers,
36406+                         const std::string& url,
36407+                         bool has_gesture,
36408+                         bool is_for_main_frame,
36409+                         bool is_redirect = false);
36410+  ~NWebUrlResourceRequestImpl() = default;
36411+
36412+  const std::string& Method() override;
36413+  const std::map<std::string, std::string>& RequestHeaders() override;
36414+  const std::string& Url() override;
36415+  bool FromGesture() override;
36416+  bool IsAboutMainFrame() override;
36417+  bool IsRequestRedirect() override;
36418+
36419+ private:
36420+  std::string method_;
36421+  std::map<std::string, std::string> request_headers_;
36422+  std::string url_;
36423+  bool has_gesture_;
36424+  bool is_for_main_frame_;
36425+  bool is_redirect_;
36426+};
36427+}
36428+#endif // NWEB_URL_RESOURCE_REQUEAST_IMPL_H
36429\ No newline at end of file
36430diff --git a/ohos_nweb/src/ohos_nweb_main.cc b/ohos_nweb/src/ohos_nweb_main.cc
36431new file mode 100644
36432index 0000000000..defaae1499
36433--- /dev/null
36434+++ b/ohos_nweb/src/ohos_nweb_main.cc
36435@@ -0,0 +1,18 @@
36436+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
36437+// Use of this source code is governed by a BSD-style license that can be
36438+// found in the LICENSE file.
36439+
36440+#include <unistd.h>
36441+#include "include/cef_app.h"
36442+#include "nweb_hilog.h"
36443+
36444+int main(int argc, const char* argv[]) {
36445+  WVLOG_I("nweb subprocess %{public}s begin, pid=%{public}d", argv[0],
36446+          getpid());
36447+
36448+  CefMainArgs main_args(argc, const_cast<char**>(argv));
36449+  (void)CefExecuteProcess(main_args, NULL, NULL);
36450+
36451+  WVLOG_I("nweb subprocess %{public}s end, pid=%{public}d", argv[0],
36452+          getpid());
36453+}
36454\ No newline at end of file
36455diff --git a/services/device/geolocation/BUILD.gn b/services/device/geolocation/BUILD.gn
36456index f5d6495c48..27c8bcf097 100644
36457--- a/services/device/geolocation/BUILD.gn
36458+++ b/services/device/geolocation/BUILD.gn
36459@@ -64,6 +64,21 @@ source_set("geolocation") {
36460     "//services/network/public/cpp",
36461   ]
36462
36463+  if (is_ohos) {
36464+    sources += [
36465+      "ohos/location_provider_ohos.cc",
36466+      "ohos/location_provider_ohos.h",
36467+    ]
36468+    import("//build/config/ohos/config.gni")
36469+    include_dirs = ohos_src_includes
36470+    lib_dirs = ohos_libs_dir
36471+    libs = [
36472+      "locator_sdk.z",
36473+      "ipc_core.z",
36474+      "lbsservice_common.z",
36475+    ]
36476+  }
36477+
36478   if (is_android) {
36479     sources += [
36480       "location_api_adapter_android.cc",
36481diff --git a/services/device/geolocation/location_arbitrator.cc b/services/device/geolocation/location_arbitrator.cc
36482index 527cff5fbb..3932492409 100644
36483--- a/services/device/geolocation/location_arbitrator.cc
36484+++ b/services/device/geolocation/location_arbitrator.cc
36485@@ -1,4 +1,5 @@
36486-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
36487+// Copyright (c) 2022 Huawei Device Co., Ltd.
36488+// Copyright 2018 The Chromium Authors. All rights reserved.
36489 // Use of this source code is governed by a BSD-style license that can be
36490 // found in the LICENSE file.
36491
36492@@ -162,7 +163,7 @@ LocationArbitrator::NewNetworkLocationProvider(
36493
36494 std::unique_ptr<LocationProvider>
36495 LocationArbitrator::NewSystemLocationProvider() {
36496-#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_FUCHSIA) || defined(OS_OHOS)
36497+#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_FUCHSIA)
36498   return nullptr;
36499 #else
36500   return device::NewSystemLocationProvider();
36501diff --git a/services/device/geolocation/ohos/location_provider_ohos.cc b/services/device/geolocation/ohos/location_provider_ohos.cc
36502new file mode 100644
36503index 0000000000..c438909982
36504--- /dev/null
36505+++ b/services/device/geolocation/ohos/location_provider_ohos.cc
36506@@ -0,0 +1,168 @@
36507+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
36508+// Use of this source code is governed by a BSD-style license that can be
36509+// found in the LICENSE file.
36510+
36511+#include "services/device/geolocation/ohos/location_provider_ohos.h"
36512+
36513+#include <memory>
36514+
36515+#include <common_utils.h>
36516+#include <constant_definition.h>
36517+#include <system_ability_definition.h>
36518+
36519+#include "base/bind.h"
36520+#include "base/memory/singleton.h"
36521+
36522+namespace device {
36523+
36524+// LocationProviderOhos
36525+LocationProviderOhos::LocationProviderOhos() {
36526+  locator_callback_ = this;
36527+}
36528+
36529+LocationProviderOhos::~LocationProviderOhos() {
36530+  StopProvider();
36531+  if (locator_ != nullptr)
36532+    locator_.reset();
36533+}
36534+
36535+void LocationProviderOhos::SetUpdateCallback(
36536+    const LocationProviderUpdateCallback& callback) {
36537+  callback_ = callback;
36538+}
36539+
36540+void LocationProviderOhos::StartProvider(bool high_accuracy) {
36541+  StopProvider();
36542+  RequestLocationUpdate(high_accuracy);
36543+}
36544+
36545+void LocationProviderOhos::StopProvider() {
36546+  if (!is_running_)
36547+    return;
36548+  is_running_ = false;
36549+  locator_->StopLocating(locator_callback_);
36550+}
36551+
36552+const mojom::Geoposition& LocationProviderOhos::GetPosition() {
36553+  return last_position_;
36554+}
36555+
36556+void LocationProviderOhos::OnPermissionGranted() {
36557+  // Nothing to do here.
36558+}
36559+
36560+void LocationProviderOhos::OnNewLocationAvailable(
36561+    const std::unique_ptr<OHOS::Location::Location>& location) {
36562+  mojom::Geoposition position;
36563+  position.latitude = location->GetLatitude();
36564+  position.longitude = location->GetLongitude();
36565+  // location->GetTimeStamp() has no value now, so that temporarily passed
36566+  // value 10.
36567+  position.timestamp = base::Time::FromDoubleT(10);
36568+  position.altitude = location->GetAltitude();
36569+  position.accuracy = location->GetAccuracy();
36570+  position.heading = location->GetDirection();
36571+  position.speed = location->GetSpeed();
36572+
36573+  NewGeopositionReport(position);
36574+}
36575+
36576+void LocationProviderOhos::OnNewErrorAvailable(std::string message) {
36577+  mojom::Geoposition position_error;
36578+  position_error.error_code =
36579+      mojom::Geoposition::ErrorCode::POSITION_UNAVAILABLE;
36580+  position_error.error_message = message;
36581+
36582+  NewGeopositionReport(position_error);
36583+}
36584+
36585+void LocationProviderOhos::RequestLocationUpdate(bool high_accuracy) {
36586+  is_running_ = true;
36587+  CreateLocationManagerIfNeeded();
36588+  locator_->EnableAbility(true);
36589+
36590+  std::unique_ptr<OHOS::Location::RequestConfig> requestConfig =
36591+      std::make_unique<OHOS::Location::RequestConfig>();
36592+  SetRequestConfig(requestConfig, high_accuracy);
36593+
36594+  locator_->StartLocating(requestConfig, locator_callback_, "location.ILocator",
36595+                          0, 0);
36596+}
36597+
36598+void LocationProviderOhos::CreateLocationManagerIfNeeded() {
36599+  if (locator_ != nullptr)
36600+    return;
36601+  locator_ = std::make_unique<OHOS::Location::LocatorProxy>(
36602+      OHOS::Location::CommonUtils::GetRemoteObject(
36603+          OHOS::LOCATION_LOCATOR_SA_ID,
36604+          OHOS::Location::CommonUtils::InitDeviceId()));
36605+}
36606+
36607+void LocationProviderOhos::SetRequestConfig(
36608+    std::unique_ptr<OHOS::Location::RequestConfig>& requestConfig,
36609+    bool high_accuracy) {
36610+  requestConfig->SetPriority(OHOS::Location::PRIORITY_FAST_FIRST_FIX);
36611+  requestConfig->SetScenario(OHOS::Location::SCENE_UNSET);
36612+  requestConfig->SetTimeInterval(1);
36613+  requestConfig->SetDistanceInterval(0);
36614+  requestConfig->SetMaxAccuracy(0);
36615+  requestConfig->SetFixNumber(1);
36616+}
36617+
36618+void LocationProviderOhos::NewGeopositionReport(
36619+    const mojom::Geoposition& position) {
36620+  last_position_ = position;
36621+  if (!callback_.is_null())
36622+    callback_.Run(this, position);
36623+}
36624+
36625+int LocationProviderOhos::OnRemoteRequest(uint32_t code,
36626+                                          OHOS::MessageParcel& data,
36627+                                          OHOS::MessageParcel& reply,
36628+                                          OHOS::MessageOption& option) {
36629+  switch (code) {
36630+    case RECEIVE_LOCATION_INFO_EVENT: {
36631+      std::unique_ptr<OHOS::Location::Location> location =
36632+          OHOS::Location::Location::Unmarshalling(data);
36633+      OnLocationReport(location);
36634+      break;
36635+    }
36636+    case RECEIVE_ERROR_INFO_EVENT: {
36637+      break;
36638+    }
36639+    case RECEIVE_LOCATION_STATUS_EVENT: {
36640+      OnLocatingStatusChange(0);
36641+      break;
36642+    }
36643+    default: {
36644+      break;
36645+    }
36646+  }
36647+  return 0;
36648+}
36649+
36650+void LocationProviderOhos::OnLocationReport(
36651+    const std::unique_ptr<OHOS::Location::Location>& location) {
36652+  if (is_running_) {
36653+    OnNewLocationAvailable(location);
36654+    StopProvider();
36655+  }
36656+}
36657+
36658+void LocationProviderOhos::OnLocatingStatusChange(const int status) {}
36659+
36660+void LocationProviderOhos::OnErrorReport(const int errorCode) {
36661+  StopProvider();
36662+  if (errorCode == LOCATION_GET_FAILED) {
36663+    OnNewErrorAvailable("Failed to get location!");
36664+  } else {
36665+    OnNewErrorAvailable("Unknown error during the locating occured!");
36666+  }
36667+}
36668+
36669+// static
36670+std::unique_ptr<LocationProvider> NewSystemLocationProvider() {
36671+  return base::WrapUnique(new LocationProviderOhos);
36672+}
36673+
36674+}  // namespace device
36675diff --git a/services/device/geolocation/ohos/location_provider_ohos.h b/services/device/geolocation/ohos/location_provider_ohos.h
36676new file mode 100644
36677index 0000000000..7b7adac934
36678--- /dev/null
36679+++ b/services/device/geolocation/ohos/location_provider_ohos.h
36680@@ -0,0 +1,83 @@
36681+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
36682+// Use of this source code is governed by a BSD-style license that can be
36683+// found in the LICENSE file.
36684+
36685+#ifndef SERVICES_DEVICE_GEOLOCATION_LOCATION_PROVIDER_OHOS_H_
36686+#define SERVICES_DEVICE_GEOLOCATION_LOCATION_PROVIDER_OHOS_H_
36687+
36688+#include <memory>
36689+
36690+#include <i_locator_callback.h>
36691+#include <iremote_stub.h>
36692+#include <location.h>
36693+#include <locator_proxy.h>
36694+#include <message_parcel.h>
36695+#include <request_config.h>
36696+
36697+#include "base/memory/scoped_refptr.h"
36698+#include "base/single_thread_task_runner.h"
36699+#include "base/threading/thread_checker.h"
36700+#include "services/device/public/cpp/geolocation/location_provider.h"
36701+#include "services/device/public/mojom/geoposition.mojom.h"
36702+
36703+namespace device {
36704+
36705+// Location provider for Android using the platform provider over JNI.
36706+class LocationProviderOhos
36707+    : public LocationProvider,
36708+      public OHOS::IRemoteStub<OHOS::Location::ILocatorCallback> {
36709+ public:
36710+  LocationProviderOhos();
36711+  ~LocationProviderOhos() override;
36712+
36713+  enum LocationErrorCode {
36714+    LOCATION_GET_SUCCESS = 0,
36715+    LOCATION_GET_FAILED,
36716+    LOCATION_UNKNOWN_ERROR,
36717+  };
36718+
36719+  // LocationProvider implementation.
36720+  void SetUpdateCallback(
36721+      const LocationProviderUpdateCallback& callback) override;
36722+  void StartProvider(bool high_accuracy) override;
36723+  void StopProvider() override;
36724+  const mojom::Geoposition& GetPosition() override;
36725+  void OnPermissionGranted() override;
36726+
36727+  // ILocatorCallback implementation.
36728+  virtual int OnRemoteRequest(uint32_t code,
36729+                              OHOS::MessageParcel& data,
36730+                              OHOS::MessageParcel& reply,
36731+                              OHOS::MessageOption& option) override;
36732+  void OnLocationReport(
36733+      const std::unique_ptr<OHOS::Location::Location>& location) override;
36734+  void OnLocatingStatusChange(const int status) override;
36735+  void OnErrorReport(const int errorCode) override;
36736+
36737+  void OnNewLocationAvailable(
36738+      const std::unique_ptr<OHOS::Location::Location>& location);
36739+  void OnNewErrorAvailable(std::string message);
36740+
36741+ private:
36742+  void RequestLocationUpdate(bool high_accuracy);
36743+  void CreateLocationManagerIfNeeded();
36744+  void SetRequestConfig(
36745+      std::unique_ptr<OHOS::Location::RequestConfig>& requestConfig,
36746+      bool high_accuracy);
36747+
36748+  // Calls |callback_| with the new location.
36749+  void NewGeopositionReport(const mojom::Geoposition& position);
36750+
36751+  std::unique_ptr<OHOS::Location::LocatorProxy> locator_;
36752+
36753+  mojom::Geoposition last_position_;
36754+
36755+  LocationProviderUpdateCallback callback_;
36756+
36757+  bool is_running_ = false;
36758+  OHOS::sptr<OHOS::Location::ILocatorCallback> locator_callback_;
36759+};
36760+
36761+}  // namespace device
36762+
36763+#endif  // SERVICES_DEVICE_GEOLOCATION_LOCATION_PROVIDER_OHOS_H_
36764diff --git a/skia/ext/fontmgr_default_ohos.cc b/skia/ext/fontmgr_default_ohos.cc
36765index 6558bbebea..f2e506a550 100644
36766--- a/skia/ext/fontmgr_default_ohos.cc
36767+++ b/skia/ext/fontmgr_default_ohos.cc
36768@@ -1,4 +1,4 @@
36769-// Copyright 2022 The Chromium Authors. All rights reserved.
36770+// Copyright (c) 2022 Huawei Device Co., Ltd. All rights reserved.
36771 // Use of this source code is governed by a BSD-style license that can be
36772 // found in the LICENSE file.
36773
36774diff --git a/third_party/blink/public/common/web_preferences/web_preferences.h b/third_party/blink/public/common/web_preferences/web_preferences.h
36775index 08ed976ad4..2ddd9e0494 100644
36776--- a/third_party/blink/public/common/web_preferences/web_preferences.h
36777+++ b/third_party/blink/public/common/web_preferences/web_preferences.h
36778@@ -1,4 +1,5 @@
36779-// Copyright 2014 The Chromium Authors. All rights reserved.
36780+// Copyright (c) 2022 Huawei Device Co., Ltd.
36781+// Copyright 2018 The Chromium Authors. All rights reserved.
36782 // Use of this source code is governed by a BSD-style license that can be
36783 // found in the LICENSE file.
36784
36785diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn
36786index e0b3b8305a..09667cadf7 100644
36787--- a/third_party/blink/renderer/platform/BUILD.gn
36788+++ b/third_party/blink/renderer/platform/BUILD.gn
36789@@ -1742,7 +1742,7 @@ component("platform") {
36790       "/wd4724",  # Modulo by 0.
36791     ]
36792   }
36793-
36794+
36795   if (is_ohos) {
36796     sources += [
36797       "fonts/android/font_cache_android.cc",
36798diff --git a/third_party/blink/renderer/platform/widget/compositing/render_frame_metadata_observer_impl.cc b/third_party/blink/renderer/platform/widget/compositing/render_frame_metadata_observer_impl.cc
36799index 775bafa715..972ce7ddd3 100644
36800--- a/third_party/blink/renderer/platform/widget/compositing/render_frame_metadata_observer_impl.cc
36801+++ b/third_party/blink/renderer/platform/widget/compositing/render_frame_metadata_observer_impl.cc
36802@@ -1,3 +1,4 @@
36803+// Copyright (c) 2022 Huawei Device Co., Ltd.
36804 // Copyright 2018 The Chromium Authors. All rights reserved.
36805 // Use of this source code is governed by a BSD-style license that can be
36806 // found in the LICENSE file.
36807@@ -168,7 +169,11 @@ bool RenderFrameMetadataObserverImpl::ShouldSendRenderFrameMetadata(
36808       rfm1.top_controls_shown_ratio != rfm2.top_controls_shown_ratio ||
36809       rfm1.local_surface_id != rfm2.local_surface_id ||
36810       rfm2.new_vertical_scroll_direction !=
36811-          viz::VerticalScrollDirection::kNull) {
36812+          viz::VerticalScrollDirection::kNull
36813+#if defined(OS_OHOS)
36814+      || rfm1.root_layer_size != rfm2.root_layer_size
36815+#endif
36816+      ) {
36817     *needs_activation_notification = true;
36818     return true;
36819   }
36820diff --git a/tools/clang/crashreports/.gitignore b/tools/clang/crashreports/.gitignore
36821new file mode 100644
36822index 0000000000..d6b7ef32c8
36823--- /dev/null
36824+++ b/tools/clang/crashreports/.gitignore
36825@@ -0,0 +1,2 @@
36826+*
36827+!.gitignore
36828diff --git a/ui/ozone/common/egl_util.cc b/ui/ozone/common/egl_util.cc
36829index d23a601460..7eda22ffbb 100644
36830--- a/ui/ozone/common/egl_util.cc
36831+++ b/ui/ozone/common/egl_util.cc
36832@@ -34,7 +34,12 @@ const base::FilePath::CharType kDefaultEglSoname[] =
36833     FILE_PATH_LITERAL("libEGL.so");
36834 const base::FilePath::CharType kDefaultGlesSoname[] =
36835     FILE_PATH_LITERAL("libGLESv2.so");
36836-#else  // !defined(OS_FUCHSIA)
36837+#elif defined(OS_OHOS)
36838+const base::FilePath::CharType kDefaultEglSoname[] =
36839+    FILE_PATH_LITERAL("libEGL.so");
36840+const base::FilePath::CharType kDefaultGlesSoname[] =
36841+    FILE_PATH_LITERAL("libGLES_mali.so");
36842+#else
36843 const base::FilePath::CharType kDefaultEglSoname[] =
36844     FILE_PATH_LITERAL("libEGL.so.1");
36845 const base::FilePath::CharType kDefaultGlesSoname[] =
36846diff --git a/ui/ozone/platform/headless/headless_surface_factory.cc b/ui/ozone/platform/headless/headless_surface_factory.cc
36847index b3cfb3cf34..57528f4cad 100644
36848--- a/ui/ozone/platform/headless/headless_surface_factory.cc
36849+++ b/ui/ozone/platform/headless/headless_surface_factory.cc
36850@@ -224,7 +224,8 @@ HeadlessSurfaceFactory::~HeadlessSurfaceFactory() = default;
36851
36852 std::vector<gl::GLImplementation>
36853 HeadlessSurfaceFactory::GetAllowedGLImplementations() {
36854-  return std::vector<gl::GLImplementation>{gl::kGLImplementationSwiftShaderGL};
36855+  return std::vector<gl::GLImplementation>{gl::kGLImplementationEGLGLES2,
36856+                                           gl::kGLImplementationSwiftShaderGL};
36857 }
36858
36859 GLOzone* HeadlessSurfaceFactory::GetGLOzone(
36860diff --git a/ui/views/widget/desktop_aura/desktop_screen_win.cc b/ui/views/widget/desktop_aura/desktop_screen_win.cc
36861index 762a108fed..b0ef9c6c49 100644
36862--- a/ui/views/widget/desktop_aura/desktop_screen_win.cc
36863+++ b/ui/views/widget/desktop_aura/desktop_screen_win.cc
36864@@ -19,7 +19,7 @@ DesktopScreenWin::~DesktopScreenWin() {
36865
36866 HWND DesktopScreenWin::GetHWNDFromNativeWindow(gfx::NativeWindow window) const {
36867   if (!window)
36868-    return nullptr;
36869+    return nullptr;
36870   aura::WindowTreeHost* host = window->GetHost();
36871   return host ? host->GetAcceleratedWidget() : nullptr;
36872 }
36873diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc
36874index 55b70c6349..0cf04f6ee6 100644
36875--- a/ui/views/win/hwnd_message_handler.cc
36876+++ b/ui/views/win/hwnd_message_handler.cc
36877@@ -3107,13 +3107,10 @@ LRESULT HWNDMessageHandler::HandleMouseEventInternal(UINT message,
36878   } else if (event.type() == ui::ET_MOUSEWHEEL) {
36879     ui::MouseWheelEvent mouse_wheel_event(msg);
36880     // Reroute the mouse wheel to the window under the pointer if applicable.
36881-    if (ui::RerouteMouseWheel(hwnd(), w_param, l_param) ||
36882-        delegate_->HandleMouseEvent(&mouse_wheel_event)) {
36883-      SetMsgHandled(TRUE);
36884-      return 0;
36885-    } else {
36886-      return 1;
36887-    }
36888+    return (ui::RerouteMouseWheel(hwnd(), w_param, l_param) ||
36889+            delegate_->HandleMouseEvent(&mouse_wheel_event))
36890+               ? 0
36891+               : 1;
36892   }
36893
36894   // Suppress |ET_MOUSE_MOVED| and |ET_MOUSE_DRAGGED| events from WM_MOUSE*
36895diff --git a/weblayer/browser/infobar_service.h b/weblayer/browser/infobar_service.h
36896index bf2100338b..b06b305498 100644
36897--- a/weblayer/browser/infobar_service.h
36898+++ b/weblayer/browser/infobar_service.h
36899@@ -33,9 +33,11 @@ class InfoBarService : public infobars::ContentInfoBarManager,
36900   InfoBarService(const InfoBarService&) = delete;
36901   InfoBarService& operator=(const InfoBarService&) = delete;
36902
36903+#if defined(OS_ANDROID)
36904   // InfoBarManager:
36905   std::unique_ptr<infobars::InfoBar> CreateConfirmInfoBar(
36906       std::unique_ptr<ConfirmInfoBarDelegate> delegate) override;
36907+#endif
36908
36909  protected:
36910   explicit InfoBarService(content::WebContents* web_contents);
36911