106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen/*
206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * Copyright (C) 2010 Apple Inc. All rights reserved.
306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen *
406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * Redistribution and use in source and binary forms, with or without
506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * modification, are permitted provided that the following conditions
606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * are met:
706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * 1. Redistributions of source code must retain the above copyright
806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen *    notice, this list of conditions and the following disclaimer.
906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * 2. Redistributions in binary form must reproduce the above copyright
1006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen *    notice, this list of conditions and the following disclaimer in the
1106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen *    documentation and/or other materials provided with the distribution.
1206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen *
1306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
1406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
1506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
1706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
1806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
1906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
2306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * THE POSSIBILITY OF SUCH DAMAGE.
2406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen */
2506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
2606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#ifndef TestInvocation_h
2706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#define TestInvocation_h
2806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
2981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <string>
3006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#include <WebKit2/WKRetainPtr.h>
31ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#include <wtf/Noncopyable.h>
3206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
3306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsennamespace WTR {
3406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
35ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass TestInvocation {
36ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    WTF_MAKE_NONCOPYABLE(TestInvocation);
3706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenpublic:
3881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    TestInvocation(const std::string& pathOrURL);
3906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    ~TestInvocation();
4006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
4181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void setIsPixelTest(const std::string& expectedPixelHash);
4281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
4306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    void invoke();
44db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    void didReceiveMessageFromInjectedBundle(WKStringRef messageName, WKTypeRef messageBody);
45e14391e94c850b8bd03680c23b38978db68687a8John Reck    WKRetainPtr<WKTypeRef> didReceiveSynchronousMessageFromInjectedBundle(WKStringRef messageName, WKTypeRef messageBody);
4606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
4706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenprivate:
4806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    void dump(const char*);
492bde8e466a4451c7319e3a072d118917957d6554Steve Block    void dumpPixelsAndCompareWithExpected(WKImageRef);
5081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
5106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    WKRetainPtr<WKURLRef> m_url;
5281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    std::string m_pathOrURL;
5381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
5481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    bool m_dumpPixels;
5581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    std::string m_expectedPixelHash;
5606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
5706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    // Invocation state
58ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    bool m_gotInitialResponse;
59ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    bool m_gotFinalMessage;
6081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    bool m_gotRepaint;
61ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    bool m_error;
6206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen};
6306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
6406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen} // namespace WTR
6506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
6606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#endif // TestInvocation_h
67