diff options
author | initial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-07-26 23:55:29 +0000 |
---|---|---|
committer | initial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-07-26 23:55:29 +0000 |
commit | 09911bf300f1a419907a9412154760efd0b7abc3 (patch) | |
tree | f131325fb4e2ad12c6d3504ab75b16dd92facfed /chrome/browser/debugger/debugger_view.cc | |
parent | 586acc5fe142f498261f52c66862fa417c3d52d2 (diff) | |
download | chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.zip chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.tar.gz chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.tar.bz2 |
Add chrome to the repository.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/debugger/debugger_view.cc')
-rw-r--r-- | chrome/browser/debugger/debugger_view.cc | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/chrome/browser/debugger/debugger_view.cc b/chrome/browser/debugger/debugger_view.cc new file mode 100644 index 0000000..14b1733 --- /dev/null +++ b/chrome/browser/debugger/debugger_view.cc @@ -0,0 +1,135 @@ +// Copyright 2008, Google Inc. +// 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 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. + +#include "chrome/browser/debugger/debugger_window.h" + +#include "base/logging.h" +#include "base/string_util.h" +#include "base/json_writer.h" +#include "base/values.h" +#include "chrome/browser/browser_list.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/render_view_host.h" +#include "chrome/browser/debugger/debugger_view.h" +#include "chrome/browser/standard_layout.h" +#include "chrome/browser/tab_contents.h" +#include "chrome/browser/tab_contents_container_view.h" +#include "chrome/browser/view_ids.h" +#include "chrome/browser/web_contents.h" +#include "chrome/common/gfx/chrome_canvas.h" +#include "chrome/common/resource_bundle.h" +#include "chrome/views/grid_layout.h" +#include "chrome/views/native_scroll_bar.h" +#include "chrome/views/scroll_view.h" +#include "chrome/views/text_field.h" +#include "chrome/views/view.h" + + +DebuggerView::DebuggerView(ChromeViews::TextField::Controller* controller) { + command_text_ = new ChromeViews::TextField(); + command_text_->SetFont(font_); + command_text_->SetController(controller); + AddChildView(command_text_); + web_container_ = new TabContentsContainerView(); + AddChildView(web_container_); +} + +DebuggerView::~DebuggerView() { +} + +void DebuggerView::GetPreferredSize(CSize* out) { + out->cx = 700; + out->cy = 400; +} + +void DebuggerView::Layout() { + int cmd_height = 20; + web_container_->SetBounds(0, 0, GetWidth(), GetHeight() - cmd_height); + command_text_->SetBounds(0, GetHeight() - cmd_height, GetWidth(), cmd_height); +} + +void DebuggerView::Paint(ChromeCanvas* canvas) { +#ifndef NDEBUG + SkPaint paint; + canvas->FillRectInt(SK_ColorCYAN, bounds_.left, bounds_.top, + bounds_.Width(), bounds_.Height()); +#endif +} + +void DebuggerView::Output(const std::string& out) { + Output(UTF8ToWide(out)); +} + +void DebuggerView::Output(const std::wstring& out) { + if (web_contents_->is_loading()) { + Sleep(100); + } + Value* str_value = Value::CreateStringValue(out); + std::string json; + JSONWriter::Write(str_value, false, &json); + const std::string js = + StringPrintf("javascript:void(appendText(%s))", json.c_str()); + web_contents_->render_view_host()->ExecuteJavascriptInWebFrame(L"", + UTF8ToWide(js)); +} + +void DebuggerView::OnInit() { + // We can't create the WebContents until we've actually been put into a real + // view hierarchy somewhere. + Profile* profile = BrowserList::GetLastActive()->profile(); + TabContents* tc = TabContents::CreateWithType(TAB_CONTENTS_WEB, + ::GetDesktopWindow(), profile, NULL); + web_contents_ = tc->AsWebContents(); + web_contents_->SetupController(profile); + web_contents_->set_delegate(this); + web_container_->SetTabContents(web_contents_); + + // TODO(erikkay): move this into chrome-tools scheme when that gets added. + // This will allow us to do some spiffier things as well as making this + // HTML easier to maintain. + GURL contents("data:text/html,<html><head><script>function appendText(txt){var output = document.getElementById('output'); output.appendChild(document.createTextNode(txt)); output.appendChild(document.createElement('br')); document.body.scrollTop = document.body.scrollHeight;};</script><style type='text/css'>body{margin:0px;padding:0px;}#output { font-family: monospace; background-} #outer { width: 100%; height: 100%; white-space: pre-wrap;}</style></head><body><table id='outer'><tr><td valign='bottom' id='output'>JavaScript Debugger<br/></td></tr></table></body></html>"); + web_contents_->controller()->LoadURL(contents, PageTransition::START_PAGE); +} + +void DebuggerView::OnShow() { + command_text_->RequestFocus(); +} + +void DebuggerView::OnClose() { + web_container_->SetTabContents(NULL); + + web_contents_->CloseContents(); +} + +void DebuggerView::OpenURLFromTab(TabContents* source, + const GURL& url, + WindowOpenDisposition disposition, + PageTransition::Type transition) { + BrowserList::GetLastActive()->OpenURL(url, disposition, transition); +} |