mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
- Add developer tools support (issue #127).
- Send title change notifications generated after page content is done loading. - Restore windows and bring to the front in BrowserWebViewDelegate::show(). git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@168 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
162
libcef/browser_devtools_agent.cc
Normal file
162
libcef/browser_devtools_agent.cc
Normal file
@@ -0,0 +1,162 @@
|
||||
// Copyright (c) 2010 The Chromium 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 "browser_devtools_agent.h"
|
||||
|
||||
#include "base/message_loop.h"
|
||||
#include "grit/webkit_chromium_resources.h"
|
||||
#include "third_party/WebKit/WebKit/chromium/public/WebDevToolsAgent.h"
|
||||
#include "third_party/WebKit/WebKit/chromium/public/WebView.h"
|
||||
#include "browser_devtools_callargs.h"
|
||||
#include "browser_devtools_client.h"
|
||||
#include "webkit/glue/webkit_glue.h"
|
||||
|
||||
using WebKit::WebCString;
|
||||
using WebKit::WebDevToolsAgent;
|
||||
using WebKit::WebDevToolsMessageData;
|
||||
using WebKit::WebString;
|
||||
using WebKit::WebView;
|
||||
|
||||
namespace {
|
||||
|
||||
class WebKitClientMessageLoopImpl
|
||||
: public WebKit::WebDevToolsAgentClient::WebKitClientMessageLoop {
|
||||
public:
|
||||
WebKitClientMessageLoopImpl() : message_loop_(MessageLoop::current()) { }
|
||||
virtual ~WebKitClientMessageLoopImpl() {
|
||||
message_loop_ = NULL;
|
||||
}
|
||||
virtual void run() {
|
||||
bool old_state = message_loop_->NestableTasksAllowed();
|
||||
message_loop_->SetNestableTasksAllowed(true);
|
||||
message_loop_->Run();
|
||||
message_loop_->SetNestableTasksAllowed(old_state);
|
||||
}
|
||||
virtual void quitNow() {
|
||||
message_loop_->QuitNow();
|
||||
}
|
||||
private:
|
||||
MessageLoop* message_loop_;
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
// static
|
||||
void BrowserDevToolsAgent::DispatchMessageLoop() {
|
||||
MessageLoop* current = MessageLoop::current();
|
||||
bool old_state = current->NestableTasksAllowed();
|
||||
current->SetNestableTasksAllowed(true);
|
||||
current->RunAllPending();
|
||||
current->SetNestableTasksAllowed(old_state);
|
||||
}
|
||||
|
||||
BrowserDevToolsAgent::BrowserDevToolsAgent()
|
||||
: ALLOW_THIS_IN_INITIALIZER_LIST(call_method_factory_(this)),
|
||||
dev_tools_client_(NULL) {
|
||||
static int dev_tools_agent_counter;
|
||||
routing_id_ = ++dev_tools_agent_counter;
|
||||
if (routing_id_ == 1)
|
||||
WebDevToolsAgent::setMessageLoopDispatchHandler(
|
||||
&BrowserDevToolsAgent::DispatchMessageLoop);
|
||||
}
|
||||
|
||||
BrowserDevToolsAgent::~BrowserDevToolsAgent() {
|
||||
}
|
||||
|
||||
void BrowserDevToolsAgent::SetWebView(WebKit::WebView* web_view) {
|
||||
web_view_ = web_view;
|
||||
}
|
||||
|
||||
void BrowserDevToolsAgent::sendMessageToInspectorFrontend(
|
||||
const WebString& data) {
|
||||
if (dev_tools_client_)
|
||||
dev_tools_client_->AsyncCall(BrowserDevToolsCallArgs(data));
|
||||
}
|
||||
|
||||
void BrowserDevToolsAgent::runtimePropertyChanged(
|
||||
const WebKit::WebString& name,
|
||||
const WebKit::WebString& value) {
|
||||
// TODO: Implement.
|
||||
}
|
||||
|
||||
WebCString BrowserDevToolsAgent::debuggerScriptSource() {
|
||||
base::StringPiece debuggerScriptjs =
|
||||
webkit_glue::GetDataResource(IDR_DEVTOOLS_DEBUGGER_SCRIPT_JS);
|
||||
return WebCString(debuggerScriptjs.data(), debuggerScriptjs.length());
|
||||
}
|
||||
|
||||
WebKit::WebDevToolsAgentClient::WebKitClientMessageLoop*
|
||||
BrowserDevToolsAgent::createClientMessageLoop() {
|
||||
return new WebKitClientMessageLoopImpl();
|
||||
}
|
||||
|
||||
void BrowserDevToolsAgent::AsyncCall(const BrowserDevToolsCallArgs &args) {
|
||||
MessageLoop::current()->PostDelayedTask(
|
||||
FROM_HERE,
|
||||
call_method_factory_.NewRunnableMethod(&BrowserDevToolsAgent::Call,
|
||||
args),
|
||||
0);
|
||||
}
|
||||
|
||||
void BrowserDevToolsAgent::Call(const BrowserDevToolsCallArgs &args) {
|
||||
WebDevToolsAgent* web_agent = GetWebAgent();
|
||||
if (web_agent)
|
||||
web_agent->dispatchOnInspectorBackend(args.data_);
|
||||
if (BrowserDevToolsCallArgs::calls_count() == 1 && dev_tools_client_)
|
||||
dev_tools_client_->all_messages_processed();
|
||||
}
|
||||
|
||||
void BrowserDevToolsAgent::DelayedFrontendLoaded() {
|
||||
WebDevToolsAgent *web_agent = GetWebAgent();
|
||||
if (web_agent)
|
||||
web_agent->frontendLoaded();
|
||||
}
|
||||
|
||||
WebDevToolsAgent* BrowserDevToolsAgent::GetWebAgent() {
|
||||
if (!web_view_)
|
||||
return NULL;
|
||||
return web_view_->devToolsAgent();
|
||||
}
|
||||
|
||||
void BrowserDevToolsAgent::attach(BrowserDevToolsClient* client) {
|
||||
DCHECK(!dev_tools_client_);
|
||||
dev_tools_client_ = client;
|
||||
WebDevToolsAgent *web_agent = GetWebAgent();
|
||||
if (web_agent)
|
||||
web_agent->attach();
|
||||
}
|
||||
|
||||
void BrowserDevToolsAgent::detach() {
|
||||
DCHECK(dev_tools_client_);
|
||||
WebDevToolsAgent* web_agent = GetWebAgent();
|
||||
if (web_agent)
|
||||
web_agent->detach();
|
||||
dev_tools_client_ = NULL;
|
||||
}
|
||||
|
||||
void BrowserDevToolsAgent::frontendLoaded() {
|
||||
MessageLoop::current()->PostDelayedTask(
|
||||
FROM_HERE,
|
||||
call_method_factory_.NewRunnableMethod(
|
||||
&BrowserDevToolsAgent::DelayedFrontendLoaded),
|
||||
0);
|
||||
}
|
||||
|
||||
bool BrowserDevToolsAgent::setTimelineProfilingEnabled(bool enabled) {
|
||||
WebDevToolsAgent* agent = GetWebAgent();
|
||||
if (!agent)
|
||||
return false;
|
||||
agent->setTimelineProfilingEnabled(enabled);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool BrowserDevToolsAgent::evaluateInWebInspector(
|
||||
long call_id,
|
||||
const std::string& script) {
|
||||
WebDevToolsAgent* agent = GetWebAgent();
|
||||
if (!agent)
|
||||
return false;
|
||||
agent->evaluateInWebInspector(call_id, WebString::fromUTF8(script));
|
||||
return true;
|
||||
}
|
68
libcef/browser_devtools_agent.h
Normal file
68
libcef/browser_devtools_agent.h
Normal file
@@ -0,0 +1,68 @@
|
||||
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef _BROWSER_DEVTOOLS_AGENT_H
|
||||
#define _BROWSER_DEVTOOLS_AGENT_H
|
||||
|
||||
#include "base/task.h"
|
||||
|
||||
#include "third_party/WebKit/WebKit/chromium/public/WebDevToolsAgentClient.h"
|
||||
|
||||
namespace WebKit {
|
||||
|
||||
class WebDevToolsAgent;
|
||||
class WebView;
|
||||
struct WebDevToolsMessageData;
|
||||
|
||||
} // namespace WebKit
|
||||
|
||||
class BrowserDevToolsCallArgs;
|
||||
class BrowserDevToolsClient;
|
||||
|
||||
class BrowserDevToolsAgent : public WebKit::WebDevToolsAgentClient {
|
||||
|
||||
public:
|
||||
BrowserDevToolsAgent();
|
||||
virtual ~BrowserDevToolsAgent();
|
||||
|
||||
void SetWebView(WebKit::WebView* web_view);
|
||||
|
||||
// WebDevToolsAgentClient implementation.
|
||||
virtual void sendMessageToInspectorFrontend(
|
||||
const WebKit::WebString& data);
|
||||
virtual int hostIdentifier() { return routing_id_; }
|
||||
virtual void runtimePropertyChanged(const WebKit::WebString& name,
|
||||
const WebKit::WebString& value);
|
||||
virtual WebKit::WebCString debuggerScriptSource();
|
||||
|
||||
virtual WebKit::WebDevToolsAgentClient::WebKitClientMessageLoop*
|
||||
createClientMessageLoop();
|
||||
|
||||
void AsyncCall(const BrowserDevToolsCallArgs& args);
|
||||
|
||||
void attach(BrowserDevToolsClient* client);
|
||||
void detach();
|
||||
void frontendLoaded();
|
||||
|
||||
bool evaluateInWebInspector(long call_id, const std::string& script);
|
||||
bool setTimelineProfilingEnabled(bool enable);
|
||||
|
||||
BrowserDevToolsClient* client() { return dev_tools_client_; }
|
||||
|
||||
private:
|
||||
void Call(const BrowserDevToolsCallArgs& args);
|
||||
void DelayedFrontendLoaded();
|
||||
static void DispatchMessageLoop();
|
||||
WebKit::WebDevToolsAgent* GetWebAgent();
|
||||
|
||||
ScopedRunnableMethodFactory<BrowserDevToolsAgent> call_method_factory_;
|
||||
BrowserDevToolsClient* dev_tools_client_;
|
||||
int routing_id_;
|
||||
WebKit::WebDevToolsAgent* web_dev_tools_agent_;
|
||||
WebKit::WebView* web_view_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(BrowserDevToolsAgent);
|
||||
};
|
||||
|
||||
#endif // _BROWSER_DEVTOOLS_AGENT_H
|
27
libcef/browser_devtools_callargs.cc
Normal file
27
libcef/browser_devtools_callargs.cc
Normal file
@@ -0,0 +1,27 @@
|
||||
// Copyright (c) 2010 The Chromium 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 "browser_devtools_callargs.h"
|
||||
|
||||
#include "base/logging.h"
|
||||
|
||||
// static
|
||||
int BrowserDevToolsCallArgs::calls_count_ = 0;
|
||||
|
||||
BrowserDevToolsCallArgs::BrowserDevToolsCallArgs(
|
||||
const WebKit::WebString& data)
|
||||
: data_(data) {
|
||||
++calls_count_;
|
||||
}
|
||||
|
||||
BrowserDevToolsCallArgs::BrowserDevToolsCallArgs(
|
||||
const BrowserDevToolsCallArgs& args)
|
||||
: data_(args.data_) {
|
||||
++calls_count_;
|
||||
}
|
||||
|
||||
BrowserDevToolsCallArgs::~BrowserDevToolsCallArgs() {
|
||||
--calls_count_;
|
||||
DCHECK(calls_count_ >= 0);
|
||||
}
|
28
libcef/browser_devtools_callargs.h
Normal file
28
libcef/browser_devtools_callargs.h
Normal file
@@ -0,0 +1,28 @@
|
||||
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef _BROWSER_DEVTOOLS_CALLARGS_H
|
||||
#define _BROWSER_DEVTOOLS_CALLARGS_H
|
||||
|
||||
#include "base/basictypes.h"
|
||||
|
||||
#include "third_party/WebKit/WebKit/chromium/public/WebString.h"
|
||||
|
||||
class BrowserDevToolsCallArgs {
|
||||
public:
|
||||
explicit BrowserDevToolsCallArgs(const WebKit::WebString& data);
|
||||
|
||||
BrowserDevToolsCallArgs(const BrowserDevToolsCallArgs& args);
|
||||
|
||||
~BrowserDevToolsCallArgs();
|
||||
|
||||
static int calls_count() { return calls_count_; }
|
||||
|
||||
WebKit::WebString data_;
|
||||
|
||||
private:
|
||||
static int calls_count_;
|
||||
};
|
||||
|
||||
#endif // _BROWSER_DEVTOOLS_CALLARGS_H
|
94
libcef/browser_devtools_client.cc
Normal file
94
libcef/browser_devtools_client.cc
Normal file
@@ -0,0 +1,94 @@
|
||||
// Copyright (c) 2010 The Chromium 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 "third_party/WebKit/WebKit/chromium/public/WebDevToolsAgent.h"
|
||||
#include "third_party/WebKit/WebKit/chromium/public/WebDevToolsFrontend.h"
|
||||
#include "third_party/WebKit/WebKit/chromium/public/WebFrame.h"
|
||||
#include "third_party/WebKit/WebKit/chromium/public/WebString.h"
|
||||
#include "third_party/WebKit/WebKit/chromium/public/WebScriptSource.h"
|
||||
#include "third_party/WebKit/WebKit/chromium/public/WebView.h"
|
||||
|
||||
#undef LOG
|
||||
#include "browser_devtools_agent.h"
|
||||
#include "browser_devtools_callargs.h"
|
||||
#include "browser_devtools_client.h"
|
||||
#include "browser_impl.h"
|
||||
|
||||
#include "base/command_line.h"
|
||||
#include "base/message_loop.h"
|
||||
|
||||
using WebKit::WebDevToolsAgent;
|
||||
using WebKit::WebDevToolsFrontend;
|
||||
using WebKit::WebDevToolsMessageData;
|
||||
using WebKit::WebString;
|
||||
using WebKit::WebView;
|
||||
|
||||
BrowserDevToolsClient::BrowserDevToolsClient(CefBrowserImpl* browser,
|
||||
BrowserDevToolsAgent *agent)
|
||||
: ALLOW_THIS_IN_INITIALIZER_LIST(call_method_factory_(this)),
|
||||
browser_(browser),
|
||||
dev_tools_agent_(agent),
|
||||
web_view_(browser->GetWebView()) {
|
||||
web_tools_frontend_.reset(WebDevToolsFrontend::create(web_view_, this,
|
||||
WebString::fromUTF8("en-US")));
|
||||
dev_tools_agent_->attach(this);
|
||||
}
|
||||
|
||||
BrowserDevToolsClient::~BrowserDevToolsClient() {
|
||||
// It is a chance that page will be destroyed at detach step of
|
||||
// dev_tools_agent_ and we should clean pending requests a bit earlier.
|
||||
call_method_factory_.RevokeAll();
|
||||
if (dev_tools_agent_)
|
||||
dev_tools_agent_->detach();
|
||||
}
|
||||
|
||||
void BrowserDevToolsClient::sendFrontendLoaded() {
|
||||
if (dev_tools_agent_)
|
||||
dev_tools_agent_->frontendLoaded();
|
||||
}
|
||||
|
||||
void BrowserDevToolsClient::sendMessageToBackend(
|
||||
const WebString& data) {
|
||||
if (dev_tools_agent_)
|
||||
dev_tools_agent_->AsyncCall(BrowserDevToolsCallArgs(data));
|
||||
}
|
||||
|
||||
void BrowserDevToolsClient::sendDebuggerCommandToAgent(
|
||||
const WebString& command) {
|
||||
WebDevToolsAgent::executeDebuggerCommand(command, 1);
|
||||
}
|
||||
|
||||
void BrowserDevToolsClient::activateWindow() {
|
||||
NOTIMPLEMENTED();
|
||||
}
|
||||
|
||||
void BrowserDevToolsClient::closeWindow() {
|
||||
NOTIMPLEMENTED();
|
||||
}
|
||||
|
||||
void BrowserDevToolsClient::dockWindow() {
|
||||
NOTIMPLEMENTED();
|
||||
}
|
||||
|
||||
void BrowserDevToolsClient::undockWindow() {
|
||||
NOTIMPLEMENTED();
|
||||
}
|
||||
|
||||
void BrowserDevToolsClient::AsyncCall(const BrowserDevToolsCallArgs &args) {
|
||||
MessageLoop::current()->PostDelayedTask(FROM_HERE,
|
||||
call_method_factory_.NewRunnableMethod(&BrowserDevToolsClient::Call,
|
||||
args), 0);
|
||||
}
|
||||
|
||||
void BrowserDevToolsClient::Call(const BrowserDevToolsCallArgs &args) {
|
||||
web_tools_frontend_->dispatchOnInspectorFrontend(args.data_);
|
||||
if (BrowserDevToolsCallArgs::calls_count() == 1)
|
||||
all_messages_processed();
|
||||
}
|
||||
|
||||
void BrowserDevToolsClient::all_messages_processed() {
|
||||
web_view_->mainFrame()->executeScript(WebKit::WebScriptSource(
|
||||
WebString::fromUTF8("if (window.WebInspector && "
|
||||
"WebInspector.queuesAreEmpty) WebInspector.queuesAreEmpty();")));
|
||||
}
|
59
libcef/browser_devtools_client.h
Normal file
59
libcef/browser_devtools_client.h
Normal file
@@ -0,0 +1,59 @@
|
||||
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef _BROWSER_DEVTOOLS_CLIENT_H
|
||||
#define _BROWSER_DEVTOOLS_CLIENT_H
|
||||
|
||||
#include "base/scoped_ptr.h"
|
||||
#include "base/task.h"
|
||||
|
||||
#include "third_party/WebKit/WebKit/chromium/public/WebDevToolsFrontendClient.h"
|
||||
|
||||
namespace WebKit {
|
||||
|
||||
class WebDevToolsFrontend;
|
||||
struct WebDevToolsMessageData;
|
||||
|
||||
} // namespace WebKit
|
||||
|
||||
class BrowserDevToolsCallArgs;
|
||||
class BrowserDevToolsAgent;
|
||||
class CefBrowserImpl;
|
||||
|
||||
class BrowserDevToolsClient: public WebKit::WebDevToolsFrontendClient {
|
||||
|
||||
public:
|
||||
BrowserDevToolsClient(CefBrowserImpl* browser,
|
||||
BrowserDevToolsAgent* agent);
|
||||
virtual ~BrowserDevToolsClient();
|
||||
|
||||
// WebDevToolsFrontendClient implementation
|
||||
virtual void sendFrontendLoaded();
|
||||
virtual void sendMessageToBackend(const WebKit::WebString& data);
|
||||
virtual void sendDebuggerCommandToAgent(const WebKit::WebString& command);
|
||||
|
||||
virtual void activateWindow();
|
||||
virtual void closeWindow();
|
||||
virtual void dockWindow();
|
||||
virtual void undockWindow();
|
||||
|
||||
void AsyncCall(const BrowserDevToolsCallArgs& args);
|
||||
|
||||
void all_messages_processed();
|
||||
|
||||
CefBrowserImpl* browser() { return browser_; }
|
||||
|
||||
private:
|
||||
void Call(const BrowserDevToolsCallArgs& args);
|
||||
|
||||
ScopedRunnableMethodFactory<BrowserDevToolsClient> call_method_factory_;
|
||||
CefBrowserImpl* browser_;
|
||||
BrowserDevToolsAgent* dev_tools_agent_;
|
||||
WebKit::WebView* web_view_;
|
||||
scoped_ptr<WebKit::WebDevToolsFrontend> web_tools_frontend_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(BrowserDevToolsClient);
|
||||
};
|
||||
|
||||
#endif // _BROWSER_DEVTOOLS_CLIENT_H
|
@@ -10,6 +10,8 @@
|
||||
#include "request_impl.h"
|
||||
#include "stream_impl.h"
|
||||
|
||||
#include "base/file_path.h"
|
||||
#include "base/path_service.h"
|
||||
#include "base/synchronization/waitable_event.h"
|
||||
#include "base/utf_string_conversions.h"
|
||||
#include "third_party/WebKit/WebKit/chromium/public/WebDocument.h"
|
||||
@@ -232,6 +234,18 @@ void CefBrowserImpl::StopFinding(bool clearSelection)
|
||||
&CefBrowserImpl::UIT_StopFinding, clearSelection));
|
||||
}
|
||||
|
||||
void CefBrowserImpl::ShowDevTools()
|
||||
{
|
||||
CefThread::PostTask(CefThread::UI, FROM_HERE, NewRunnableMethod(this,
|
||||
&CefBrowserImpl::UIT_ShowDevTools));
|
||||
}
|
||||
|
||||
void CefBrowserImpl::CloseDevTools()
|
||||
{
|
||||
CefThread::PostTask(CefThread::UI, FROM_HERE, NewRunnableMethod(this,
|
||||
&CefBrowserImpl::UIT_CloseDevTools));
|
||||
}
|
||||
|
||||
CefRefPtr<CefFrame> CefBrowserImpl::GetCefFrame(WebFrame* frame)
|
||||
{
|
||||
CefRefPtr<CefFrame> cef_frame;
|
||||
@@ -573,6 +587,12 @@ void CefBrowserImpl::UIT_DestroyBrowser()
|
||||
}
|
||||
GetWebViewDelegate()->RevokeDragDrop();
|
||||
|
||||
if (dev_tools_agent_.get()) {
|
||||
BrowserDevToolsClient* client = dev_tools_agent_->client();
|
||||
if (client)
|
||||
client->browser()->UIT_DestroyBrowser();
|
||||
}
|
||||
|
||||
// Clean up anything associated with the WebViewHost widget.
|
||||
GetWebViewHost()->webwidget()->close();
|
||||
webviewhost_.reset();
|
||||
@@ -1171,6 +1191,38 @@ void CefBrowserImpl::UIT_SetZoomLevel(CefFrame* frame, double zoomLevel)
|
||||
frame->Release();
|
||||
}
|
||||
|
||||
void CefBrowserImpl::UIT_ShowDevTools()
|
||||
{
|
||||
REQUIRE_UIT();
|
||||
|
||||
if(!dev_tools_agent_.get())
|
||||
return;
|
||||
|
||||
BrowserDevToolsClient* client = dev_tools_agent_->client();
|
||||
if (!client) {
|
||||
// Create the inspector window.
|
||||
FilePath dir_exe;
|
||||
PathService::Get(base::DIR_EXE, &dir_exe);
|
||||
FilePath devtools_path =
|
||||
dir_exe.AppendASCII("resources/inspector/devtools.html");
|
||||
|
||||
CefPopupFeatures features;
|
||||
CefRefPtr<CefBrowserImpl> browser =
|
||||
UIT_CreatePopupWindow(devtools_path.value(), features);
|
||||
browser->CreateDevToolsClient(dev_tools_agent_.get());
|
||||
browser->UIT_Show(WebKit::WebNavigationPolicyNewWindow);
|
||||
} else {
|
||||
// Give focus to the existing inspector window.
|
||||
client->browser()->UIT_Show(WebKit::WebNavigationPolicyNewWindow);
|
||||
}
|
||||
}
|
||||
|
||||
void CefBrowserImpl::CreateDevToolsClient(BrowserDevToolsAgent *agent)
|
||||
{
|
||||
dev_tools_client_.reset(new BrowserDevToolsClient(this, agent));
|
||||
}
|
||||
|
||||
|
||||
// CefFrameImpl
|
||||
|
||||
bool CefFrameImpl::IsFocused()
|
||||
|
@@ -9,6 +9,8 @@
|
||||
#include "include/cef.h"
|
||||
|
||||
#include "webview_host.h"
|
||||
#include "browser_devtools_agent.h"
|
||||
#include "browser_devtools_client.h"
|
||||
#include "browser_webview_delegate.h"
|
||||
#include "browser_navigation_controller.h"
|
||||
#include "cef_thread.h"
|
||||
@@ -65,6 +67,8 @@ public:
|
||||
virtual void StopFinding(bool clearSelection);
|
||||
virtual double GetZoomLevel();
|
||||
virtual void SetZoomLevel(double zoomLevel);
|
||||
virtual void ShowDevTools();
|
||||
virtual void CloseDevTools();
|
||||
|
||||
// CefFrames are light-weight objects managed by the browser and loosely
|
||||
// coupled to a WebFrame object by name. If a CefFrame object does not
|
||||
@@ -232,12 +236,17 @@ public:
|
||||
const WebKit::WebRect& selection_rect,
|
||||
int active_match_ordinal, bool final_update);
|
||||
void UIT_SetZoomLevel(CefFrame* frame, double zoomLevel);
|
||||
void UIT_ShowDevTools();
|
||||
void UIT_CloseDevTools();
|
||||
|
||||
static bool ImplementsThreadSafeReferenceCounting() { return true; }
|
||||
|
||||
const CefBrowserSettings& settings() const { return settings_; }
|
||||
const FilePath& file_system_root() const { return file_system_root_.path(); }
|
||||
|
||||
protected:
|
||||
void CreateDevToolsClient(BrowserDevToolsAgent* agent);
|
||||
|
||||
protected:
|
||||
CefWindowInfo window_info_;
|
||||
CefBrowserSettings settings_;
|
||||
@@ -250,6 +259,9 @@ protected:
|
||||
scoped_ptr<BrowserWebViewDelegate> popup_delegate_;
|
||||
scoped_ptr<BrowserNavigationController> nav_controller_;
|
||||
|
||||
scoped_ptr<BrowserDevToolsAgent> dev_tools_agent_;
|
||||
scoped_ptr<BrowserDevToolsClient> dev_tools_client_;
|
||||
|
||||
CefString title_;
|
||||
|
||||
#if defined(OS_WIN)
|
||||
|
@@ -41,16 +41,22 @@ void CefBrowserImpl::UIT_CreateBrowser(const CefString& url)
|
||||
|
||||
// Add the new browser to the list maintained by the context
|
||||
_Context->AddBrowser(this);
|
||||
|
||||
|
||||
if (!settings_.developer_tools_disabled)
|
||||
dev_tools_agent_.reset(new BrowserDevToolsAgent());
|
||||
|
||||
WebPreferences prefs;
|
||||
BrowserToWebSettings(settings_, prefs);
|
||||
|
||||
// Create the webview host object
|
||||
webviewhost_.reset(
|
||||
WebViewHost::Create(window_info_.m_ParentWidget, gfx::Rect(),
|
||||
delegate_.get(), NULL, prefs));
|
||||
delegate_.get(), dev_tools_agent_.get(), prefs));
|
||||
delegate_->RegisterDragDrop();
|
||||
|
||||
|
||||
if (!settings_.developer_tools_disabled)
|
||||
dev_tools_agent_->SetWebView(webviewhost_->webview());
|
||||
|
||||
window_info_.m_Widget = webviewhost_->view_handle();
|
||||
|
||||
if(handler_.get()) {
|
||||
@@ -128,3 +134,14 @@ int CefBrowserImpl::UIT_GetPagesCount(WebKit::WebFrame* frame)
|
||||
NOTIMPLEMENTED();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void CefBrowserImpl::UIT_CloseDevTools()
|
||||
{
|
||||
REQUIRE_UIT();
|
||||
|
||||
if(!dev_tools_agent_.get())
|
||||
return;
|
||||
|
||||
// TODO(port): Add implementation.
|
||||
NOTIMPLEMENTED();
|
||||
}
|
||||
|
@@ -40,7 +40,10 @@ void CefBrowserImpl::UIT_CreateBrowser(const CefString& url)
|
||||
|
||||
// Add the new browser to the list maintained by the context
|
||||
_Context->AddBrowser(this);
|
||||
|
||||
|
||||
if (!settings_.developer_tools_disabled)
|
||||
dev_tools_agent_.reset(new BrowserDevToolsAgent());
|
||||
|
||||
NSView* parentView = (NSView*)window_info_.m_ParentView;
|
||||
gfx::Rect contentRect(window_info_.m_x, window_info_.m_y,
|
||||
window_info_.m_nWidth, window_info_.m_nHeight);
|
||||
@@ -51,9 +54,12 @@ void CefBrowserImpl::UIT_CreateBrowser(const CefString& url)
|
||||
// Create the webview host object
|
||||
webviewhost_.reset(
|
||||
WebViewHost::Create(parentView, contentRect, delegate_.get(),
|
||||
NULL, prefs));
|
||||
dev_tools_agent_.get(), prefs));
|
||||
delegate_->RegisterDragDrop();
|
||||
|
||||
|
||||
if (!settings_.developer_tools_disabled)
|
||||
dev_tools_agent_->SetWebView(webviewhost_->webview());
|
||||
|
||||
BrowserWebView* browserView = (BrowserWebView*)webviewhost_->view_handle();
|
||||
browserView.browser = this;
|
||||
window_info_.m_View = (void*)browserView;
|
||||
@@ -137,3 +143,14 @@ int CefBrowserImpl::UIT_GetPagesCount(WebKit::WebFrame* frame)
|
||||
NOTIMPLEMENTED();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void CefBrowserImpl::UIT_CloseDevTools()
|
||||
{
|
||||
REQUIRE_UIT();
|
||||
|
||||
if(!dev_tools_agent_.get())
|
||||
return;
|
||||
|
||||
// TODO(port): Add implementation.
|
||||
NOTIMPLEMENTED();
|
||||
}
|
||||
|
@@ -112,7 +112,10 @@ void CefBrowserImpl::UIT_CreateBrowser(const CefString& url)
|
||||
// Set window user data to this object for future reference from the window
|
||||
// procedure
|
||||
app::win::SetWindowUserData(window_info_.m_hWnd, this);
|
||||
|
||||
|
||||
if (!settings_.developer_tools_disabled)
|
||||
dev_tools_agent_.reset(new BrowserDevToolsAgent());
|
||||
|
||||
// Add a reference that will be released in UIT_DestroyBrowser().
|
||||
AddRef();
|
||||
|
||||
@@ -125,7 +128,10 @@ void CefBrowserImpl::UIT_CreateBrowser(const CefString& url)
|
||||
// Create the webview host object
|
||||
webviewhost_.reset(
|
||||
WebViewHost::Create(window_info_.m_hWnd, gfx::Rect(), delegate_.get(),
|
||||
NULL, prefs));
|
||||
dev_tools_agent_.get(), prefs));
|
||||
|
||||
if (!settings_.developer_tools_disabled)
|
||||
dev_tools_agent_->SetWebView(webviewhost_->webview());
|
||||
|
||||
if (!settings_.drag_drop_disabled)
|
||||
delegate_->RegisterDragDrop();
|
||||
@@ -481,3 +487,15 @@ int CefBrowserImpl::UIT_GetPagesCount(WebKit::WebFrame* frame)
|
||||
|
||||
return page_count;
|
||||
}
|
||||
|
||||
void CefBrowserImpl::UIT_CloseDevTools()
|
||||
{
|
||||
REQUIRE_UIT();
|
||||
|
||||
if(!dev_tools_agent_.get())
|
||||
return;
|
||||
|
||||
BrowserDevToolsClient* client = dev_tools_agent_->client();
|
||||
if (client)
|
||||
PostMessage(client->browser()->GetMainWndHandle(), WM_CLOSE, 0, 0);
|
||||
}
|
||||
|
@@ -91,7 +91,7 @@ void BrowserToWebSettings(const CefBrowserSettings& cef, WebPreferences& web)
|
||||
web.loads_images_automatically = !cef.image_load_disabled;
|
||||
web.plugins_enabled = !cef.plugins_disabled;
|
||||
web.dom_paste_enabled = !cef.dom_paste_disabled;
|
||||
web.developer_extras_enabled = false;
|
||||
web.developer_extras_enabled = !cef.developer_tools_disabled;
|
||||
web.inspector_settings.clear();
|
||||
web.site_specific_quirks_enabled = !cef.site_specific_quirks_disabled;
|
||||
web.shrinks_standalone_images_to_fit = cef.shrink_standalone_images_to_fit;
|
||||
|
@@ -754,7 +754,8 @@ void BrowserWebViewDelegate::didClearWindowObject(WebFrame* frame) {
|
||||
|
||||
void BrowserWebViewDelegate::didReceiveTitle(
|
||||
WebFrame* frame, const WebString& title) {
|
||||
if (frame == top_loading_frame_ && is_main_content_) {
|
||||
if (top_loading_frame_ == NULL ||
|
||||
(frame == top_loading_frame_ && is_main_content_)) {
|
||||
CefString titleStr = string16(title);
|
||||
browser_->UIT_SetTitle(titleStr);
|
||||
CefRefPtr<CefHandler> handler = browser_->GetHandler();
|
||||
|
@@ -58,8 +58,8 @@ WebWidget* BrowserWebViewDelegate::createPopupMenu(
|
||||
void BrowserWebViewDelegate::show(WebNavigationPolicy) {
|
||||
if (WebWidgetHost* host = GetWidgetHost()) {
|
||||
HWND root = GetAncestor(host->view_handle(), GA_ROOT);
|
||||
ShowWindow(root, SW_SHOW);
|
||||
UpdateWindow(root);
|
||||
ShowWindow(root, SW_SHOWNORMAL);
|
||||
SetWindowPos(root, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user