1a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// found in the LICENSE file. 4a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 5a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#ifndef EXTENSIONS_RENDERER_EVENT_BINDINGS_H_ 6a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#define EXTENSIONS_RENDERER_EVENT_BINDINGS_H_ 7a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "extensions/renderer/object_backed_native_handler.h" 9a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "v8/include/v8.h" 10a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace base { 120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass DictionaryValue; 130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 15a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochnamespace extensions { 16a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass Dispatcher; 170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass EventFilter; 180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass EventFilteringInfo; 190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass EventMatcher; 20a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 21a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// This class deals with the javascript bindings related to Event objects. 220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass EventBindings : public ObjectBackedNativeHandler { 23a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch public: 240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EventBindings(Dispatcher* dispatcher, ScriptContext* context); 250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual ~EventBindings(); 260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch private: 280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Attach an event name to an object. 290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // |event_name| The name of the event to attach. 300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void AttachEvent(const v8::FunctionCallbackInfo<v8::Value>& args); 310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Detach an event name from an object. 330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // |event_name| The name of the event to stop listening to. 340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // |is_manual| True if this detach was done by the user via removeListener() 350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // as opposed to automatically during shutdown, in which case we should inform 360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // the browser we are no longer interested in that event. 370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void DetachEvent(const v8::FunctionCallbackInfo<v8::Value>& args); 380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // MatcherID AttachFilteredEvent(string event_name, object filter) 400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // |event_name| Name of the event to attach. 410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // |filter| Which instances of the named event are we interested in. 420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // returns the id assigned to the listener, which will be returned from calls 430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // to MatchAgainstEventFilter where this listener matches. 440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void AttachFilteredEvent(const v8::FunctionCallbackInfo<v8::Value>& args); 450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // void DetachFilteredEvent(int id, bool manual) 470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // id - Id of the event to detach. 480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // manual - false if this is part of the extension unload process where all 490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // listeners are automatically detached. 500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void DetachFilteredEvent(const v8::FunctionCallbackInfo<v8::Value>& args); 510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void MatchAgainstEventFilter(const v8::FunctionCallbackInfo<v8::Value>& args); 530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Dispatcher* dispatcher_; 550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<EventMatcher> ParseEventMatcher( 560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::DictionaryValue* filter_dict); 57a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}; 58a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 59a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} // namespace extensions 60a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 61a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif // EXTENSIONS_RENDERER_EVENT_BINDINGS_H_ 62