mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-02-02 12:17:15 +01:00
Update to Chromium revision 194165.
git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@1221 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
parent
414befcd92
commit
bb6eeee686
@ -17,5 +17,5 @@
|
||||
|
||||
{
|
||||
'chromium_url': 'http://src.chromium.org/svn/trunk/src',
|
||||
'chromium_revision': '190564',
|
||||
'chromium_revision': '194165',
|
||||
}
|
||||
|
6
cef.gyp
6
cef.gyp
@ -771,6 +771,7 @@
|
||||
# CEF grit resource includes
|
||||
'<(grit_out_dir)',
|
||||
'<(SHARED_INTERMEDIATE_DIR)/ui/ui_strings',
|
||||
'<(SHARED_INTERMEDIATE_DIR)/webkit',
|
||||
],
|
||||
'dependencies': [
|
||||
'<(DEPTH)/content/content.gyp:content_app',
|
||||
@ -963,11 +964,6 @@
|
||||
'libcef/renderer/webkit_glue.h',
|
||||
'<(DEPTH)/chrome/common/chrome_switches.cc',
|
||||
'<(DEPTH)/chrome/common/chrome_switches.h',
|
||||
# Include sources for persistent cookie storage.
|
||||
'<(DEPTH)/chrome/browser/net/clear_on_exit_policy.cc',
|
||||
'<(DEPTH)/chrome/browser/net/clear_on_exit_policy.h',
|
||||
'<(DEPTH)/chrome/browser/net/sqlite_persistent_cookie_store.cc',
|
||||
'<(DEPTH)/chrome/browser/net/sqlite_persistent_cookie_store.h',
|
||||
# Include sources for proxy support.
|
||||
'<(DEPTH)/base/prefs/testing_pref_store.cc',
|
||||
'<(DEPTH)/base/prefs/testing_pref_store.h',
|
||||
|
@ -528,12 +528,6 @@ typedef struct _cef_browser_settings_t {
|
||||
// "disable-accelerated-compositing" command-line switch.
|
||||
///
|
||||
cef_state_t accelerated_compositing;
|
||||
|
||||
///
|
||||
// Controls whether developer tools (WebKit inspector) can be used. Also
|
||||
// configurable using the "disable-developer-tools" command-line switch.
|
||||
///
|
||||
cef_state_t developer_tools;
|
||||
} cef_browser_settings_t;
|
||||
|
||||
///
|
||||
@ -1347,9 +1341,7 @@ enum cef_dom_event_category_t {
|
||||
DOM_EVENT_CATEGORY_POPSTATE = 0x2000,
|
||||
DOM_EVENT_CATEGORY_PROGRESS = 0x4000,
|
||||
DOM_EVENT_CATEGORY_XMLHTTPREQUEST_PROGRESS = 0x8000,
|
||||
DOM_EVENT_CATEGORY_WEBKIT_ANIMATION = 0x10000,
|
||||
DOM_EVENT_CATEGORY_WEBKIT_TRANSITION = 0x20000,
|
||||
DOM_EVENT_CATEGORY_BEFORE_LOAD = 0x40000,
|
||||
DOM_EVENT_CATEGORY_BEFORE_LOAD = 0x10000,
|
||||
};
|
||||
|
||||
///
|
||||
|
@ -402,7 +402,6 @@ struct CefBrowserSettingsTraits {
|
||||
target->application_cache = src->application_cache;
|
||||
target->webgl = src->webgl;
|
||||
target->accelerated_compositing = src->accelerated_compositing;
|
||||
target->developer_tools = src->developer_tools;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
#include "base/file_util.h"
|
||||
#include "base/mac/mac_util.h"
|
||||
#include "base/string_util.h"
|
||||
#include "base/sys_string_conversions.h"
|
||||
#include "base/strings/sys_string_conversions.h"
|
||||
#include "base/threading/thread_restrictions.h"
|
||||
#include "content/public/browser/native_web_keyboard_event.h"
|
||||
#include "content/public/browser/web_contents.h"
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "libcef/browser/browser_message_loop.h"
|
||||
#include "libcef/browser/context.h"
|
||||
#include "libcef/browser/devtools_delegate.h"
|
||||
#include "libcef/common/content_client.h"
|
||||
|
||||
#include "base/bind.h"
|
||||
#include "base/command_line.h"
|
||||
@ -19,7 +20,6 @@
|
||||
#include "content/browser/webui/content_web_ui_controller_factory.h"
|
||||
#include "content/public/browser/gpu_data_manager.h"
|
||||
#include "content/public/browser/web_ui_controller_factory.h"
|
||||
#include "content/public/common/content_client.h"
|
||||
#include "content/public/common/content_switches.h"
|
||||
#include "net/base/net_module.h"
|
||||
#include "net/proxy/proxy_resolver_v8.h"
|
||||
@ -29,8 +29,8 @@
|
||||
namespace {
|
||||
|
||||
base::StringPiece ResourceProvider(int resource_id) {
|
||||
return content::GetContentClient()->GetDataResource(resource_id,
|
||||
ui::SCALE_FACTOR_NONE);
|
||||
return CefContentClient::Get()->GetDataResource(resource_id,
|
||||
ui::SCALE_FACTOR_NONE);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
@ -46,7 +46,7 @@ CefBrowserMainParts::~CefBrowserMainParts() {
|
||||
}
|
||||
|
||||
void CefBrowserMainParts::PreMainMessageLoopStart() {
|
||||
if (!MessageLoop::current()) {
|
||||
if (!base::MessageLoop::current()) {
|
||||
// Create the browser message loop.
|
||||
message_loop_.reset(new CefBrowserMessageLoop());
|
||||
message_loop_->set_thread_name("CrBrowserMain");
|
||||
|
@ -11,12 +11,13 @@
|
||||
#include "base/basictypes.h"
|
||||
#include "base/memory/scoped_ptr.h"
|
||||
#include "base/prefs/pref_service.h"
|
||||
#include "base/string_piece.h"
|
||||
#include "base/strings/string_piece.h"
|
||||
#include "chrome/browser/net/pref_proxy_config_tracker.h"
|
||||
#include "content/public/browser/browser_main_parts.h"
|
||||
#include "net/proxy/proxy_config_service.h"
|
||||
|
||||
namespace base {
|
||||
class MessageLoop;
|
||||
class Thread;
|
||||
}
|
||||
|
||||
@ -30,7 +31,6 @@ class Isolate;
|
||||
|
||||
class CefBrowserContext;
|
||||
class CefDevToolsDelegate;
|
||||
class MessageLoop;
|
||||
|
||||
class CefBrowserMainParts : public content::BrowserMainParts {
|
||||
public:
|
||||
@ -57,7 +57,7 @@ class CefBrowserMainParts : public content::BrowserMainParts {
|
||||
|
||||
scoped_ptr<CefBrowserContext> browser_context_;
|
||||
CefDevToolsDelegate* devtools_delegate_;
|
||||
scoped_ptr<MessageLoop> message_loop_;
|
||||
scoped_ptr<base::MessageLoop> message_loop_;
|
||||
scoped_ptr<PrefProxyConfigTracker> pref_proxy_config_tracker_;
|
||||
scoped_ptr<net::ProxyConfigService> proxy_config_service_;
|
||||
scoped_refptr<CefBrowserPrefStore> pref_store_;
|
||||
|
@ -6,8 +6,6 @@
|
||||
|
||||
#include "libcef/browser/browser_main.h"
|
||||
|
||||
#include "base/string_piece.h"
|
||||
|
||||
void CefBrowserMainParts::PlatformInitialize() {
|
||||
}
|
||||
|
||||
|
@ -4,8 +4,6 @@
|
||||
|
||||
#include "libcef/browser/browser_main.h"
|
||||
|
||||
#include "base/string_piece.h"
|
||||
|
||||
void CefBrowserMainParts::PlatformInitialize() {
|
||||
}
|
||||
|
||||
|
@ -9,9 +9,6 @@
|
||||
#include "libcef/browser/browser_host_impl.h"
|
||||
#include "libcef/browser/browser_main.h"
|
||||
|
||||
#include "base/string_piece.h"
|
||||
#include "base/win/resource_util.h"
|
||||
|
||||
void CefBrowserMainParts::PlatformInitialize() {
|
||||
HRESULT res;
|
||||
|
||||
|
@ -13,8 +13,8 @@ CefBrowserMessageLoop::~CefBrowserMessageLoop() {
|
||||
|
||||
// static
|
||||
CefBrowserMessageLoop* CefBrowserMessageLoop::current() {
|
||||
MessageLoop* loop = MessageLoop::current();
|
||||
DCHECK_EQ(MessageLoop::TYPE_UI, loop->type());
|
||||
base::MessageLoop* loop = base::MessageLoop::current();
|
||||
DCHECK_EQ(base::MessageLoop::TYPE_UI, loop->type());
|
||||
return static_cast<CefBrowserMessageLoop*>(loop);
|
||||
}
|
||||
|
||||
|
@ -53,8 +53,6 @@ void SetDefaults(WebPreferences& web) {
|
||||
!command_line.HasSwitch(switches::kDisableTabToLinks);
|
||||
web.author_and_user_styles_enabled =
|
||||
!command_line.HasSwitch(switches::kDisableAuthorAndUserStyles);
|
||||
web.developer_extras_enabled =
|
||||
!command_line.HasSwitch(switches::kDisableDeveloperTools);
|
||||
}
|
||||
|
||||
// Helper macro for setting a WebPreferences variable based on the value of a
|
||||
@ -147,6 +145,4 @@ void BrowserToWebSettings(const CefBrowserSettings& cef, WebPreferences& web) {
|
||||
web.experimental_webgl_enabled = false;
|
||||
if (cef.accelerated_compositing == STATE_DISABLED)
|
||||
web.accelerated_compositing_enabled = false;
|
||||
|
||||
SET_STATE(cef.developer_tools, web.developer_extras_enabled);
|
||||
}
|
||||
|
@ -64,7 +64,7 @@ class CefBrowserURLRequest::Context
|
||||
: url_request_(url_request),
|
||||
request_(request),
|
||||
client_(client),
|
||||
message_loop_proxy_(MessageLoop::current()->message_loop_proxy()),
|
||||
message_loop_proxy_(base::MessageLoop::current()->message_loop_proxy()),
|
||||
status_(UR_IO_PENDING),
|
||||
error_code_(ERR_NONE),
|
||||
upload_data_size_(0),
|
||||
|
@ -16,6 +16,8 @@
|
||||
#include "libcef/browser/internal_scheme_handler.h"
|
||||
#include "libcef/browser/scheme_impl.h"
|
||||
#include "libcef/browser/thread_util.h"
|
||||
#include "libcef/browser/trace_subscriber.h"
|
||||
#include "libcef/common/content_client.h"
|
||||
|
||||
#include "base/command_line.h"
|
||||
#include "base/file_util.h"
|
||||
@ -27,7 +29,6 @@
|
||||
#include "base/values.h"
|
||||
#include "content/browser/net/view_http_cache_job_factory.h"
|
||||
#include "content/browser/net/view_blob_internals_job_factory.h"
|
||||
#include "content/public/common/content_client.h"
|
||||
#include "content/public/common/url_constants.h"
|
||||
#include "grit/cef_resources.h"
|
||||
#include "ipc/ipc_channel.h"
|
||||
@ -236,7 +237,7 @@ class Delegate : public InternalHandlerDelegate {
|
||||
}
|
||||
|
||||
bool OnLicense(Action* action) {
|
||||
base::StringPiece piece = content::GetContentClient()->GetDataResource(
|
||||
base::StringPiece piece = CefContentClient::Get()->GetDataResource(
|
||||
IDR_CEF_LICENSE_TXT, ui::SCALE_FACTOR_NONE);
|
||||
if (piece.empty()) {
|
||||
NOTREACHED() << "Failed to load license txt resource.";
|
||||
@ -265,7 +266,7 @@ class Delegate : public InternalHandlerDelegate {
|
||||
}
|
||||
|
||||
bool OnVersion(Action* action) {
|
||||
base::StringPiece piece = content::GetContentClient()->GetDataResource(
|
||||
base::StringPiece piece = CefContentClient::Get()->GetDataResource(
|
||||
IDR_CEF_VERSION_HTML, ui::SCALE_FACTOR_NONE);
|
||||
if (piece.empty()) {
|
||||
NOTREACHED() << "Failed to load version html resource.";
|
||||
@ -439,6 +440,28 @@ void SaveTraceFile(CefRefPtr<CefFrameHostImpl> frame,
|
||||
}
|
||||
}
|
||||
|
||||
void OnKnownCategoriesCollected(
|
||||
CefRefPtr<CefFrameHostImpl> frame,
|
||||
const std::set<std::string>& known_categories) {
|
||||
CEF_REQUIRE_UIT();
|
||||
|
||||
if (!IsTraceFrameValid(frame))
|
||||
return;
|
||||
|
||||
std::string categories;
|
||||
for (std::set<std::string>::iterator iter = known_categories.begin();
|
||||
iter != known_categories.end();
|
||||
++iter) {
|
||||
if (categories.length() > 0)
|
||||
categories += ",";
|
||||
categories += "\"" + *iter + "\"";
|
||||
}
|
||||
|
||||
frame->SendJavaScript(
|
||||
"tracingController.onKnownCategoriesCollected([" + categories + "]);",
|
||||
std::string(), 0);
|
||||
}
|
||||
|
||||
void OnChromeTracingProcessMessage(CefRefPtr<CefBrowser> browser,
|
||||
const std::string& action,
|
||||
const base::ListValue* arguments) {
|
||||
@ -594,6 +617,9 @@ void OnChromeTracingProcessMessage(CefRefPtr<CefBrowser> browser,
|
||||
browser->GetHost()->RunFileDialog(FILE_DIALOG_SAVE, CefString(),
|
||||
CefString(), std::vector<CefString>(),
|
||||
new Callback(frame, contents.Pass()));
|
||||
} else if (action == "getKnownCategories") {
|
||||
_Context->GetTraceSubscriber()->GetKnownCategoriesAsync(
|
||||
base::Bind(OnKnownCategoriesCollected, frame));
|
||||
} else {
|
||||
NOTREACHED() << "Unknown trace action: " << action.c_str();
|
||||
}
|
||||
@ -615,14 +641,14 @@ class ChromeProtocolHandlerWrapper :
|
||||
// Keep synchronized with the checks in ChromeProtocolHandler::MaybeCreateJob.
|
||||
if (content::ViewHttpCacheJobFactory::IsSupportedURL(request->url()) ||
|
||||
(request->url().SchemeIs(chrome::kChromeUIScheme) &&
|
||||
request->url().host() == chrome::kChromeUIAppCacheInternalsHost) ||
|
||||
request->url().host() == content::kChromeUIAppCacheInternalsHost) ||
|
||||
content::ViewBlobInternalsJobFactory::IsSupportedURL(request->url()) ||
|
||||
#if defined(USE_TCMALLOC)
|
||||
(request->url().SchemeIs(chrome::kChromeUIScheme) &&
|
||||
request->url().host() == chrome::kChromeUITcmallocHost) ||
|
||||
request->url().host() == content::kChromeUITcmallocHost) ||
|
||||
#endif
|
||||
(request->url().SchemeIs(chrome::kChromeUIScheme) &&
|
||||
request->url().host() == chrome::kChromeUIHistogramHost)) {
|
||||
request->url().host() == content::kChromeUIHistogramHost)) {
|
||||
return chrome_protocol_handler_->MaybeCreateJob(request, network_delegate);
|
||||
}
|
||||
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "libcef/browser/web_plugin_impl.h"
|
||||
#include "libcef/common/cef_switches.h"
|
||||
#include "libcef/common/command_line_impl.h"
|
||||
#include "libcef/common/content_client.h"
|
||||
|
||||
#include "base/command_line.h"
|
||||
#include "base/files/file_path.h"
|
||||
@ -263,7 +264,7 @@ CefContentBrowserClient::~CefContentBrowserClient() {
|
||||
// static
|
||||
CefContentBrowserClient* CefContentBrowserClient::Get() {
|
||||
return static_cast<CefContentBrowserClient*>(
|
||||
content::GetContentClient()->browser());
|
||||
CefContentClient::Get()->browser());
|
||||
}
|
||||
|
||||
scoped_refptr<CefBrowserInfo> CefContentBrowserClient::CreateBrowserInfo() {
|
||||
|
@ -19,7 +19,7 @@
|
||||
#include "base/format_macros.h"
|
||||
#include "base/logging.h"
|
||||
#include "base/threading/thread_restrictions.h"
|
||||
#include "chrome/browser/net/sqlite_persistent_cookie_store.h"
|
||||
#include "content/browser/net/sqlite_persistent_cookie_store.h"
|
||||
#include "googleurl/src/gurl.h"
|
||||
#include "net/cookies/cookie_util.h"
|
||||
#include "net/cookies/parsed_cookie.h"
|
||||
@ -279,7 +279,7 @@ bool CefCookieManagerImpl::SetStoragePath(
|
||||
return true;
|
||||
}
|
||||
|
||||
scoped_refptr<SQLitePersistentCookieStore> persistent_store;
|
||||
scoped_refptr<content::SQLitePersistentCookieStore> persistent_store;
|
||||
if (!new_path.empty()) {
|
||||
// TODO(cef): Move directory creation to the blocking pool instead of
|
||||
// allowing file IO on this thread.
|
||||
@ -288,7 +288,7 @@ bool CefCookieManagerImpl::SetStoragePath(
|
||||
file_util::CreateDirectory(new_path)) {
|
||||
const base::FilePath& cookie_path = new_path.AppendASCII("Cookies");
|
||||
persistent_store =
|
||||
new SQLitePersistentCookieStore(
|
||||
new content::SQLitePersistentCookieStore(
|
||||
cookie_path,
|
||||
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO),
|
||||
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB),
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
#include "libcef/browser/devtools_delegate.h"
|
||||
#include "libcef/browser/devtools_scheme_handler.h"
|
||||
#include "libcef/common/content_client.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
@ -17,11 +18,10 @@
|
||||
#include "content/public/browser/devtools_http_handler.h"
|
||||
#include "content/public/browser/render_process_host.h"
|
||||
#include "content/public/browser/render_view_host.h"
|
||||
#include "content/public/common/content_client.h"
|
||||
#include "content/public/common/content_switches.h"
|
||||
#include "content/public/common/url_constants.h"
|
||||
#include "grit/cef_resources.h"
|
||||
#include "net/base/tcp_listen_socket.h"
|
||||
#include "net/socket/tcp_listen_socket.h"
|
||||
#include "ui/base/layout.h"
|
||||
#include "ui/base/resource/resource_bundle.h"
|
||||
|
||||
@ -138,7 +138,7 @@ void CefDevToolsDelegate::Stop() {
|
||||
}
|
||||
|
||||
std::string CefDevToolsDelegate::GetDiscoveryPageHTML() {
|
||||
return content::GetContentClient()->GetDataResource(
|
||||
return CefContentClient::Get()->GetDataResource(
|
||||
IDR_CEF_DEVTOOLS_DISCOVERY_PAGE, ui::SCALE_FACTOR_NONE).as_string();
|
||||
}
|
||||
|
||||
|
@ -5,8 +5,8 @@
|
||||
|
||||
#include "libcef/browser/internal_scheme_handler.h"
|
||||
#include <string>
|
||||
#include "libcef/common/content_client.h"
|
||||
#include "base/string_util.h"
|
||||
#include "content/public/common/content_client.h"
|
||||
#include "ui/base/resource/resource_bundle.h"
|
||||
|
||||
namespace scheme {
|
||||
@ -133,7 +133,7 @@ class InternalHandlerFactory : public CefSchemeHandlerFactory {
|
||||
action.mime_type = GetMimeType(url.path());
|
||||
|
||||
if (action.resource_id >= 0) {
|
||||
base::StringPiece piece = content::GetContentClient()->GetDataResource(
|
||||
base::StringPiece piece = CefContentClient::Get()->GetDataResource(
|
||||
action.resource_id, ui::SCALE_FACTOR_NONE);
|
||||
if (!piece.empty()) {
|
||||
action.stream =
|
||||
|
@ -9,7 +9,7 @@
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
#import "base/memory/scoped_nsobject.h"
|
||||
#include "base/sys_string_conversions.h"
|
||||
#include "base/strings/sys_string_conversions.h"
|
||||
#include "base/utf_string_conversions.h"
|
||||
|
||||
// Helper object that receives the notification that the dialog/sheet is
|
||||
|
@ -5,12 +5,12 @@
|
||||
#include "libcef/browser/menu_creator.h"
|
||||
#include "libcef/browser/browser_host_impl.h"
|
||||
#include "libcef/browser/context_menu_params_impl.h"
|
||||
#include "libcef/common/content_client.h"
|
||||
|
||||
#include "base/compiler_specific.h"
|
||||
#include "base/logging.h"
|
||||
#include "content/public/browser/render_view_host.h"
|
||||
#include "content/public/browser/render_widget_host_view.h"
|
||||
#include "content/public/common/content_client.h"
|
||||
#include "grit/cef_strings.h"
|
||||
|
||||
#if defined(OS_WIN)
|
||||
@ -24,7 +24,7 @@
|
||||
namespace {
|
||||
|
||||
CefString GetLabel(int message_id) {
|
||||
string16 label = content::GetContentClient()->GetLocalizedString(message_id);
|
||||
string16 label = CefContentClient::Get()->GetLocalizedString(message_id);
|
||||
DCHECK(!label.empty());
|
||||
return label;
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ bool CefMenuCreatorRunnerMac::RunContextMenu(CefMenuCreator* manager) {
|
||||
|
||||
{
|
||||
// Make sure events can be pumped while the menu is up.
|
||||
MessageLoop::ScopedNestableTaskAllower allow(MessageLoop::current());
|
||||
MessageLoop::ScopedNestableTaskAllower allow(base::MessageLoop::current());
|
||||
|
||||
// One of the events that could be pumped is |window.close()|.
|
||||
// User-initiated event-tracking loops protect against this by
|
||||
|
@ -19,7 +19,7 @@ bool CefMenuCreatorRunnerWin::RunContextMenu(CefMenuCreator* manager) {
|
||||
menu_->Rebuild(NULL);
|
||||
|
||||
// Make sure events can be pumped while the menu is up.
|
||||
MessageLoop::ScopedNestableTaskAllower allow(MessageLoop::current());
|
||||
MessageLoop::ScopedNestableTaskAllower allow(base::MessageLoop::current());
|
||||
|
||||
gfx::Point screen_point;
|
||||
|
||||
|
@ -636,7 +636,7 @@ void CefMenuModelImpl::MenuClosed() {
|
||||
// Due to how menus work on the different platforms, ActivatedAt will be
|
||||
// called after this. It's more convenient for the delegate to be called
|
||||
// afterwards, though, so post a task.
|
||||
MessageLoop::current()->PostTask(
|
||||
base::MessageLoop::current()->PostTask(
|
||||
FROM_HERE,
|
||||
base::Bind(&CefMenuModelImpl::OnMenuClosed, this));
|
||||
}
|
||||
|
@ -6,12 +6,12 @@
|
||||
#include "libcef/browser/backing_store_osr.h"
|
||||
#include "libcef/browser/browser_host_impl.h"
|
||||
#include "libcef/browser/render_widget_host_view_osr.h"
|
||||
#include "libcef/common/content_client.h"
|
||||
|
||||
#include "base/message_loop.h"
|
||||
#include "content/browser/renderer_host/render_widget_host_impl.h"
|
||||
#include "content/public/browser/content_browser_client.h"
|
||||
#include "content/public/browser/render_view_host.h"
|
||||
#include "content/public/common/content_client.h"
|
||||
#include "third_party/WebKit/Source/WebKit/chromium/public/WebScreenInfo.h"
|
||||
|
||||
#if defined(OS_WIN)
|
||||
@ -158,7 +158,7 @@ void CefRenderWidgetHostViewOSR::UpdateCursor(const WebCursor& cursor) {
|
||||
return;
|
||||
#if defined(OS_WIN)
|
||||
HMODULE hModule = ::GetModuleHandle(
|
||||
content::GetContentClient()->browser()->GetResourceDllName());
|
||||
CefContentClient::Get()->browser()->GetResourceDllName());
|
||||
if (!hModule)
|
||||
hModule = ::GetModuleHandle(NULL);
|
||||
WebCursor web_cursor = cursor;
|
||||
@ -441,7 +441,7 @@ void CefRenderWidgetHostViewOSR::CancelWidget() {
|
||||
}
|
||||
|
||||
if (!weak_factory_.HasWeakPtrs()) {
|
||||
MessageLoop::current()->PostTask(FROM_HERE,
|
||||
base::MessageLoop::current()->PostTask(FROM_HERE,
|
||||
base::Bind(&CefRenderWidgetHostViewOSR::ShutdownHost,
|
||||
weak_factory_.GetWeakPtr()));
|
||||
}
|
||||
|
@ -107,21 +107,23 @@ CEF_EXPORT void cef_trace_event_instant(const char* category,
|
||||
|
||||
if (copy) {
|
||||
if (arg1_name == NULL && arg2_name == NULL) {
|
||||
TRACE_EVENT_COPY_INSTANT0(category, name);
|
||||
TRACE_EVENT_COPY_INSTANT0(category, name, TRACE_EVENT_SCOPE_THREAD);
|
||||
} else if (arg2_name == NULL) {
|
||||
TRACE_EVENT_COPY_INSTANT1(category, name, arg1_name, arg1_val);
|
||||
TRACE_EVENT_COPY_INSTANT1(category, name, TRACE_EVENT_SCOPE_THREAD,
|
||||
arg1_name, arg1_val);
|
||||
} else {
|
||||
TRACE_EVENT_COPY_INSTANT2(category, name, arg1_name, arg1_val,
|
||||
arg2_name, arg2_val);
|
||||
TRACE_EVENT_COPY_INSTANT2(category, name, TRACE_EVENT_SCOPE_THREAD,
|
||||
arg1_name, arg1_val, arg2_name, arg2_val);
|
||||
}
|
||||
} else {
|
||||
if (arg1_name == NULL && arg2_name == NULL) {
|
||||
TRACE_EVENT_INSTANT0(category, name);
|
||||
TRACE_EVENT_INSTANT0(category, name, TRACE_EVENT_SCOPE_THREAD);
|
||||
} else if (arg2_name == NULL) {
|
||||
TRACE_EVENT_INSTANT1(category, name, arg1_name, arg1_val);
|
||||
TRACE_EVENT_INSTANT1(category, name, TRACE_EVENT_SCOPE_THREAD,
|
||||
arg1_name, arg1_val);
|
||||
} else {
|
||||
TRACE_EVENT_INSTANT2(category, name, arg1_name, arg1_val,
|
||||
arg2_name, arg2_val);
|
||||
TRACE_EVENT_INSTANT2(category, name, TRACE_EVENT_SCOPE_THREAD,
|
||||
arg1_name, arg1_val, arg2_name, arg2_val);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -42,6 +42,16 @@ bool CefTraceSubscriber::EndTracingAsync() {
|
||||
return content::TraceController::GetInstance()->EndTracingAsync(this);
|
||||
}
|
||||
|
||||
void CefTraceSubscriber::GetKnownCategoriesAsync(
|
||||
const KnownCategoriesCallback& callback) {
|
||||
CEF_REQUIRE_UIT();
|
||||
DCHECK(!callback.is_null());
|
||||
DCHECK(known_categories_callback_.is_null());
|
||||
|
||||
known_categories_callback_ = callback;
|
||||
content::TraceController::GetInstance()->GetKnownCategoriesAsync(this);
|
||||
}
|
||||
|
||||
bool CefTraceSubscriber::GetTraceBufferPercentFullAsync() {
|
||||
CEF_REQUIRE_UIT();
|
||||
|
||||
@ -76,3 +86,11 @@ void CefTraceSubscriber::OnEndTracingComplete() {
|
||||
if (client_.get())
|
||||
client_->OnEndTracingComplete();
|
||||
}
|
||||
|
||||
void CefTraceSubscriber::OnKnownCategoriesCollected(
|
||||
const std::set<std::string>& known_categories) {
|
||||
CEF_REQUIRE_UIT();
|
||||
DCHECK(!known_categories_callback_.is_null());
|
||||
known_categories_callback_.Run(known_categories);
|
||||
known_categories_callback_.Reset();
|
||||
}
|
||||
|
@ -24,14 +24,21 @@ class CefTraceSubscriber : public content::TraceSubscriber {
|
||||
bool GetTraceBufferPercentFullAsync();
|
||||
bool EndTracingAsync();
|
||||
|
||||
typedef base::Callback<void(const std::set<std::string>&)>
|
||||
KnownCategoriesCallback;
|
||||
void GetKnownCategoriesAsync(const KnownCategoriesCallback& callback);
|
||||
|
||||
private:
|
||||
// content::TraceSubscriber methods:
|
||||
virtual void OnTraceDataCollected(
|
||||
const scoped_refptr<base::RefCountedString>& trace_fragment) OVERRIDE;
|
||||
virtual void OnTraceBufferPercentFullReply(float percent_full) OVERRIDE;
|
||||
virtual void OnEndTracingComplete() OVERRIDE;
|
||||
virtual void OnKnownCategoriesCollected(
|
||||
const std::set<std::string>& known_categories) OVERRIDE;
|
||||
|
||||
bool collecting_trace_data_;
|
||||
KnownCategoriesCallback known_categories_callback_;
|
||||
CefRefPtr<CefTraceClient> client_;
|
||||
};
|
||||
|
||||
|
@ -26,11 +26,11 @@
|
||||
#include "base/threading/thread_restrictions.h"
|
||||
#include "base/threading/worker_pool.h"
|
||||
#include "chrome/browser/net/proxy_service_factory.h"
|
||||
#include "chrome/browser/net/sqlite_persistent_cookie_store.h"
|
||||
#include "content/browser/net/sqlite_persistent_cookie_store.h"
|
||||
#include "content/public/browser/browser_thread.h"
|
||||
#include "content/public/common/content_switches.h"
|
||||
#include "content/public/common/url_constants.h"
|
||||
#include "net/base/cert_verifier.h"
|
||||
#include "net/cert/cert_verifier.h"
|
||||
#include "net/cookies/cookie_monster.h"
|
||||
#include "net/dns/host_resolver.h"
|
||||
#include "net/ftp/ftp_network_layer.h"
|
||||
@ -55,8 +55,8 @@ using content::BrowserThread;
|
||||
#endif
|
||||
|
||||
CefURLRequestContextGetter::CefURLRequestContextGetter(
|
||||
MessageLoop* io_loop,
|
||||
MessageLoop* file_loop,
|
||||
base::MessageLoop* io_loop,
|
||||
base::MessageLoop* file_loop,
|
||||
content::ProtocolHandlerMap* protocol_handlers)
|
||||
: io_loop_(io_loop),
|
||||
file_loop_(file_loop) {
|
||||
@ -203,7 +203,7 @@ void CefURLRequestContextGetter::SetCookieStoragePath(
|
||||
return;
|
||||
}
|
||||
|
||||
scoped_refptr<SQLitePersistentCookieStore> persistent_store;
|
||||
scoped_refptr<content::SQLitePersistentCookieStore> persistent_store;
|
||||
if (!path.empty()) {
|
||||
// TODO(cef): Move directory creation to the blocking pool instead of
|
||||
// allowing file IO on this thread.
|
||||
@ -212,7 +212,7 @@ void CefURLRequestContextGetter::SetCookieStoragePath(
|
||||
file_util::CreateDirectory(path)) {
|
||||
const base::FilePath& cookie_path = path.AppendASCII("Cookies");
|
||||
persistent_store =
|
||||
new SQLitePersistentCookieStore(
|
||||
new content::SQLitePersistentCookieStore(
|
||||
cookie_path,
|
||||
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO),
|
||||
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB),
|
||||
|
@ -18,9 +18,9 @@
|
||||
#include "net/url_request/url_request_context_getter.h"
|
||||
#include "net/url_request/url_request_job_factory.h"
|
||||
|
||||
class CefRequestInterceptor;
|
||||
class CefURLRequestContextProxy;
|
||||
namespace base {
|
||||
class MessageLoop;
|
||||
}
|
||||
|
||||
namespace net {
|
||||
class HostResolver;
|
||||
@ -31,6 +31,9 @@ class URLRequestJobFactoryImpl;
|
||||
class URLSecurityManager;
|
||||
}
|
||||
|
||||
class CefRequestInterceptor;
|
||||
class CefURLRequestContextProxy;
|
||||
|
||||
/*
|
||||
// Classes used in network request processing:
|
||||
//
|
||||
@ -75,8 +78,8 @@ class URLSecurityManager;
|
||||
class CefURLRequestContextGetter : public net::URLRequestContextGetter {
|
||||
public:
|
||||
CefURLRequestContextGetter(
|
||||
MessageLoop* io_loop,
|
||||
MessageLoop* file_loop,
|
||||
base::MessageLoop* io_loop,
|
||||
base::MessageLoop* file_loop,
|
||||
content::ProtocolHandlerMap* protocol_handlers);
|
||||
virtual ~CefURLRequestContextGetter();
|
||||
|
||||
@ -103,8 +106,8 @@ class CefURLRequestContextGetter : public net::URLRequestContextGetter {
|
||||
private:
|
||||
void CreateProxyConfigService();
|
||||
|
||||
MessageLoop* io_loop_;
|
||||
MessageLoop* file_loop_;
|
||||
base::MessageLoop* io_loop_;
|
||||
base::MessageLoop* file_loop_;
|
||||
|
||||
scoped_ptr<net::ProxyConfigService> proxy_config_service_;
|
||||
scoped_ptr<CefRequestInterceptor> request_interceptor_;
|
||||
|
@ -80,9 +80,6 @@ const char kDisableTabToLinks[] = "disable-tab-to-links";
|
||||
// Disable user style sheets.
|
||||
const char kDisableAuthorAndUserStyles[] = "disable-author-and-user-styles";
|
||||
|
||||
// Disable developer tools (WebKit Inspector).
|
||||
const char kDisableDeveloperTools[] = "disable-developer-tools";
|
||||
|
||||
// Persist session cookies.
|
||||
const char kPersistSessionCookies[] = "persist-session-cookies";
|
||||
|
||||
|
@ -37,7 +37,6 @@ extern const char kImageShrinkStandaloneToFit[];
|
||||
extern const char kDisableTextAreaResize[];
|
||||
extern const char kDisableTabToLinks[];
|
||||
extern const char kDisableAuthorAndUserStyles[];
|
||||
extern const char kDisableDeveloperTools[];
|
||||
extern const char kPersistSessionCookies[];
|
||||
extern const char kEnableMediaStream[];
|
||||
extern const char kEnableSpeechInput[];
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
#include "base/command_line.h"
|
||||
#include "base/logging.h"
|
||||
#include "base/string_piece.h"
|
||||
#include "base/strings/string_piece.h"
|
||||
#include "base/stringprintf.h"
|
||||
#include "chrome/common/chrome_switches.h"
|
||||
#include "content/public/common/content_switches.h"
|
||||
@ -19,6 +19,8 @@
|
||||
|
||||
namespace {
|
||||
|
||||
CefContentClient* g_content_client = NULL;
|
||||
|
||||
const char kInterposeLibraryPath[] =
|
||||
"@executable_path/../../../libplugin_carbon_interpose.dylib";
|
||||
|
||||
@ -29,14 +31,17 @@ CefContentClient::CefContentClient(CefRefPtr<CefApp> application)
|
||||
: application_(application),
|
||||
pack_loading_disabled_(false),
|
||||
allow_pack_file_load_(false) {
|
||||
DCHECK(!g_content_client);
|
||||
g_content_client = this;
|
||||
}
|
||||
|
||||
CefContentClient::~CefContentClient() {
|
||||
g_content_client = NULL;
|
||||
}
|
||||
|
||||
// static
|
||||
CefContentClient* CefContentClient::Get() {
|
||||
return static_cast<CefContentClient*>(content::GetContentClient());
|
||||
return g_content_client;
|
||||
}
|
||||
|
||||
void CefContentClient::AddAdditionalSchemes(
|
||||
|
@ -362,7 +362,7 @@ int CefMainDelegate::RunProcess(
|
||||
scoped_ptr<base::Thread> thread;
|
||||
thread.reset(new CefUIThread(main_function_params));
|
||||
base::Thread::Options options;
|
||||
options.message_loop_type = MessageLoop::TYPE_UI;
|
||||
options.message_loop_type = base::MessageLoop::TYPE_UI;
|
||||
if (!thread->StartWithOptions(options)) {
|
||||
NOTREACHED() << "failed to start UI thread";
|
||||
return 1;
|
||||
|
@ -27,7 +27,6 @@ class CefContentBrowserClient;
|
||||
class CefContentRendererClient;
|
||||
class CefContentPluginClient;
|
||||
class CefContentUtilityClient;
|
||||
class MessageLoop;
|
||||
|
||||
class CefMainDelegate : public content::ContentMainDelegate {
|
||||
public:
|
||||
|
@ -198,8 +198,9 @@ void CefRequestImpl::Set(net::URLRequest* request) {
|
||||
|
||||
net::HttpRequestHeaders headers = request->extra_request_headers();
|
||||
|
||||
// Ensure that we do not send username and password fields in the referrer.
|
||||
GURL referrer(request->GetSanitizedReferrer());
|
||||
// URLRequest::SetReferrer ensures that we do not send username and password
|
||||
// fields in the referrer.
|
||||
GURL referrer(request->referrer());
|
||||
|
||||
// Strip Referer from request_info_.extra_headers to prevent, e.g., plugins
|
||||
// from overriding headers that are controlled using other means. Otherwise a
|
||||
@ -238,9 +239,9 @@ void CefRequestImpl::Get(net::URLRequest* request) {
|
||||
HeaderMap headerMap = headermap_;
|
||||
HeaderMap::iterator it = headerMap.find(referrerStr);
|
||||
if (it == headerMap.end()) {
|
||||
request->set_referrer("");
|
||||
request->SetReferrer("");
|
||||
} else {
|
||||
request->set_referrer(it->second);
|
||||
request->SetReferrer(it->second);
|
||||
headerMap.erase(it);
|
||||
}
|
||||
net::HttpRequestHeaders headers;
|
||||
|
@ -3,6 +3,7 @@
|
||||
// can be found in the LICENSE file.
|
||||
|
||||
#include "libcef/common/task_runner_impl.h"
|
||||
#include "libcef/common/content_client.h"
|
||||
#include "libcef/renderer/content_renderer_client.h"
|
||||
|
||||
#include "base/bind.h"
|
||||
@ -84,12 +85,12 @@ scoped_refptr<base::SequencedTaskRunner>
|
||||
break;
|
||||
};
|
||||
|
||||
if (id >= 0 && content::GetContentClient()->browser() &&
|
||||
if (id >= 0 && CefContentClient::Get()->browser() &&
|
||||
BrowserThread::IsMessageLoopValid(static_cast<BrowserThread::ID>(id))) {
|
||||
// Don't use BrowserThread::GetMessageLoopProxyForThread because it returns
|
||||
// a new MessageLoopProxy object for each call and makes pointer equality
|
||||
// testing impossible.
|
||||
MessageLoop* message_loop =
|
||||
base::MessageLoop* message_loop =
|
||||
BrowserThread::UnsafeGetMessageLoopForThread(
|
||||
static_cast<BrowserThread::ID>(id));
|
||||
if (message_loop)
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
#include "include/cef_urlrequest.h"
|
||||
#include "libcef/browser/browser_urlrequest_impl.h"
|
||||
#include "libcef/common/content_client.h"
|
||||
#include "libcef/renderer/render_urlrequest_impl.h"
|
||||
|
||||
#include "base/logging.h"
|
||||
@ -19,19 +20,19 @@ CefRefPtr<CefURLRequest> CefURLRequest::Create(
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!MessageLoop::current()) {
|
||||
if (!base::MessageLoop::current()) {
|
||||
NOTREACHED() << "called on invalid thread";
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (content::GetContentClient()->browser()) {
|
||||
if (CefContentClient::Get()->browser()) {
|
||||
// In the browser process.
|
||||
CefRefPtr<CefBrowserURLRequest> impl =
|
||||
new CefBrowserURLRequest(request, client);
|
||||
if (impl->Start())
|
||||
return impl.get();
|
||||
return NULL;
|
||||
} else if (content::GetContentClient()->renderer()) {
|
||||
} else if (CefContentClient::Get()->renderer()) {
|
||||
// In the render process.
|
||||
CefRefPtr<CefRenderURLRequest> impl =
|
||||
new CefRenderURLRequest(request, client);
|
||||
|
@ -148,7 +148,7 @@ CefContentRendererClient::~CefContentRendererClient() {
|
||||
// static
|
||||
CefContentRendererClient* CefContentRendererClient::Get() {
|
||||
return static_cast<CefContentRendererClient*>(
|
||||
content::GetContentClient()->renderer());
|
||||
CefContentClient::Get()->renderer());
|
||||
}
|
||||
|
||||
CefRefPtr<CefBrowserImpl> CefContentRendererClient::GetBrowserForView(
|
||||
@ -386,7 +386,7 @@ void CefContentRendererClient::RenderThreadStarted() {
|
||||
if (content::RenderProcessHost::run_renderer_in_process()) {
|
||||
// When running in single-process mode register as a destruction observer
|
||||
// on the render thread's MessageLoop.
|
||||
MessageLoop::current()->AddDestructionObserver(this);
|
||||
base::MessageLoop::current()->AddDestructionObserver(this);
|
||||
}
|
||||
|
||||
// Note that under Linux, the media library will normally already have
|
||||
|
@ -24,7 +24,7 @@ class CefRenderProcessObserver;
|
||||
struct Cef_CrossOriginWhiteListEntry_Params;
|
||||
|
||||
class CefContentRendererClient : public content::ContentRendererClient,
|
||||
public MessageLoop::DestructionObserver {
|
||||
public base::MessageLoop::DestructionObserver {
|
||||
public:
|
||||
CefContentRendererClient();
|
||||
virtual ~CefContentRendererClient();
|
||||
|
@ -75,10 +75,6 @@ CefDOMEventImpl::Category CefDOMEventImpl::GetCategory() {
|
||||
flags |= DOM_EVENT_CATEGORY_PROGRESS;
|
||||
if (event_.isXMLHttpRequestProgressEvent())
|
||||
flags |= DOM_EVENT_CATEGORY_XMLHTTPREQUEST_PROGRESS;
|
||||
if (event_.isWebKitAnimationEvent())
|
||||
flags |= DOM_EVENT_CATEGORY_WEBKIT_ANIMATION;
|
||||
if (event_.isWebKitTransitionEvent())
|
||||
flags |= DOM_EVENT_CATEGORY_WEBKIT_TRANSITION;
|
||||
if (event_.isBeforeLoadEvent())
|
||||
flags |= DOM_EVENT_CATEGORY_BEFORE_LOAD;
|
||||
|
||||
|
@ -54,7 +54,7 @@ void CefRenderMessageFilter::OnDevToolsAgentDetach() {
|
||||
// CefContentRendererClient::DevToolsAgentDetached() needs to be called after
|
||||
// the IPC message has been handled by DevToolsAgent. A workaround for this is
|
||||
// to first post to the IO thread and then post to the renderer thread.
|
||||
MessageLoop::current()->PostTask(FROM_HERE,
|
||||
base::MessageLoop::current()->PostTask(FROM_HERE,
|
||||
base::Bind(&CefRenderMessageFilter::OnDevToolsAgentDetach_IOT, this));
|
||||
}
|
||||
|
||||
|
@ -80,7 +80,7 @@ class CefRenderURLRequest::Context
|
||||
: url_request_(url_request),
|
||||
request_(request),
|
||||
client_(client),
|
||||
message_loop_proxy_(MessageLoop::current()->message_loop_proxy()),
|
||||
message_loop_proxy_(base::MessageLoop::current()->message_loop_proxy()),
|
||||
status_(UR_IO_PENDING),
|
||||
error_code_(ERR_NONE),
|
||||
upload_data_size_(0),
|
||||
|
@ -12,7 +12,6 @@
|
||||
MSVC_PUSH_WARNING_LEVEL(0);
|
||||
#include "Frame.h" // NOLINT(build/include)
|
||||
#include "ScriptController.h" // NOLINT(build/include)
|
||||
#include "ScriptControllerBase.h" // NOLINT(build/include)
|
||||
#include "V8Binding.h" // NOLINT(build/include)
|
||||
#include "V8RecursionScope.h" // NOLINT(build/include)
|
||||
#include "WorkerContext.h" // NOLINT(build/include)
|
||||
|
@ -1,8 +1,8 @@
|
||||
Index: message_loop.cc
|
||||
===================================================================
|
||||
--- message_loop.cc (revision 181864)
|
||||
--- message_loop.cc (revision 194165)
|
||||
+++ message_loop.cc (working copy)
|
||||
@@ -193,7 +193,7 @@
|
||||
@@ -191,7 +191,7 @@
|
||||
MessageLoop::~MessageLoop() {
|
||||
DCHECK_EQ(this, current());
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
Index: page/FrameView.cpp
|
||||
===================================================================
|
||||
--- page/FrameView.cpp (revision 146842)
|
||||
--- page/FrameView.cpp (revision 148366)
|
||||
+++ page/FrameView.cpp (working copy)
|
||||
@@ -209,10 +209,12 @@
|
||||
@@ -198,10 +198,12 @@
|
||||
if (!page)
|
||||
return;
|
||||
|
||||
@ -17,17 +17,17 @@ Index: page/FrameView.cpp
|
||||
PassRefPtr<FrameView> FrameView::create(Frame* frame)
|
||||
Index: platform/mac/NSScrollerImpDetails.mm
|
||||
===================================================================
|
||||
--- platform/mac/NSScrollerImpDetails.mm (revision 146842)
|
||||
--- platform/mac/NSScrollerImpDetails.mm (revision 148366)
|
||||
+++ platform/mac/NSScrollerImpDetails.mm (working copy)
|
||||
@@ -34,6 +34,7 @@
|
||||
#if PLATFORM(CHROMIUM)
|
||||
@@ -33,6 +33,7 @@
|
||||
|
||||
bool isScrollbarOverlayAPIAvailable()
|
||||
{
|
||||
+#if 0
|
||||
static bool apiAvailable;
|
||||
static bool shouldInitialize = true;
|
||||
if (shouldInitialize) {
|
||||
@@ -44,6 +45,9 @@
|
||||
@@ -43,6 +44,9 @@
|
||||
&& [scrollerImpPairClass instancesRespondToSelector:@selector(scrollerStyle)];
|
||||
}
|
||||
return apiAvailable;
|
||||
@ -35,5 +35,5 @@ Index: platform/mac/NSScrollerImpDetails.mm
|
||||
+ return false;
|
||||
+#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
NSScrollerStyle recommendedScrollerStyle() {
|
||||
|
@ -1,13 +1,13 @@
|
||||
Index: features.gypi
|
||||
===================================================================
|
||||
--- features.gypi (revision 145278)
|
||||
--- features.gypi (revision 148366)
|
||||
+++ features.gypi (working copy)
|
||||
@@ -193,7 +193,7 @@
|
||||
@@ -131,7 +131,7 @@
|
||||
'ENABLE_CALENDAR_PICKER=1',
|
||||
'ENABLE_DATALIST_ELEMENT=1',
|
||||
'ENABLE_INPUT_SPEECH=1',
|
||||
- 'ENABLE_INPUT_TYPE_COLOR=1',
|
||||
+ 'ENABLE_INPUT_TYPE_COLOR=0',
|
||||
'ENABLE_INPUT_TYPE_WEEK=1',
|
||||
'ENABLE_INPUT_MULTIPLE_FIELDS_UI=1',
|
||||
'ENABLE_LEGACY_NOTIFICATIONS=1',
|
||||
'ENABLE_MEDIA_CAPTURE=0',
|
||||
|
@ -21,8 +21,10 @@
|
||||
<li><a href="http://tests/localstorage">Local Storage</a></li>
|
||||
<li><a href="http://mrdoob.com/lab/javascript/requestanimationframe/">requestAnimationFrame</a></li>
|
||||
<li><a href="client://tests/handler.html">Scheme Handler</a></li>
|
||||
<li><a href="http://slides.html5rocks.com/#speech-input">Speech Input</a> - requires "enable-speech-input" flag</li>
|
||||
<li><a href="http://tests/transparency">Transparency</a></li>
|
||||
<li><a href="http://webglsamples.googlecode.com/hg/field/field.html">WebGL</a></li>
|
||||
<li><a href="http://apprtc.appspot.com/">WebRTC</a> - requires "enable-media-stream" flag</li>
|
||||
<li><a href="http://tests/xmlhttprequest">XMLHttpRequest</a></li>
|
||||
</ul>
|
||||
</body>
|
||||
|
Loading…
x
Reference in New Issue
Block a user