OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2007-2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2007-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 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 for (size_t i = 0; i < m_args.size(); ++i) | 68 for (size_t i = 0; i < m_args.size(); ++i) |
69 m_args[i].dispose(); | 69 m_args[i].dispose(); |
70 } | 70 } |
71 | 71 |
72 void ScheduledAction::execute(ExecutionContext* context) | 72 void ScheduledAction::execute(ExecutionContext* context) |
73 { | 73 { |
74 if (context->isDocument()) { | 74 if (context->isDocument()) { |
75 Frame* frame = toDocument(context)->frame(); | 75 Frame* frame = toDocument(context)->frame(); |
76 if (!frame) | 76 if (!frame) |
77 return; | 77 return; |
78 if (!frame->script()->canExecuteScripts(AboutToExecuteScript)) | 78 if (!frame->script().canExecuteScripts(AboutToExecuteScript)) |
79 return; | 79 return; |
80 execute(frame); | 80 execute(frame); |
81 } else { | 81 } else { |
82 execute(toWorkerGlobalScope(context)); | 82 execute(toWorkerGlobalScope(context)); |
83 } | 83 } |
84 } | 84 } |
85 | 85 |
86 void ScheduledAction::execute(Frame* frame) | 86 void ScheduledAction::execute(Frame* frame) |
87 { | 87 { |
88 v8::HandleScope handleScope(m_isolate); | 88 v8::HandleScope handleScope(m_isolate); |
89 | 89 |
90 v8::Handle<v8::Context> context = m_context.newLocal(m_isolate); | 90 v8::Handle<v8::Context> context = m_context.newLocal(m_isolate); |
91 if (context.IsEmpty()) | 91 if (context.IsEmpty()) |
92 return; | 92 return; |
93 | 93 |
94 TRACE_EVENT0("v8", "ScheduledAction::execute"); | 94 TRACE_EVENT0("v8", "ScheduledAction::execute"); |
95 | 95 |
96 if (!m_function.isEmpty()) { | 96 if (!m_function.isEmpty()) { |
97 v8::Context::Scope scope(context); | 97 v8::Context::Scope scope(context); |
98 Vector<v8::Handle<v8::Value> > args; | 98 Vector<v8::Handle<v8::Value> > args; |
99 createLocalHandlesForArgs(&args); | 99 createLocalHandlesForArgs(&args); |
100 frame->script()->callFunction(m_function.newLocal(m_isolate), context->G
lobal(), args.size(), args.data()); | 100 frame->script().callFunction(m_function.newLocal(m_isolate), context->Gl
obal(), args.size(), args.data()); |
101 } else { | 101 } else { |
102 frame->script()->executeScriptAndReturnValue(context, ScriptSourceCode(m
_code)); | 102 frame->script().executeScriptAndReturnValue(context, ScriptSourceCode(m_
code)); |
103 } | 103 } |
104 | 104 |
105 // The frame might be invalid at this point because JavaScript could have re
leased it. | 105 // The frame might be invalid at this point because JavaScript could have re
leased it. |
106 } | 106 } |
107 | 107 |
108 void ScheduledAction::execute(WorkerGlobalScope* worker) | 108 void ScheduledAction::execute(WorkerGlobalScope* worker) |
109 { | 109 { |
110 ASSERT(worker->thread()->isCurrentThread()); | 110 ASSERT(worker->thread()->isCurrentThread()); |
111 v8::HandleScope handleScope(m_isolate); | 111 v8::HandleScope handleScope(m_isolate); |
112 v8::Handle<v8::Context> context = m_context.newLocal(m_isolate); | 112 v8::Handle<v8::Context> context = m_context.newLocal(m_isolate); |
113 ASSERT(!context.IsEmpty()); | 113 ASSERT(!context.IsEmpty()); |
114 v8::Context::Scope scope(context); | 114 v8::Context::Scope scope(context); |
115 if (!m_function.isEmpty()) { | 115 if (!m_function.isEmpty()) { |
116 Vector<v8::Handle<v8::Value> > args; | 116 Vector<v8::Handle<v8::Value> > args; |
117 createLocalHandlesForArgs(&args); | 117 createLocalHandlesForArgs(&args); |
118 V8ScriptRunner::callFunction(m_function.newLocal(m_isolate), worker, con
text->Global(), args.size(), args.data(), m_isolate); | 118 V8ScriptRunner::callFunction(m_function.newLocal(m_isolate), worker, con
text->Global(), args.size(), args.data(), m_isolate); |
119 } else | 119 } else |
120 worker->script()->evaluate(m_code); | 120 worker->script()->evaluate(m_code); |
121 } | 121 } |
122 | 122 |
123 void ScheduledAction::createLocalHandlesForArgs(Vector<v8::Handle<v8::Value> >*
handles) | 123 void ScheduledAction::createLocalHandlesForArgs(Vector<v8::Handle<v8::Value> >*
handles) |
124 { | 124 { |
125 handles->reserveCapacity(m_args.size()); | 125 handles->reserveCapacity(m_args.size()); |
126 for (size_t i = 0; i < m_args.size(); ++i) | 126 for (size_t i = 0; i < m_args.size(); ++i) |
127 handles->append(m_args[i].newLocal(m_isolate)); | 127 handles->append(m_args[i].newLocal(m_isolate)); |
128 } | 128 } |
129 | 129 |
130 } // namespace WebCore | 130 } // namespace WebCore |
OLD | NEW |