| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/debugger/debugger_node.h" | 5 #include "chrome/browser/debugger/debugger_node.h" |
| 6 | 6 |
| 7 #include "base/process_util.h" | 7 #include "base/process_util.h" |
| 8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
| 9 #include "chrome/browser/browser.h" | 9 #include "chrome/browser/browser.h" |
| 10 #include "chrome/browser/browser_list.h" | 10 #include "chrome/browser/browser_list.h" |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 v8::Local<v8::External> node = v8::External::New(wrap); | 62 v8::Local<v8::External> node = v8::External::New(wrap); |
| 63 // TODO(erikkay): cache these templates? | 63 // TODO(erikkay): cache these templates? |
| 64 v8::Local<v8::FunctionTemplate> templ = v8::FunctionTemplate::New(); | 64 v8::Local<v8::FunctionTemplate> templ = v8::FunctionTemplate::New(); |
| 65 if (IsFunction()) { | 65 if (IsFunction()) { |
| 66 templ->SetCallHandler(&DebuggerNode::NodeFunc, node); | 66 templ->SetCallHandler(&DebuggerNode::NodeFunc, node); |
| 67 v8::Local<v8::Function> f = templ->GetFunction(); | 67 v8::Local<v8::Function> f = templ->GetFunction(); |
| 68 return f; | 68 return f; |
| 69 } | 69 } |
| 70 v8::Local<v8::ObjectTemplate> instance = templ->InstanceTemplate(); | 70 v8::Local<v8::ObjectTemplate> instance = templ->InstanceTemplate(); |
| 71 if (IsObject()) { | 71 if (IsObject()) { |
| 72 instance->SetNamedPropertyHandler(&DebuggerNode::NodeGetter, 0, 0, 0, 0, nod
e); | 72 instance->SetNamedPropertyHandler(&DebuggerNode::NodeGetter, 0, 0, 0, 0, |
| 73 node); |
| 73 // TODO(erikkay): verify that the interceptor does not have to be | 74 // TODO(erikkay): verify that the interceptor does not have to be |
| 74 // behind the object | 75 // behind the object |
| 75 } | 76 } |
| 76 if (IsCollection()) { | 77 if (IsCollection()) { |
| 77 instance->SetIndexedPropertyHandler(&DebuggerNode::NodeIndex, 0, 0, 0, 0, no
de); | 78 instance->SetIndexedPropertyHandler(&DebuggerNode::NodeIndex, 0, 0, 0, 0, |
| 79 node); |
| 78 } | 80 } |
| 79 v8::Local<v8::Object> ret = instance->NewInstance(); | 81 v8::Local<v8::Object> ret = instance->NewInstance(); |
| 80 v8::Persistent<v8::Object> p = v8::Persistent<v8::Object>::New(ret); | 82 v8::Persistent<v8::Object> p = v8::Persistent<v8::Object>::New(ret); |
| 81 p.MakeWeak(wrap, &DebuggerShell::HandleWeakReference); | 83 p.MakeWeak(wrap, &DebuggerShell::HandleWeakReference); |
| 82 return ret; | 84 return ret; |
| 83 } | 85 } |
| 84 | 86 |
| 85 v8::Handle<v8::Value> DebuggerNode::NodeGetter(v8::Local<v8::String> prop, | 87 v8::Handle<v8::Value> DebuggerNode::NodeGetter(v8::Local<v8::String> prop, |
| 86 const v8::AccessorInfo& info) { | 88 const v8::AccessorInfo& info) { |
| 87 DebuggerNodeWrapper* w = | 89 DebuggerNodeWrapper* w = static_cast<DebuggerNodeWrapper*>(v8::External::Cast( |
| 88 static_cast<DebuggerNodeWrapper*>(v8::External::Cast(*info.Data())->Value())
; | 90 *info.Data())->Value()); |
| 89 DebuggerNode* n = w->node(); | 91 DebuggerNode* n = w->node(); |
| 90 if (n->IsValid() && n->IsObject()) { | 92 if (n->IsValid() && n->IsObject()) { |
| 91 return n->PropGetter(prop, info); | 93 return n->PropGetter(prop, info); |
| 92 } else { | 94 } else { |
| 93 return v8::Undefined(); | 95 return v8::Undefined(); |
| 94 } | 96 } |
| 95 } | 97 } |
| 96 | 98 |
| 97 v8::Handle<v8::Value> DebuggerNode::NodeIndex(uint32_t index, | 99 v8::Handle<v8::Value> DebuggerNode::NodeIndex(uint32_t index, |
| 98 const v8::AccessorInfo& info) { | 100 const v8::AccessorInfo& info) { |
| 99 DebuggerNodeWrapper* w = | 101 DebuggerNodeWrapper* w = static_cast<DebuggerNodeWrapper*>(v8::External::Cast( |
| 100 static_cast<DebuggerNodeWrapper*>(v8::External::Cast(*info.Data())->Value())
; | 102 *info.Data())->Value()); |
| 101 DebuggerNode* n = w->node(); | 103 DebuggerNode* n = w->node(); |
| 102 if (n->IsValid() && n->IsCollection()) { | 104 if (n->IsValid() && n->IsCollection()) { |
| 103 return n->IndexGetter(index, info); | 105 return n->IndexGetter(index, info); |
| 104 } else { | 106 } else { |
| 105 return v8::Undefined(); | 107 return v8::Undefined(); |
| 106 } | 108 } |
| 107 } | 109 } |
| 108 | 110 |
| 109 v8::Handle<v8::Value> DebuggerNode::NodeFunc(const v8::Arguments& args) { | 111 v8::Handle<v8::Value> DebuggerNode::NodeFunc(const v8::Arguments& args) { |
| 110 DebuggerNodeWrapper* w = | 112 DebuggerNodeWrapper* w = static_cast<DebuggerNodeWrapper*>(v8::External::Cast( |
| 111 static_cast<DebuggerNodeWrapper*>(v8::External::Cast(*args.Data())->Value())
; | 113 *args.Data())->Value()); |
| 112 DebuggerNode* n = w->node(); | 114 DebuggerNode* n = w->node(); |
| 113 if (n->IsValid() && n->IsFunction()) { | 115 if (n->IsValid() && n->IsFunction()) { |
| 114 return n->Function(args); | 116 return n->Function(args); |
| 115 } else { | 117 } else { |
| 116 return v8::Undefined(); | 118 return v8::Undefined(); |
| 117 } | 119 } |
| 118 } | 120 } |
| 119 | 121 |
| 120 | 122 |
| 121 | 123 |
| 122 ///////////////////////////////////////////// | 124 ///////////////////////////////////////////// |
| 123 | 125 |
| 124 ChromeNode::ChromeNode(DebuggerShell* debugger) { | 126 ChromeNode::ChromeNode(DebuggerShell* debugger) { |
| 125 debugger_ = debugger; | 127 debugger_ = debugger; |
| 126 } | 128 } |
| 127 | 129 |
| 128 ChromeNode::~ChromeNode() { | 130 ChromeNode::~ChromeNode() { |
| 129 } | 131 } |
| 130 | 132 |
| 131 v8::Handle<v8::Value> ChromeNode::PropGetter(v8::Handle<v8::String> prop, | 133 v8::Handle<v8::Value> ChromeNode::PropGetter(v8::Handle<v8::String> prop, |
| 132 const v8::AccessorInfo& info) { | 134 const v8::AccessorInfo& info) { |
| 133 if (prop->Equals(v8::String::New("pid"))) { | 135 if (prop->Equals(v8::String::New("pid"))) { |
| 134 return v8::Number::New(base::GetCurrentProcId()); | 136 return v8::Number::New(base::GetCurrentProcId()); |
| 135 } else if (prop->Equals(v8::String::New("browser"))) { | 137 } else if (prop->Equals(v8::String::New("browser"))) { |
| 136 BrowserListNode *node = BrowserListNode::BrowserList(); | 138 BrowserListNode *node = BrowserListNode::BrowserList(); |
| 137 return node->NewInstance(); | 139 return node->NewInstance(); |
| 138 } else if (prop->Equals(v8::String::New("setDebuggerReady"))) { | 140 } else if (prop->Equals(v8::String::New("setDebuggerReady"))) { |
| 139 FunctionNode<DebuggerShell>* f = | 141 FunctionNode<DebuggerShell>* f = |
| 140 new FunctionNode<DebuggerShell>(DebuggerShell::SetDebuggerReady, debugger_
); | 142 new FunctionNode<DebuggerShell>(DebuggerShell::SetDebuggerReady, |
| 143 debugger_); |
| 141 return f->NewInstance(); | 144 return f->NewInstance(); |
| 142 } else if (prop->Equals(v8::String::New("setDebuggerBreak"))) { | 145 } else if (prop->Equals(v8::String::New("setDebuggerBreak"))) { |
| 143 FunctionNode<DebuggerShell>* f = | 146 FunctionNode<DebuggerShell>* f = |
| 144 new FunctionNode<DebuggerShell>(DebuggerShell::SetDebuggerBreak, debugger_
); | 147 new FunctionNode<DebuggerShell>(DebuggerShell::SetDebuggerBreak, |
| 148 debugger_); |
| 145 return f->NewInstance(); | 149 return f->NewInstance(); |
| 146 } else if (prop->Equals(v8::String::New("foo"))) { | 150 } else if (prop->Equals(v8::String::New("foo"))) { |
| 147 return v8::Undefined(); | 151 return v8::Undefined(); |
| 148 } else { | 152 } else { |
| 149 return prop; | 153 return prop; |
| 150 } | 154 } |
| 151 } | 155 } |
| 152 | 156 |
| 153 void ChromeNode::StopObserving(NotificationService *service) { | 157 void ChromeNode::StopObserving(NotificationService *service) { |
| 154 } | 158 } |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 386 } | 390 } |
| 387 | 391 |
| 388 | 392 |
| 389 ////////////////////////////////// | 393 ////////////////////////////////// |
| 390 | 394 |
| 391 template<class T> | 395 template<class T> |
| 392 v8::Handle<v8::Value> FunctionNode<T>::Function(const v8::Arguments &args) { | 396 v8::Handle<v8::Value> FunctionNode<T>::Function(const v8::Arguments &args) { |
| 393 return function_(args, data_); | 397 return function_(args, data_); |
| 394 } | 398 } |
| 395 | 399 |
| OLD | NEW |