15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Apple Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer.
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer in the
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    documentation and/or other materials provided with the distribution.
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THE POSSIBILITY OF SUCH DAMAGE.
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef UserGestureIndicator_h
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define UserGestureIndicator_h
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
291e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/PlatformExport.h"
30e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/Noncopyable.h"
31e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/RefCounted.h"
32e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/RefPtr.h"
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
34c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)class UserGestureIndicator;
3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)enum ProcessingUserGestureState {
39926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    DefinitelyProcessingNewUserGesture,
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DefinitelyProcessingUserGesture,
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PossiblyProcessingUserGesture,
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DefinitelyNotProcessingUserGesture
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
451e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)class PLATFORM_EXPORT UserGestureToken : public RefCounted<UserGestureToken> {
46926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)public:
47926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    virtual ~UserGestureToken() { }
48926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    virtual bool hasGestures() const = 0;
49e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    virtual void setOutOfProcess() = 0;
503c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    virtual void setJavascriptPrompt() = 0;
51926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)};
52926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
531e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)class PLATFORM_EXPORT UserGestureIndicatorDisabler {
5453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    WTF_MAKE_NONCOPYABLE(UserGestureIndicatorDisabler);
5553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)public:
5653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    UserGestureIndicatorDisabler();
5753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    ~UserGestureIndicatorDisabler();
5853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
5953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)private:
6053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    ProcessingUserGestureState m_savedState;
6153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    UserGestureIndicator* m_savedIndicator;
6253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)};
63926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
641e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)class PLATFORM_EXPORT UserGestureIndicator {
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WTF_MAKE_NONCOPYABLE(UserGestureIndicator);
6653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    friend class UserGestureIndicatorDisabler;
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    static bool processingUserGesture();
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    static bool consumeUserGesture();
70926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    static UserGestureToken* currentToken();
71c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    static void clearProcessedUserGestureSinceLoad();
72c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    static bool processedUserGestureSinceLoad();
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    explicit UserGestureIndicator(ProcessingUserGestureState);
75926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    explicit UserGestureIndicator(PassRefPtr<UserGestureToken>);
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ~UserGestureIndicator();
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private:
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    static ProcessingUserGestureState s_state;
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    static UserGestureIndicator* s_topmostIndicator;
82c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    static bool s_processedUserGestureSinceLoad;
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ProcessingUserGestureState m_previousState;
84926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    RefPtr<UserGestureToken> m_token;
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif
90