]> git.sesse.net Git - casparcg/blobdiff - dependencies64/cef/windows/tests/cefclient/renderer/client_renderer.cc
Upgrade CEF to 3.3029.1611.g44e39a8 / Chromium 58.0.3029.81.
[casparcg] / dependencies64 / cef / windows / tests / cefclient / renderer / client_renderer.cc
diff --git a/dependencies64/cef/windows/tests/cefclient/renderer/client_renderer.cc b/dependencies64/cef/windows/tests/cefclient/renderer/client_renderer.cc
new file mode 100644 (file)
index 0000000..b04554b
--- /dev/null
@@ -0,0 +1,102 @@
+// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
+// reserved. Use of this source code is governed by a BSD-style license that
+// can be found in the LICENSE file.
+
+#include "tests/cefclient/renderer/client_renderer.h"
+
+#include <sstream>
+#include <string>
+
+#include "include/cef_crash_util.h"
+#include "include/cef_dom.h"
+#include "include/wrapper/cef_helpers.h"
+#include "include/wrapper/cef_message_router.h"
+
+namespace client {
+namespace renderer {
+
+namespace {
+
+// Must match the value in client_handler.cc.
+const char kFocusedNodeChangedMessage[] = "ClientRenderer.FocusedNodeChanged";
+
+class ClientRenderDelegate : public ClientAppRenderer::Delegate {
+ public:
+  ClientRenderDelegate()
+    : last_node_is_editable_(false) {
+  }
+
+  void OnRenderThreadCreated(
+      CefRefPtr<ClientAppRenderer> app,
+      CefRefPtr<CefListValue> extra_info) OVERRIDE {
+    if (CefCrashReportingEnabled()) {
+      // Set some crash keys for testing purposes. Keys must be defined in the
+      // "crash_reporter.cfg" file. See cef_crash_util.h for details.
+      CefSetCrashKeyValue("testkey1", "value1_renderer");
+      CefSetCrashKeyValue("testkey2", "value2_renderer");
+      CefSetCrashKeyValue("testkey3", "value3_renderer");
+    }
+  }
+
+  void OnWebKitInitialized(CefRefPtr<ClientAppRenderer> app) OVERRIDE {
+    // Create the renderer-side router for query handling.
+    CefMessageRouterConfig config;
+    message_router_ = CefMessageRouterRendererSide::Create(config);
+  }
+
+  void OnContextCreated(CefRefPtr<ClientAppRenderer> app,
+                        CefRefPtr<CefBrowser> browser,
+                        CefRefPtr<CefFrame> frame,
+                        CefRefPtr<CefV8Context> context) OVERRIDE {
+    message_router_->OnContextCreated(browser,  frame, context);
+  }
+
+  void OnContextReleased(CefRefPtr<ClientAppRenderer> app,
+                         CefRefPtr<CefBrowser> browser,
+                         CefRefPtr<CefFrame> frame,
+                         CefRefPtr<CefV8Context> context) OVERRIDE {
+    message_router_->OnContextReleased(browser,  frame, context);
+  }
+
+  void OnFocusedNodeChanged(CefRefPtr<ClientAppRenderer> app,
+                            CefRefPtr<CefBrowser> browser,
+                            CefRefPtr<CefFrame> frame,
+                            CefRefPtr<CefDOMNode> node) OVERRIDE {
+    bool is_editable = (node.get() && node->IsEditable());
+    if (is_editable != last_node_is_editable_) {
+      // Notify the browser of the change in focused element type.
+      last_node_is_editable_ = is_editable;
+      CefRefPtr<CefProcessMessage> message =
+          CefProcessMessage::Create(kFocusedNodeChangedMessage);
+      message->GetArgumentList()->SetBool(0, is_editable);
+      browser->SendProcessMessage(PID_BROWSER, message);
+    }
+  }
+
+  bool OnProcessMessageReceived(
+      CefRefPtr<ClientAppRenderer> app,
+      CefRefPtr<CefBrowser> browser,
+      CefProcessId source_process,
+      CefRefPtr<CefProcessMessage> message) OVERRIDE {
+    return message_router_->OnProcessMessageReceived(
+        browser, source_process, message);
+  }
+
+ private:
+  bool last_node_is_editable_;
+
+  // Handles the renderer side of query routing.
+  CefRefPtr<CefMessageRouterRendererSide> message_router_;
+
+  DISALLOW_COPY_AND_ASSIGN(ClientRenderDelegate);
+  IMPLEMENT_REFCOUNTING(ClientRenderDelegate);
+};
+
+}  // namespace
+
+void CreateDelegates(ClientAppRenderer::DelegateSet& delegates) {
+  delegates.insert(new ClientRenderDelegate);
+}
+
+}  // namespace renderer
+}  // namespace client