]> git.sesse.net Git - casparcg/blobdiff - dependencies64/cef/windows/tests/shared/browser/resource_util_win.cc
Upgrade CEF to 3.3029.1611.g44e39a8 / Chromium 58.0.3029.81.
[casparcg] / dependencies64 / cef / windows / tests / shared / browser / resource_util_win.cc
diff --git a/dependencies64/cef/windows/tests/shared/browser/resource_util_win.cc b/dependencies64/cef/windows/tests/shared/browser/resource_util_win.cc
new file mode 100644 (file)
index 0000000..21d11c6
--- /dev/null
@@ -0,0 +1,117 @@
+// Copyright (c) 2013 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/shared/browser/resource_util.h"
+
+#include "include/base/cef_logging.h"
+#include "include/cef_stream.h"
+#include "include/wrapper/cef_byte_read_handler.h"
+#include "include/wrapper/cef_stream_resource_handler.h"
+
+namespace client {
+
+namespace {
+
+bool LoadBinaryResource(int binaryId, DWORD &dwSize, LPBYTE &pBytes) {
+  HINSTANCE hInst = GetModuleHandle(NULL);
+  HRSRC hRes = FindResource(hInst, MAKEINTRESOURCE(binaryId),
+                            MAKEINTRESOURCE(256));
+  if (hRes) {
+    HGLOBAL hGlob = LoadResource(hInst, hRes);
+    if (hGlob) {
+      dwSize = SizeofResource(hInst, hRes);
+      pBytes = (LPBYTE)LockResource(hGlob);
+      if (dwSize > 0 && pBytes)
+        return true;
+    }
+  }
+
+  return false;
+}
+
+// Provider of binary resources.
+class BinaryResourceProvider : public CefResourceManager::Provider {
+ public:
+  explicit BinaryResourceProvider(const std::string& url_path)
+    : url_path_(url_path) {
+    DCHECK(!url_path.empty());
+  }
+
+  bool OnRequest(scoped_refptr<CefResourceManager::Request> request) OVERRIDE {
+    CEF_REQUIRE_IO_THREAD();
+
+    const std::string& url = request->url();
+    if (url.find(url_path_) != 0L) {
+      // Not handled by this provider.
+      return false;
+    }
+
+    CefRefPtr<CefResourceHandler> handler;
+
+    const std::string& relative_path = url.substr(url_path_.length());
+    if (!relative_path.empty()) {
+      CefRefPtr<CefStreamReader> stream =
+          GetBinaryResourceReader(relative_path.data());
+      if (stream.get()) {
+        handler = new CefStreamResourceHandler(
+            request->mime_type_resolver().Run(url),
+            stream);
+      }
+    }
+
+    request->Continue(handler);
+    return true;
+  }
+
+ private:
+  std::string url_path_;
+
+  DISALLOW_COPY_AND_ASSIGN(BinaryResourceProvider);
+};
+
+}  // namespace
+
+// Implemented in resource_util_win_idmap.cc.
+extern int GetResourceId(const char* resource_name);
+
+bool LoadBinaryResource(const char* resource_name, std::string& resource_data) {
+  int resource_id = GetResourceId(resource_name);
+  if (resource_id == 0)
+    return false;
+
+  DWORD dwSize;
+  LPBYTE pBytes;
+
+  if (LoadBinaryResource(resource_id, dwSize, pBytes)) {
+    resource_data = std::string(reinterpret_cast<char*>(pBytes), dwSize);
+    return true;
+  }
+
+  NOTREACHED();  // The resource should be found.
+  return false;
+}
+
+CefRefPtr<CefStreamReader> GetBinaryResourceReader(const char* resource_name) {
+  int resource_id = GetResourceId(resource_name);
+  if (resource_id == 0)
+    return NULL;
+
+  DWORD dwSize;
+  LPBYTE pBytes;
+
+  if (LoadBinaryResource(resource_id, dwSize, pBytes)) {
+    return CefStreamReader::CreateForHandler(
+        new CefByteReadHandler(pBytes, dwSize, NULL));
+  }
+
+  NOTREACHED();  // The resource should be found.
+  return NULL;
+}
+
+CefResourceManager::Provider* CreateBinaryResourceProvider(
+    const std::string& url_path) {
+  return new BinaryResourceProvider(url_path);
+}
+
+}  // namespace client