blob: fc5589a629b714e556fcb853ad8b5d932ad87304 [file] [log] [blame]
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +01001/*
2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#ifndef V8MutationCallback_h
27#define V8MutationCallback_h
28
29#include "bindings/v8/ActiveDOMCallback.h"
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010030#include "bindings/v8/ScopedPersistent.h"
Bo Liuf91f5fa2014-05-01 10:37:55 -070031#include "bindings/v8/ScriptState.h"
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010032#include "core/dom/MutationCallback.h"
Torne (Richard Coles)a854de02013-12-18 16:25:25 +000033#include "wtf/OwnPtr.h"
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010034#include "wtf/RefPtr.h"
Torne (Richard Coles)a854de02013-12-18 16:25:25 +000035#include <v8.h>
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010036
37namespace WebCore {
38
Torne (Richard Coles)1e202182013-10-18 15:46:42 +010039class ExecutionContext;
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010040
Torne (Richard Coles)09380292014-02-21 12:17:33 +000041class V8MutationCallback FINAL : public MutationCallback, public ActiveDOMCallback {
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010042public:
Torne (Richard Coles)d6cdb822014-06-03 10:59:05 +010043 static PassOwnPtr<V8MutationCallback> create(v8::Handle<v8::Function> callback, v8::Handle<v8::Object> owner, ScriptState* scriptState)
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010044 {
Torne (Richard Coles)d6cdb822014-06-03 10:59:05 +010045 return adoptPtr(new V8MutationCallback(callback, owner, scriptState));
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010046 }
47
Ben Murdoch10f88d52014-04-24 10:50:33 +010048 virtual void call(const WillBeHeapVector<RefPtrWillBeMember<MutationRecord> >&, MutationObserver*) OVERRIDE;
Torne (Richard Coles)1e202182013-10-18 15:46:42 +010049 virtual ExecutionContext* executionContext() const OVERRIDE { return ContextLifecycleObserver::executionContext(); }
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010050
51private:
Torne (Richard Coles)d6cdb822014-06-03 10:59:05 +010052 V8MutationCallback(v8::Handle<v8::Function>, v8::Handle<v8::Object>, ScriptState*);
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010053
Torne (Richard Coles)a854de02013-12-18 16:25:25 +000054 static void setWeakCallback(const v8::WeakCallbackData<v8::Function, V8MutationCallback>&);
Torne (Richard Coles)93ac45c2013-05-29 14:40:20 +010055
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010056 ScopedPersistent<v8::Function> m_callback;
Bo Liuf91f5fa2014-05-01 10:37:55 -070057 RefPtr<ScriptState> m_scriptState;
Torne (Richard Coles)53e740f2013-05-09 18:38:43 +010058};
59
60}
61
62#endif // V8MutationCallback_h