mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Create 2062 release branch for CEF3.
git-svn-id: https://chromiumembedded.googlecode.com/svn/branches/2062@1783 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
79
include/wrapper/cef_byte_read_handler.h
Normal file
79
include/wrapper/cef_byte_read_handler.h
Normal file
@@ -0,0 +1,79 @@
|
||||
// Copyright (c) 2012 Marshall A. Greenblatt. All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the name Chromium Embedded
|
||||
// Framework nor the names of its contributors may be used to endorse
|
||||
// or promote products derived from this software without specific prior
|
||||
// written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// The contents of this file are only available to applications that link
|
||||
// against the libcef_dll_wrapper target.
|
||||
//
|
||||
|
||||
#ifndef CEF_INCLUDE_WRAPPER_CEF_BYTE_READ_HANDLER_H_
|
||||
#define CEF_INCLUDE_WRAPPER_CEF_BYTE_READ_HANDLER_H_
|
||||
#pragma once
|
||||
|
||||
#include "include/base/cef_lock.h"
|
||||
#include "include/base/cef_macros.h"
|
||||
#include "include/cef_base.h"
|
||||
#include "include/cef_stream.h"
|
||||
|
||||
///
|
||||
// Thread safe implementation of the CefReadHandler class for reading an
|
||||
// in-memory array of bytes.
|
||||
///
|
||||
class CefByteReadHandler : public CefReadHandler {
|
||||
public:
|
||||
///
|
||||
// Create a new object for reading an array of bytes. An optional |source|
|
||||
// reference can be kept to keep the underlying data source from being
|
||||
// released while the reader exists.
|
||||
///
|
||||
CefByteReadHandler(const unsigned char* bytes,
|
||||
size_t size,
|
||||
CefRefPtr<CefBase> source);
|
||||
|
||||
// CefReadHandler methods.
|
||||
virtual size_t Read(void* ptr, size_t size, size_t n) OVERRIDE;
|
||||
virtual int Seek(int64 offset, int whence) OVERRIDE;
|
||||
virtual int64 Tell() OVERRIDE;
|
||||
virtual int Eof() OVERRIDE;
|
||||
virtual bool MayBlock() OVERRIDE { return false; }
|
||||
|
||||
private:
|
||||
const unsigned char* bytes_;
|
||||
int64 size_;
|
||||
int64 offset_;
|
||||
CefRefPtr<CefBase> source_;
|
||||
|
||||
base::Lock lock_;
|
||||
|
||||
IMPLEMENT_REFCOUNTING(CefByteReadHandler);
|
||||
DISALLOW_COPY_AND_ASSIGN(CefByteReadHandler);
|
||||
};
|
||||
|
||||
#endif // CEF_INCLUDE_WRAPPER_CEF_BYTE_READ_HANDLER_H_
|
101
include/wrapper/cef_closure_task.h
Normal file
101
include/wrapper/cef_closure_task.h
Normal file
@@ -0,0 +1,101 @@
|
||||
// Copyright (c) 2014 Marshall A. Greenblatt. All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the name Chromium Embedded
|
||||
// Framework nor the names of its contributors may be used to endorse
|
||||
// or promote products derived from this software without specific prior
|
||||
// written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// The contents of this file are only available to applications that link
|
||||
// against the libcef_dll_wrapper target.
|
||||
//
|
||||
|
||||
#ifndef CEF_INCLUDE_WRAPPER_CEF_CLOSURE_TASK_H_
|
||||
#define CEF_INCLUDE_WRAPPER_CEF_CLOSURE_TASK_H_
|
||||
#pragma once
|
||||
|
||||
#include "include/base/cef_callback_forward.h"
|
||||
#include "include/base/cef_macros.h"
|
||||
#include "include/cef_task.h"
|
||||
|
||||
///
|
||||
// Helpers for asynchronously executing a base::Closure (bound function or
|
||||
// method) on a CEF thread. Creation of base::Closures can be facilitated using
|
||||
// base::Bind. See include/base/cef_callback.h for complete usage instructions.
|
||||
//
|
||||
// TO use these helpers you should include this header and the header that
|
||||
// defines base::Bind.
|
||||
//
|
||||
// #include "include/base/cef_bind.h"
|
||||
// #include "include/wrapper/cef_closure_task.h"
|
||||
//
|
||||
// Example of executing a bound function:
|
||||
//
|
||||
// // Define a function.
|
||||
// void MyFunc(int arg) { /* do something with |arg| on the UI thread */ }
|
||||
//
|
||||
// // Post a task that will execute MyFunc on the UI thread and pass an |arg|
|
||||
// // value of 5.
|
||||
// CefPostTask(TID_UI, base::Bind(&MyFunc, 5));
|
||||
//
|
||||
// Example of executing a bound method:
|
||||
//
|
||||
// // Define a class.
|
||||
// class MyClass : public CefBase {
|
||||
// public:
|
||||
// MyClass() {}
|
||||
// void MyMethod(int arg) { /* do something with |arg| on the UI thread */ }
|
||||
// private:
|
||||
// IMPLEMENT_REFCOUNTING(MyClass);
|
||||
// };
|
||||
//
|
||||
// // Create an instance of MyClass.
|
||||
// CefRefPtr<MyClass> instance = new MyClass();
|
||||
//
|
||||
// // Post a task that will execute MyClass::MyMethod on the UI thread and pass
|
||||
// // an |arg| value of 5. |instance| will be kept alive until after the task
|
||||
// // completes.
|
||||
// CefPostTask(TID_UI, base::Bind(&MyClass::MyMethod, instance, 5));
|
||||
///
|
||||
|
||||
///
|
||||
// Create a CefTask that wraps a base::Closure. Can be used in combination with
|
||||
// CefTaskRunner.
|
||||
///
|
||||
CefRefPtr<CefTask> CefCreateClosureTask(const base::Closure& closure);
|
||||
|
||||
///
|
||||
// Post a Closure for execution on the specified thread.
|
||||
///
|
||||
bool CefPostTask(CefThreadId threadId, const base::Closure& closure);
|
||||
|
||||
///
|
||||
// Post a Closure for delayed execution on the specified thread.
|
||||
///
|
||||
bool CefPostDelayedTask(CefThreadId threadId, const base::Closure& closure,
|
||||
int64 delay_ms);
|
||||
|
||||
#endif // CEF_INCLUDE_WRAPPER_CEF_CLOSURE_TASK_H_
|
81
include/wrapper/cef_helpers.h
Normal file
81
include/wrapper/cef_helpers.h
Normal file
@@ -0,0 +1,81 @@
|
||||
// Copyright (c) 2014 Marshall A. Greenblatt. All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the name Chromium Embedded
|
||||
// Framework nor the names of its contributors may be used to endorse
|
||||
// or promote products derived from this software without specific prior
|
||||
// written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// The contents of this file are only available to applications that link
|
||||
// against the libcef_dll_wrapper target.
|
||||
//
|
||||
|
||||
#ifndef CEF_INCLUDE_WRAPPER_CEF_HELPERS_H_
|
||||
#define CEF_INCLUDE_WRAPPER_CEF_HELPERS_H_
|
||||
#pragma once
|
||||
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "include/base/cef_logging.h"
|
||||
#include "include/base/cef_macros.h"
|
||||
#include "include/cef_task.h"
|
||||
|
||||
#define CEF_REQUIRE_UI_THREAD() DCHECK(CefCurrentlyOn(TID_UI));
|
||||
#define CEF_REQUIRE_IO_THREAD() DCHECK(CefCurrentlyOn(TID_IO));
|
||||
#define CEF_REQUIRE_FILE_THREAD() DCHECK(CefCurrentlyOn(TID_FILE));
|
||||
#define CEF_REQUIRE_RENDERER_THREAD() DCHECK(CefCurrentlyOn(TID_RENDERER));
|
||||
|
||||
///
|
||||
// Helper class to manage a scoped copy of |argv|.
|
||||
///
|
||||
class CefScopedArgArray {
|
||||
public:
|
||||
CefScopedArgArray(int argc, char* argv[]) {
|
||||
array_ = new char*[argc];
|
||||
for (int i = 0; i < argc; ++i) {
|
||||
values_.push_back(argv[i]);
|
||||
array_[i] = const_cast<char*>(values_[i].c_str());
|
||||
}
|
||||
}
|
||||
~CefScopedArgArray() {
|
||||
delete [] array_;
|
||||
}
|
||||
|
||||
char** array() const { return array_; }
|
||||
|
||||
private:
|
||||
char** array_;
|
||||
|
||||
// Keep values in a vector separate from |array_| because various users may
|
||||
// modify |array_| and we still want to clean up memory properly.
|
||||
std::vector<std::string> values_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(CefScopedArgArray);
|
||||
};
|
||||
|
||||
#endif // CEF_INCLUDE_WRAPPER_CEF_HELPERS_H_
|
428
include/wrapper/cef_message_router.h
Normal file
428
include/wrapper/cef_message_router.h
Normal file
@@ -0,0 +1,428 @@
|
||||
// Copyright (c) 2014 Marshall A. Greenblatt. All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the name Chromium Embedded
|
||||
// Framework nor the names of its contributors may be used to endorse
|
||||
// or promote products derived from this software without specific prior
|
||||
// written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// The contents of this file are only available to applications that link
|
||||
// against the libcef_dll_wrapper target.
|
||||
//
|
||||
|
||||
#ifndef CEF_INCLUDE_WRAPPER_CEF_MESSAGE_ROUTER_H_
|
||||
#define CEF_INCLUDE_WRAPPER_CEF_MESSAGE_ROUTER_H_
|
||||
#pragma once
|
||||
|
||||
#include "include/base/cef_ref_counted.h"
|
||||
#include "include/cef_base.h"
|
||||
#include "include/cef_browser.h"
|
||||
#include "include/cef_process_message.h"
|
||||
#include "include/cef_v8.h"
|
||||
|
||||
// The below classes implement support for routing aynchronous messages between
|
||||
// JavaScript running in the renderer process and C++ running in the browser
|
||||
// process. An application interacts with the router by passing it data from
|
||||
// standard CEF C++ callbacks (OnBeforeBrowse, OnProcessMessageRecieved,
|
||||
// OnContextCreated, etc). The renderer-side router supports generic JavaScript
|
||||
// callback registration and execution while the browser-side router supports
|
||||
// application-specific logic via one or more application-provided Handler
|
||||
// instances.
|
||||
//
|
||||
// The renderer-side router implementation exposes a query function and a cancel
|
||||
// function via the JavaScript 'window' object:
|
||||
//
|
||||
// // Create and send a new query.
|
||||
// var request_id = window.cefQuery({
|
||||
// request: 'my_request',
|
||||
// persistent: false,
|
||||
// onSuccess: function(response) {},
|
||||
// onFailure: function(error_code, error_message) {}
|
||||
// });
|
||||
//
|
||||
// // Optionally cancel the query.
|
||||
// window.cefQueryCancel(request_id);
|
||||
//
|
||||
// When |window.cefQuery| is executed the request is sent asynchronously to one
|
||||
// or more C++ Handler objects registered in the browser process. Each C++
|
||||
// Handler can choose to either handle or ignore the query in the
|
||||
// Handler::OnQuery callback. If a Handler chooses to handle the query then it
|
||||
// should execute Callback::Success when a response is available or
|
||||
// Callback::Failure if an error occurs. This will result in asynchronous
|
||||
// execution of the associated JavaScript callback in the renderer process. Any
|
||||
// queries unhandled by C++ code in the browser process will be automatically
|
||||
// canceled and the associated JavaScript onFailure callback will be executed
|
||||
// with an error code of -1.
|
||||
//
|
||||
// Queries can be either persistent or non-persistent. If the query is
|
||||
// persistent than the callbacks will remain registered until one of the
|
||||
// following conditions are met:
|
||||
//
|
||||
// A. The query is canceled in JavaScript using the |window.cefQueryCancel|
|
||||
// function.
|
||||
// B. The query is canceled in C++ code using the Callback::Failure function.
|
||||
// C. The context associated with the query is released due to browser
|
||||
// destruction, navigation or renderer process termination.
|
||||
//
|
||||
// If the query is non-persistent then the registration will be removed after
|
||||
// the JavaScript callback is executed a single time. If a query is canceled for
|
||||
// a reason other than Callback::Failure being executed then the associated
|
||||
// Handler's OnQueryCanceled method will be called.
|
||||
//
|
||||
// Some possible usage patterns include:
|
||||
//
|
||||
// One-time Request. Use a non-persistent query to send a JavaScript request.
|
||||
// The Handler evaluates the request and returns the response. The query is
|
||||
// then discarded.
|
||||
//
|
||||
// Broadcast. Use a persistent query to register as a JavaScript broadcast
|
||||
// receiver. The Handler keeps track of all registered Callbacks and executes
|
||||
// them sequentially to deliver the broadcast message.
|
||||
//
|
||||
// Subscription. Use a persistent query to register as a JavaScript subscription
|
||||
// receiver. The Handler initiates the subscription feed on the first request
|
||||
// and delivers responses to all registered subscribers as they become
|
||||
// available. The Handler cancels the subscription feed when there are no
|
||||
// longer any registered JavaScript receivers.
|
||||
//
|
||||
// Message routing occurs on a per-browser and per-context basis. Consequently,
|
||||
// additional application logic can be applied by restricting which browser or
|
||||
// context instances are passed into the router. If you choose to use this
|
||||
// approach do so cautiously. In order for the router to function correctly any
|
||||
// browser or context instance passed into a single router callback must then
|
||||
// be passed into all router callbacks.
|
||||
//
|
||||
// There is generally no need to have multiple renderer-side routers unless you
|
||||
// wish to have multiple bindings with different JavaScript function names. It
|
||||
// can be useful to have multiple browser-side routers with different client-
|
||||
// provided Handler instances when implementing different behaviors on a per-
|
||||
// browser basis.
|
||||
//
|
||||
// This implementation places no formatting restrictions on payload content.
|
||||
// An application may choose to exchange anything from simple formatted
|
||||
// strings to serialized XML or JSON data.
|
||||
//
|
||||
//
|
||||
// EXAMPLE USAGE
|
||||
//
|
||||
// 1. Define the router configuration. You can optionally specify settings
|
||||
// like the JavaScript function names. The configuration must be the same in
|
||||
// both the browser and renderer processes. If using multiple routers in the
|
||||
// same application make sure to specify unique function names for each
|
||||
// router configuration.
|
||||
//
|
||||
// // Example config object showing the default values.
|
||||
// CefMessageRouterConfig config;
|
||||
// config.js_query_function = "cefQuery";
|
||||
// config.js_cancel_function = "cefQueryCancel";
|
||||
//
|
||||
// 2. Create an instance of CefMessageRouterBrowserSide in the browser process.
|
||||
// You might choose to make it a member of your CefClient implementation,
|
||||
// for example.
|
||||
//
|
||||
// browser_side_router_ = CefMessageRouterBrowserSide::Create(config);
|
||||
//
|
||||
// 3. Register one or more Handlers. The Handler instances must either outlive
|
||||
// the router or be removed from the router before they're deleted.
|
||||
//
|
||||
// browser_side_router_->AddHandler(my_handler);
|
||||
//
|
||||
// 4. Call all required CefMessageRouterBrowserSide methods from other callbacks
|
||||
// in your CefClient implementation (OnBeforeClose, etc). See the
|
||||
// CefMessageRouterBrowserSide class documentation for the complete list of
|
||||
// methods.
|
||||
//
|
||||
// 5. Create an instance of CefMessageRouterRendererSide in the renderer process.
|
||||
// You might choose to make it a member of your CefApp implementation, for
|
||||
// example.
|
||||
//
|
||||
// renderer_side_router_ = CefMessageRouterRendererSide::Create(config);
|
||||
//
|
||||
// 6. Call all required CefMessageRouterRendererSide methods from other
|
||||
// callbacks in your CefRenderProcessHandler implementation
|
||||
// (OnContextCreated, etc). See the CefMessageRouterRendererSide class
|
||||
// documentation for the complete list of methods.
|
||||
//
|
||||
// 7. Execute the query function from JavaScript code.
|
||||
//
|
||||
// window.cefQuery({request: 'my_request',
|
||||
// persistent: false,
|
||||
// onSuccess: function(response) { print(response); },
|
||||
// onFailure: function(error_code, error_message) {} });
|
||||
//
|
||||
// 8. Handle the query in your Handler::OnQuery implementation and execute the
|
||||
// appropriate callback either immediately or asynchronously.
|
||||
//
|
||||
// void MyHandler::OnQuery(int64 query_id,
|
||||
// CefRefPtr<CefBrowser> browser,
|
||||
// CefRefPtr<CefFrame> frame,
|
||||
// const CefString& request,
|
||||
// bool persistent,
|
||||
// CefRefPtr<Callback> callback) {
|
||||
// if (request == "my_request") {
|
||||
// callback->Continue("my_response");
|
||||
// return true;
|
||||
// }
|
||||
// return false; // Not handled.
|
||||
// }
|
||||
//
|
||||
// 9. Notice that the onSuccess callback is executed in JavaScript.
|
||||
|
||||
///
|
||||
// Used to configure the query router. The same values must be passed to both
|
||||
// CefMessageRouterBrowserSide and CefMessageRouterRendererSide. If using multiple
|
||||
// router pairs make sure to choose values that do not conflict.
|
||||
///
|
||||
struct CefMessageRouterConfig {
|
||||
CefMessageRouterConfig();
|
||||
|
||||
// Name of the JavaScript function that will be added to the 'window' object
|
||||
// for sending a query. The default value is "cefQuery".
|
||||
CefString js_query_function;
|
||||
|
||||
// Name of the JavaScript function that will be added to the 'window' object
|
||||
// for canceling a pending query. The default value is "cefQueryCancel".
|
||||
CefString js_cancel_function;
|
||||
};
|
||||
|
||||
///
|
||||
// Implements the browser side of query routing. The methods of this class may
|
||||
// be called on any browser process thread unless otherwise indicated.
|
||||
///
|
||||
class CefMessageRouterBrowserSide :
|
||||
public base::RefCountedThreadSafe<CefMessageRouterBrowserSide> {
|
||||
public:
|
||||
///
|
||||
// Callback associated with a single pending asynchronous query. Execute the
|
||||
// Success or Failure method to send an asynchronous response to the
|
||||
// associated JavaScript handler. It is a runtime error to destroy a Callback
|
||||
// object associated with an uncanceled query without first executing one of
|
||||
// the callback methods. The methods of this class may be called on any
|
||||
// browser process thread.
|
||||
///
|
||||
class Callback : public CefBase {
|
||||
public:
|
||||
///
|
||||
// Notify the associated JavaScript onSuccess callback that the query has
|
||||
// completed successfully with the specified |response|.
|
||||
///
|
||||
virtual void Success(const CefString& response) =0;
|
||||
|
||||
///
|
||||
// Notify the associated JavaScript onFailure callback that the query has
|
||||
// failed with the specified |error_code| and |error_message|.
|
||||
///
|
||||
virtual void Failure(int error_code, const CefString& error_message) =0;
|
||||
};
|
||||
|
||||
///
|
||||
// Implement this interface to handle queries. All methods will be executed on
|
||||
// the browser process UI thread.
|
||||
///
|
||||
class Handler {
|
||||
public:
|
||||
typedef CefMessageRouterBrowserSide::Callback Callback;
|
||||
|
||||
///
|
||||
// Executed when a new query is received. |query_id| uniquely identifies the
|
||||
// query for the life span of the router. Return true to handle the query
|
||||
// or false to propagate the query to other registered handlers, if any. If
|
||||
// no handlers return true from this method then the query will be
|
||||
// automatically canceled with an error code of -1 delivered to the
|
||||
// JavaScript onFailure callback. If this method returns true then a
|
||||
// Callback method must be executed either in this method or asynchronously
|
||||
// to complete the query.
|
||||
///
|
||||
virtual bool OnQuery(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame,
|
||||
int64 query_id,
|
||||
const CefString& request,
|
||||
bool persistent,
|
||||
CefRefPtr<Callback> callback) {
|
||||
return false;
|
||||
}
|
||||
|
||||
///
|
||||
// Executed when a query has been canceled either explicitly using the
|
||||
// JavaScript cancel function or implicitly due to browser destruction,
|
||||
// navigation or renderer process termination. It will only be called for
|
||||
// the single handler that returned true from OnQuery for the same
|
||||
// |query_id|. No references to the associated Callback object should be
|
||||
// kept after this method is called, nor should any Callback methods be
|
||||
// executed.
|
||||
///
|
||||
virtual void OnQueryCanceled(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame,
|
||||
int64 query_id) {}
|
||||
|
||||
virtual ~Handler() {}
|
||||
};
|
||||
|
||||
///
|
||||
// Create a new router with the specified configuration.
|
||||
///
|
||||
static CefRefPtr<CefMessageRouterBrowserSide> Create(
|
||||
const CefMessageRouterConfig& config);
|
||||
|
||||
///
|
||||
// Add a new query handler. If |first| is true it will be added as the first
|
||||
// handler, otherwise it will be added as the last handler. Returns true if
|
||||
// the handler is added successfully or false if the handler has already been
|
||||
// added. Must be called on the browser process UI thread. The Handler object
|
||||
// must either outlive the router or be removed before deletion.
|
||||
///
|
||||
virtual bool AddHandler(Handler* handler, bool first) =0;
|
||||
|
||||
///
|
||||
// Remove an existing query handler. Any pending queries associated with the
|
||||
// handler will be canceled. Handler::OnQueryCanceled will be called and the
|
||||
// associated JavaScript onFailure callback will be executed with an error
|
||||
// code of -1. Returns true if the handler is removed successfully or false
|
||||
// if the handler is not found. Must be called on the browser process UI
|
||||
// thread.
|
||||
///
|
||||
virtual bool RemoveHandler(Handler* handler) =0;
|
||||
|
||||
///
|
||||
// Cancel all pending queries associated with either |browser| or |handler|.
|
||||
// If both |browser| and |handler| are NULL all pending queries will be
|
||||
// canceled. Handler::OnQueryCanceled will be called and the associated
|
||||
// JavaScript onFailure callback will be executed in all cases with an error
|
||||
// code of -1.
|
||||
///
|
||||
virtual void CancelPending(CefRefPtr<CefBrowser> browser,
|
||||
Handler* handler) =0;
|
||||
|
||||
///
|
||||
// Returns the number of queries currently pending for the specified |browser|
|
||||
// and/or |handler|. Either or both values may be empty. Must be called on the
|
||||
// browser process UI thread.
|
||||
///
|
||||
virtual int GetPendingCount(CefRefPtr<CefBrowser> browser,
|
||||
Handler* handler) =0;
|
||||
|
||||
|
||||
// The below methods should be called from other CEF handlers. They must be
|
||||
// called exactly as documented for the router to function correctly.
|
||||
|
||||
///
|
||||
// Call from CefLifeSpanHandler::OnBeforeClose. Any pending queries associated
|
||||
// with |browser| will be canceled and Handler::OnQueryCanceled will be called.
|
||||
// No JavaScript callbacks will be executed since this indicates destruction
|
||||
// of the browser.
|
||||
///
|
||||
virtual void OnBeforeClose(CefRefPtr<CefBrowser> browser) =0;
|
||||
|
||||
///
|
||||
// Call from CefRequestHandler::OnRenderProcessTerminated. Any pending queries
|
||||
// associated with |browser| will be canceled and Handler::OnQueryCanceled
|
||||
// will be called. No JavaScript callbacks will be executed since this
|
||||
// indicates destruction of the context.
|
||||
///
|
||||
virtual void OnRenderProcessTerminated(CefRefPtr<CefBrowser> browser) =0;
|
||||
|
||||
///
|
||||
// Call from CefRequestHandler::OnBeforeBrowse only if the navigation is
|
||||
// allowed to proceed. If |frame| is the main frame then any pending queries
|
||||
// associated with |browser| will be canceled and Handler::OnQueryCanceled
|
||||
// will be called. No JavaScript callbacks will be executed since this
|
||||
// indicates destruction of the context.
|
||||
///
|
||||
virtual void OnBeforeBrowse(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame) =0;
|
||||
|
||||
///
|
||||
// Call from CefClient::OnProcessMessageReceived. Returns true if the message
|
||||
// is handled by this router or false otherwise.
|
||||
///
|
||||
virtual bool OnProcessMessageReceived(
|
||||
CefRefPtr<CefBrowser> browser,
|
||||
CefProcessId source_process,
|
||||
CefRefPtr<CefProcessMessage> message) =0;
|
||||
|
||||
protected:
|
||||
// Protect against accidental deletion of this object.
|
||||
friend class base::RefCountedThreadSafe<CefMessageRouterBrowserSide>;
|
||||
virtual ~CefMessageRouterBrowserSide() {}
|
||||
};
|
||||
|
||||
///
|
||||
// Implements the renderer side of query routing. The methods of this class must
|
||||
// be called on the render process main thread.
|
||||
///
|
||||
class CefMessageRouterRendererSide :
|
||||
public base::RefCountedThreadSafe<CefMessageRouterRendererSide> {
|
||||
public:
|
||||
///
|
||||
// Create a new router with the specified configuration.
|
||||
///
|
||||
static CefRefPtr<CefMessageRouterRendererSide> Create(
|
||||
const CefMessageRouterConfig& config);
|
||||
|
||||
///
|
||||
// Returns the number of queries currently pending for the specified |browser|
|
||||
// and/or |context|. Either or both values may be empty.
|
||||
///
|
||||
virtual int GetPendingCount(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefV8Context> context) =0;
|
||||
|
||||
|
||||
// The below methods should be called from other CEF handlers. They must be
|
||||
// called exactly as documented for the router to function correctly.
|
||||
|
||||
///
|
||||
// Call from CefRenderProcessHandler::OnContextCreated. Registers the
|
||||
// JavaScripts functions with the new context.
|
||||
///
|
||||
virtual void OnContextCreated(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame,
|
||||
CefRefPtr<CefV8Context> context) =0;
|
||||
|
||||
///
|
||||
// Call from CefRenderProcessHandler::OnContextReleased. Any pending queries
|
||||
// associated with the released context will be canceled and
|
||||
// Handler::OnQueryCanceled will be called in the browser process.
|
||||
///
|
||||
virtual void OnContextReleased(CefRefPtr<CefBrowser> browser,
|
||||
CefRefPtr<CefFrame> frame,
|
||||
CefRefPtr<CefV8Context> context) =0;
|
||||
|
||||
///
|
||||
// Call from CefRenderProcessHandler::OnProcessMessageReceived. Returns true
|
||||
// if the message is handled by this router or false otherwise.
|
||||
///
|
||||
virtual bool OnProcessMessageReceived(
|
||||
CefRefPtr<CefBrowser> browser,
|
||||
CefProcessId source_process,
|
||||
CefRefPtr<CefProcessMessage> message) =0;
|
||||
|
||||
protected:
|
||||
// Protect against accidental deletion of this object.
|
||||
friend class base::RefCountedThreadSafe<CefMessageRouterRendererSide>;
|
||||
virtual ~CefMessageRouterRendererSide() {}
|
||||
};
|
||||
|
||||
#endif // CEF_INCLUDE_WRAPPER_CEF_MESSAGE_ROUTER_H_
|
104
include/wrapper/cef_stream_resource_handler.h
Normal file
104
include/wrapper/cef_stream_resource_handler.h
Normal file
@@ -0,0 +1,104 @@
|
||||
// Copyright (c) 2012 Marshall A. Greenblatt. All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the name Chromium Embedded
|
||||
// Framework nor the names of its contributors may be used to endorse
|
||||
// or promote products derived from this software without specific prior
|
||||
// written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// The contents of this file are only available to applications that link
|
||||
// against the libcef_dll_wrapper target.
|
||||
//
|
||||
|
||||
#ifndef CEF_INCLUDE_WRAPPER_CEF_STREAM_RESOURCE_HANDLER_H_
|
||||
#define CEF_INCLUDE_WRAPPER_CEF_STREAM_RESOURCE_HANDLER_H_
|
||||
#pragma once
|
||||
|
||||
#include "include/base/cef_macros.h"
|
||||
#include "include/base/cef_scoped_ptr.h"
|
||||
#include "include/cef_base.h"
|
||||
#include "include/cef_resource_handler.h"
|
||||
#include "include/cef_response.h"
|
||||
|
||||
class CefStreamReader;
|
||||
|
||||
///
|
||||
// Implementation of the CefResourceHandler class for reading from a CefStream.
|
||||
///
|
||||
class CefStreamResourceHandler : public CefResourceHandler {
|
||||
public:
|
||||
///
|
||||
// Create a new object with default response values.
|
||||
///
|
||||
CefStreamResourceHandler(const CefString& mime_type,
|
||||
CefRefPtr<CefStreamReader> stream);
|
||||
///
|
||||
// Create a new object with explicit response values.
|
||||
///
|
||||
CefStreamResourceHandler(int status_code,
|
||||
const CefString& status_text,
|
||||
const CefString& mime_type,
|
||||
CefResponse::HeaderMap header_map,
|
||||
CefRefPtr<CefStreamReader> stream);
|
||||
|
||||
virtual ~CefStreamResourceHandler();
|
||||
|
||||
// CefResourceHandler methods.
|
||||
virtual bool ProcessRequest(CefRefPtr<CefRequest> request,
|
||||
CefRefPtr<CefCallback> callback) OVERRIDE;
|
||||
virtual void GetResponseHeaders(CefRefPtr<CefResponse> response,
|
||||
int64& response_length,
|
||||
CefString& redirectUrl) OVERRIDE;
|
||||
virtual bool ReadResponse(void* data_out,
|
||||
int bytes_to_read,
|
||||
int& bytes_read,
|
||||
CefRefPtr<CefCallback> callback) OVERRIDE;
|
||||
virtual void Cancel() OVERRIDE;
|
||||
|
||||
private:
|
||||
void ReadOnFileThread(int bytes_to_read,
|
||||
CefRefPtr<CefCallback> callback);
|
||||
|
||||
const int status_code_;
|
||||
const CefString status_text_;
|
||||
const CefString mime_type_;
|
||||
const CefResponse::HeaderMap header_map_;
|
||||
const CefRefPtr<CefStreamReader> stream_;
|
||||
bool read_on_file_thread_;
|
||||
|
||||
class Buffer;
|
||||
scoped_ptr<Buffer> buffer_;
|
||||
#ifndef NDEBUG
|
||||
// Used in debug builds to verify that |buffer_| isn't being accessed on
|
||||
// multiple threads at the same time.
|
||||
bool buffer_owned_by_file_thread_;
|
||||
#endif
|
||||
|
||||
IMPLEMENT_REFCOUNTING(CefStreamResourceHandler);
|
||||
DISALLOW_COPY_AND_ASSIGN(CefStreamResourceHandler);
|
||||
};
|
||||
|
||||
#endif // CEF_INCLUDE_WRAPPER_CEF_STREAM_RESOURCE_HANDLER_H_
|
196
include/wrapper/cef_xml_object.h
Normal file
196
include/wrapper/cef_xml_object.h
Normal file
@@ -0,0 +1,196 @@
|
||||
// Copyright (c) 2011 Marshall A. Greenblatt. All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the name Chromium Embedded
|
||||
// Framework nor the names of its contributors may be used to endorse
|
||||
// or promote products derived from this software without specific prior
|
||||
// written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// The contents of this file are only available to applications that link
|
||||
// against the libcef_dll_wrapper target.
|
||||
//
|
||||
|
||||
#ifndef CEF_INCLUDE_WRAPPER_CEF_XML_OBJECT_H_
|
||||
#define CEF_INCLUDE_WRAPPER_CEF_XML_OBJECT_H_
|
||||
#pragma once
|
||||
|
||||
#include <map>
|
||||
#include <vector>
|
||||
|
||||
#include "include/base/cef_lock.h"
|
||||
#include "include/base/cef_macros.h"
|
||||
#include "include/base/cef_ref_counted.h"
|
||||
#include "include/cef_base.h"
|
||||
#include "include/cef_xml_reader.h"
|
||||
|
||||
class CefStreamReader;
|
||||
|
||||
///
|
||||
// Thread safe class for representing XML data as a structured object. This
|
||||
// class should not be used with large XML documents because all data will be
|
||||
// resident in memory at the same time. This implementation supports a
|
||||
// restricted set of XML features:
|
||||
// <pre>
|
||||
// (1) Processing instructions, whitespace and comments are ignored.
|
||||
// (2) Elements and attributes must always be referenced using the fully
|
||||
// qualified name (ie, namespace:localname).
|
||||
// (3) Empty elements (<a/>) and elements with zero-length values (<a></a>)
|
||||
// are considered the same.
|
||||
// (4) Element nodes are considered part of a value if:
|
||||
// (a) The element node follows a non-element node at the same depth
|
||||
// (see 5), or
|
||||
// (b) The element node does not have a namespace and the parent node does.
|
||||
// (5) Mixed node types at the same depth are combined into a single element
|
||||
// value as follows:
|
||||
// (a) All node values are concatenated to form a single string value.
|
||||
// (b) Entity reference nodes are resolved to the corresponding entity
|
||||
// value.
|
||||
// (c) Element nodes are represented by their outer XML string.
|
||||
// </pre>
|
||||
///
|
||||
class CefXmlObject : public base::RefCountedThreadSafe<CefXmlObject> {
|
||||
public:
|
||||
typedef std::vector<CefRefPtr<CefXmlObject> > ObjectVector;
|
||||
typedef std::map<CefString, CefString > AttributeMap;
|
||||
|
||||
///
|
||||
// Create a new object with the specified name. An object name must always be
|
||||
// at least one character long.
|
||||
///
|
||||
explicit CefXmlObject(const CefString& name);
|
||||
|
||||
///
|
||||
// Load the contents of the specified XML stream into this object. The
|
||||
// existing children and attributes, if any, will first be cleared.
|
||||
///
|
||||
bool Load(CefRefPtr<CefStreamReader> stream,
|
||||
CefXmlReader::EncodingType encodingType,
|
||||
const CefString& URI, CefString* loadError);
|
||||
|
||||
///
|
||||
// Set the name, children and attributes of this object to a duplicate of the
|
||||
// specified object's contents. The existing children and attributes, if any,
|
||||
// will first be cleared.
|
||||
///
|
||||
void Set(CefRefPtr<CefXmlObject> object);
|
||||
|
||||
///
|
||||
// Append a duplicate of the children and attributes of the specified object
|
||||
// to this object. If |overwriteAttributes| is true then any attributes in
|
||||
// this object that also exist in the specified object will be overwritten
|
||||
// with the new values. The name of this object is not changed.
|
||||
///
|
||||
void Append(CefRefPtr<CefXmlObject> object, bool overwriteAttributes);
|
||||
|
||||
///
|
||||
// Return a new object with the same name, children and attributes as this
|
||||
// object. The parent of the new object will be NULL.
|
||||
///
|
||||
CefRefPtr<CefXmlObject> Duplicate();
|
||||
|
||||
///
|
||||
// Clears this object's children and attributes. The name and parenting of
|
||||
// this object are not changed.
|
||||
///
|
||||
void Clear();
|
||||
|
||||
///
|
||||
// Access the object's name. An object name must always be at least one
|
||||
// character long.
|
||||
///
|
||||
CefString GetName();
|
||||
bool SetName(const CefString& name);
|
||||
|
||||
///
|
||||
// Access the object's parent. The parent can be NULL if this object has not
|
||||
// been added as the child on another object.
|
||||
///
|
||||
bool HasParent();
|
||||
CefRefPtr<CefXmlObject> GetParent();
|
||||
|
||||
///
|
||||
// Access the object's value. An object cannot have a value if it also has
|
||||
// children. Attempting to set the value while children exist will fail.
|
||||
///
|
||||
bool HasValue();
|
||||
CefString GetValue();
|
||||
bool SetValue(const CefString& value);
|
||||
|
||||
///
|
||||
// Access the object's attributes. Attributes must have unique names.
|
||||
///
|
||||
bool HasAttributes();
|
||||
size_t GetAttributeCount();
|
||||
bool HasAttribute(const CefString& name);
|
||||
CefString GetAttributeValue(const CefString& name);
|
||||
bool SetAttributeValue(const CefString& name, const CefString& value);
|
||||
size_t GetAttributes(AttributeMap& attributes);
|
||||
void ClearAttributes();
|
||||
|
||||
///
|
||||
// Access the object's children. Each object can only have one parent so
|
||||
// attempting to add an object that already has a parent will fail. Removing a
|
||||
// child will set the child's parent to NULL. Adding a child will set the
|
||||
// child's parent to this object. This object's value, if any, will be cleared
|
||||
// if a child is added.
|
||||
///
|
||||
bool HasChildren();
|
||||
size_t GetChildCount();
|
||||
bool HasChild(CefRefPtr<CefXmlObject> child);
|
||||
bool AddChild(CefRefPtr<CefXmlObject> child);
|
||||
bool RemoveChild(CefRefPtr<CefXmlObject> child);
|
||||
size_t GetChildren(ObjectVector& children);
|
||||
void ClearChildren();
|
||||
|
||||
///
|
||||
// Find the first child with the specified name.
|
||||
///
|
||||
CefRefPtr<CefXmlObject> FindChild(const CefString& name);
|
||||
|
||||
///
|
||||
// Find all children with the specified name.
|
||||
///
|
||||
size_t FindChildren(const CefString& name, ObjectVector& children);
|
||||
|
||||
private:
|
||||
// Protect against accidental deletion of this object.
|
||||
friend class base::RefCountedThreadSafe<CefXmlObject>;
|
||||
~CefXmlObject();
|
||||
|
||||
void SetParent(CefXmlObject* parent);
|
||||
|
||||
CefString name_;
|
||||
CefXmlObject* parent_;
|
||||
CefString value_;
|
||||
AttributeMap attributes_;
|
||||
ObjectVector children_;
|
||||
|
||||
base::Lock lock_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(CefXmlObject);
|
||||
};
|
||||
|
||||
#endif // CEF_INCLUDE_WRAPPER_CEF_XML_OBJECT_H_
|
143
include/wrapper/cef_zip_archive.h
Normal file
143
include/wrapper/cef_zip_archive.h
Normal file
@@ -0,0 +1,143 @@
|
||||
// Copyright (c) 2011 Marshall A. Greenblatt. All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the name Chromium Embedded
|
||||
// Framework nor the names of its contributors may be used to endorse
|
||||
// or promote products derived from this software without specific prior
|
||||
// written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// The contents of this file are only available to applications that link
|
||||
// against the libcef_dll_wrapper target.
|
||||
//
|
||||
|
||||
#ifndef CEF_INCLUDE_WRAPPER_CEF_ZIP_ARCHIVE_H_
|
||||
#define CEF_INCLUDE_WRAPPER_CEF_ZIP_ARCHIVE_H_
|
||||
#pragma once
|
||||
|
||||
#include <map>
|
||||
|
||||
#include "include/base/cef_lock.h"
|
||||
#include "include/base/cef_macros.h"
|
||||
#include "include/base/cef_ref_counted.h"
|
||||
#include "include/cef_base.h"
|
||||
|
||||
class CefStreamReader;
|
||||
|
||||
///
|
||||
// Thread-safe class for accessing zip archive file contents. This class should
|
||||
// not be used with large archive files because all data will be resident in
|
||||
// memory at the same time. This implementation supports a restricted set of zip
|
||||
// archive features:
|
||||
// (1) All file names are stored and compared in lower case.
|
||||
// (2) File ordering from the original zip archive is not maintained. This
|
||||
// means that files from the same folder may not be located together in the
|
||||
// file content map.
|
||||
///
|
||||
class CefZipArchive : public base::RefCountedThreadSafe<CefZipArchive> {
|
||||
public:
|
||||
///
|
||||
// Class representing a file in the archive. Accessing the file data from
|
||||
// multiple threads is safe provided a reference to the File object is kept.
|
||||
///
|
||||
class File : public CefBase {
|
||||
public:
|
||||
///
|
||||
// Returns the read-only data contained in the file.
|
||||
///
|
||||
virtual const unsigned char* GetData() const =0;
|
||||
|
||||
///
|
||||
// Returns the size of the data in the file.
|
||||
///
|
||||
virtual size_t GetDataSize() const =0;
|
||||
|
||||
///
|
||||
// Returns a CefStreamReader object for streaming the contents of the file.
|
||||
///
|
||||
virtual CefRefPtr<CefStreamReader> GetStreamReader() const =0;
|
||||
};
|
||||
|
||||
typedef std::map<CefString, CefRefPtr<File> > FileMap;
|
||||
|
||||
///
|
||||
// Create a new object.
|
||||
///
|
||||
CefZipArchive();
|
||||
|
||||
///
|
||||
// Load the contents of the specified zip archive stream into this object.
|
||||
// If the zip archive requires a password then provide it via |password|.
|
||||
// If |overwriteExisting| is true then any files in this object that also
|
||||
// exist in the specified archive will be replaced with the new files.
|
||||
// Returns the number of files successfully loaded.
|
||||
///
|
||||
size_t Load(CefRefPtr<CefStreamReader> stream,
|
||||
const CefString& password,
|
||||
bool overwriteExisting);
|
||||
|
||||
///
|
||||
// Clears the contents of this object.
|
||||
///
|
||||
void Clear();
|
||||
|
||||
///
|
||||
// Returns the number of files in the archive.
|
||||
///
|
||||
size_t GetFileCount() const;
|
||||
|
||||
///
|
||||
// Returns true if the specified file exists and has contents.
|
||||
///
|
||||
bool HasFile(const CefString& fileName) const;
|
||||
|
||||
///
|
||||
// Returns the specified file.
|
||||
///
|
||||
CefRefPtr<File> GetFile(const CefString& fileName) const;
|
||||
|
||||
///
|
||||
// Removes the specified file.
|
||||
///
|
||||
bool RemoveFile(const CefString& fileName);
|
||||
|
||||
///
|
||||
// Returns the map of all files.
|
||||
///
|
||||
size_t GetFiles(FileMap& map) const;
|
||||
|
||||
private:
|
||||
// Protect against accidental deletion of this object.
|
||||
friend class base::RefCountedThreadSafe<CefZipArchive>;
|
||||
~CefZipArchive();
|
||||
|
||||
FileMap contents_;
|
||||
|
||||
mutable base::Lock lock_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(CefZipArchive);
|
||||
};
|
||||
|
||||
#endif // CEF_INCLUDE_WRAPPER_CEF_ZIP_ARCHIVE_H_
|
Reference in New Issue
Block a user