| Index: content/browser/renderer_host/input/browser_input_event.h
 | 
| diff --git a/content/browser/renderer_host/input/browser_input_event.h b/content/browser/renderer_host/input/browser_input_event.h
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..50dda9cfa1c899466f863040b9408b7dfae0215a
 | 
| --- /dev/null
 | 
| +++ b/content/browser/renderer_host/input/browser_input_event.h
 | 
| @@ -0,0 +1,69 @@
 | 
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved.
 | 
| +// Use of this source code is governed by a BSD-style license that can be
 | 
| +// found in the LICENSE file.
 | 
| +
 | 
| +#ifndef CONTENT_BROWSER_RENDERER_HOST_INPUT_BROWSER_INPUT_EVENT_H_
 | 
| +#define CONTENT_BROWSER_RENDERER_HOST_INPUT_BROWSER_INPUT_EVENT_H_
 | 
| +
 | 
| +#include <vector>
 | 
| +
 | 
| +#include "base/basictypes.h"
 | 
| +#include "base/memory/scoped_vector.h"
 | 
| +#include "content/common/input/input_event.h"
 | 
| +#include "content/common/input/input_event_disposition.h"
 | 
| +
 | 
| +namespace content {
 | 
| +
 | 
| +class BrowserInputEvent;
 | 
| +
 | 
| +// Provides customized dispatch response for BrowserInputEvents.
 | 
| +class BrowserInputEventClient {
 | 
| + public:
 | 
| +  virtual ~BrowserInputEventClient() {}
 | 
| +
 | 
| +  virtual void OnDispatched(const BrowserInputEvent& event,
 | 
| +                            InputEventDisposition disposition) {}
 | 
| +
 | 
| +  // Called if the event went unconsumed and can create followup events. Any
 | 
| +  // events added to |followup| by the client will be inserted into the
 | 
| +  // current input event stream. |followup| will never be NULL.
 | 
| +  virtual void OnDispatched(const BrowserInputEvent& event,
 | 
| +                            InputEventDisposition disposition,
 | 
| +                            ScopedVector<BrowserInputEvent>* followup) {}
 | 
| +};
 | 
| +
 | 
| +// Augmented InputEvent allowing customized dispatch response in the browser.
 | 
| +class CONTENT_EXPORT BrowserInputEvent : public InputEvent {
 | 
| + public:
 | 
| +  // |client| is assumed to be non-NULL.
 | 
| +  static scoped_ptr<BrowserInputEvent> Create(
 | 
| +      int64 id,
 | 
| +      scoped_ptr<InputEvent::Payload> payload,
 | 
| +      BrowserInputEventClient* client);
 | 
| +
 | 
| +  template <typename PayloadType>
 | 
| +  static scoped_ptr<BrowserInputEvent> Create(int64 id,
 | 
| +                                              scoped_ptr<PayloadType> payload,
 | 
| +                                              BrowserInputEventClient* client) {
 | 
| +    return Create(id, payload.template PassAs<InputEvent::Payload>(), client);
 | 
| +  }
 | 
| +
 | 
| +  virtual ~BrowserInputEvent();
 | 
| +
 | 
| +  // |followup_events| must not be NULL, and will only be modified if the
 | 
| +  // event went unconsumed and can create followup events.
 | 
| +  void OnDispatched(InputEventDisposition disposition,
 | 
| +                    ScopedVector<BrowserInputEvent>* followup_events);
 | 
| +
 | 
| + protected:
 | 
| +  explicit BrowserInputEvent(BrowserInputEventClient* client);
 | 
| +
 | 
| +  bool CanCreateFollowupEvents() const;
 | 
| +
 | 
| + private:
 | 
| +  BrowserInputEventClient* client_;
 | 
| +};
 | 
| +
 | 
| +}  // namespace content
 | 
| +
 | 
| +#endif  // CONTENT_BROWSER_RENDERER_HOST_INPUT_BROWSER_INPUT_EVENT_H_
 | 
| 
 |