OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008, 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2009 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 worker_global_scope_(nullptr) { | 56 worker_global_scope_(nullptr) { |
57 if (IsMainThread()) | 57 if (IsMainThread()) |
58 InstanceCounters::IncrementCounter( | 58 InstanceCounters::IncrementCounter( |
59 InstanceCounters::kJSEventListenerCounter); | 59 InstanceCounters::kJSEventListenerCounter); |
60 else | 60 else |
61 worker_global_scope_ = | 61 worker_global_scope_ = |
62 ToWorkerGlobalScope(CurrentExecutionContext(isolate)); | 62 ToWorkerGlobalScope(CurrentExecutionContext(isolate)); |
63 } | 63 } |
64 | 64 |
65 V8AbstractEventListener::~V8AbstractEventListener() { | 65 V8AbstractEventListener::~V8AbstractEventListener() { |
66 ASSERT(listener_.IsEmpty()); | 66 DCHECK(listener_.IsEmpty()); |
67 if (IsMainThread()) | 67 if (IsMainThread()) |
68 InstanceCounters::DecrementCounter( | 68 InstanceCounters::DecrementCounter( |
69 InstanceCounters::kJSEventListenerCounter); | 69 InstanceCounters::kJSEventListenerCounter); |
70 } | 70 } |
71 | 71 |
72 void V8AbstractEventListener::handleEvent(ExecutionContext* execution_context, | 72 void V8AbstractEventListener::handleEvent(ExecutionContext* execution_context, |
73 Event* event) { | 73 Event* event) { |
74 if (!execution_context) | 74 if (!execution_context) |
75 return; | 75 return; |
76 // Don't reenter V8 if execution was terminated in this instance of V8. | 76 // Don't reenter V8 if execution was terminated in this instance of V8. |
77 if (execution_context->IsJSExecutionForbidden()) | 77 if (execution_context->IsJSExecutionForbidden()) |
78 return; | 78 return; |
79 | 79 |
80 // A ScriptState used by the event listener needs to be calculated based on | 80 // A ScriptState used by the event listener needs to be calculated based on |
81 // the ExecutionContext that fired the the event listener and the world | 81 // the ExecutionContext that fired the the event listener and the world |
82 // that installed the event listener. | 82 // that installed the event listener. |
83 ASSERT(event); | 83 DCHECK(event); |
84 v8::HandleScope handle_scope(ToIsolate(execution_context)); | 84 v8::HandleScope handle_scope(ToIsolate(execution_context)); |
85 v8::Local<v8::Context> v8_context = ToV8Context(execution_context, World()); | 85 v8::Local<v8::Context> v8_context = ToV8Context(execution_context, World()); |
86 if (v8_context.IsEmpty()) | 86 if (v8_context.IsEmpty()) |
87 return; | 87 return; |
88 ScriptState* script_state = ScriptState::From(v8_context); | 88 ScriptState* script_state = ScriptState::From(v8_context); |
89 if (!script_state->ContextIsValid()) | 89 if (!script_state->ContextIsValid()) |
90 return; | 90 return; |
91 HandleEvent(script_state, event); | 91 HandleEvent(script_state, event); |
92 } | 92 } |
93 | 93 |
94 void V8AbstractEventListener::HandleEvent(ScriptState* script_state, | 94 void V8AbstractEventListener::HandleEvent(ScriptState* script_state, |
95 Event* event) { | 95 Event* event) { |
96 ScriptState::Scope scope(script_state); | 96 ScriptState::Scope scope(script_state); |
97 | 97 |
98 // Get the V8 wrapper for the event object. | 98 // Get the V8 wrapper for the event object. |
99 v8::Local<v8::Value> js_event = | 99 v8::Local<v8::Value> js_event = |
100 ToV8(event, script_state->GetContext()->Global(), GetIsolate()); | 100 ToV8(event, script_state->GetContext()->Global(), GetIsolate()); |
101 if (js_event.IsEmpty()) | 101 if (js_event.IsEmpty()) |
102 return; | 102 return; |
103 InvokeEventHandler(script_state, event, | 103 InvokeEventHandler(script_state, event, |
104 v8::Local<v8::Value>::New(GetIsolate(), js_event)); | 104 v8::Local<v8::Value>::New(GetIsolate(), js_event)); |
105 } | 105 } |
106 | 106 |
107 void V8AbstractEventListener::SetListenerObject( | 107 void V8AbstractEventListener::SetListenerObject( |
108 v8::Local<v8::Object> listener) { | 108 v8::Local<v8::Object> listener) { |
109 ASSERT(listener_.IsEmpty()); | 109 DCHECK(listener_.IsEmpty()); |
110 // Balanced in wrapperCleared xor clearListenerObject. | 110 // Balanced in wrapperCleared xor clearListenerObject. |
111 if (worker_global_scope_) { | 111 if (worker_global_scope_) { |
112 worker_global_scope_->RegisterEventListener(this); | 112 worker_global_scope_->RegisterEventListener(this); |
113 } else { | 113 } else { |
114 keep_alive_ = this; | 114 keep_alive_ = this; |
115 } | 115 } |
116 listener_.Set(GetIsolate(), listener, this, &WrapperCleared); | 116 listener_.Set(GetIsolate(), listener, this, &WrapperCleared); |
117 } | 117 } |
118 | 118 |
119 void V8AbstractEventListener::InvokeEventHandler( | 119 void V8AbstractEventListener::InvokeEventHandler( |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 DEFINE_TRACE(V8AbstractEventListener) { | 231 DEFINE_TRACE(V8AbstractEventListener) { |
232 visitor->Trace(worker_global_scope_); | 232 visitor->Trace(worker_global_scope_); |
233 EventListener::Trace(visitor); | 233 EventListener::Trace(visitor); |
234 } | 234 } |
235 | 235 |
236 DEFINE_TRACE_WRAPPERS(V8AbstractEventListener) { | 236 DEFINE_TRACE_WRAPPERS(V8AbstractEventListener) { |
237 visitor->TraceWrappers(listener_.Cast<v8::Value>()); | 237 visitor->TraceWrappers(listener_.Cast<v8::Value>()); |
238 } | 238 } |
239 | 239 |
240 } // namespace blink | 240 } // namespace blink |
OLD | NEW |