12bde8e466a4451c7319e3a072d118917957d6554Steve Block/*
22bde8e466a4451c7319e3a072d118917957d6554Steve Block * Copyright (C) 2011 Apple Inc. All rights reserved.
32bde8e466a4451c7319e3a072d118917957d6554Steve Block *
42bde8e466a4451c7319e3a072d118917957d6554Steve Block * Redistribution and use in source and binary forms, with or without
52bde8e466a4451c7319e3a072d118917957d6554Steve Block * modification, are permitted provided that the following conditions
62bde8e466a4451c7319e3a072d118917957d6554Steve Block * are met:
72bde8e466a4451c7319e3a072d118917957d6554Steve Block * 1. Redistributions of source code must retain the above copyright
82bde8e466a4451c7319e3a072d118917957d6554Steve Block *    notice, this list of conditions and the following disclaimer.
92bde8e466a4451c7319e3a072d118917957d6554Steve Block * 2. Redistributions in binary form must reproduce the above copyright
102bde8e466a4451c7319e3a072d118917957d6554Steve Block *    notice, this list of conditions and the following disclaimer in the
112bde8e466a4451c7319e3a072d118917957d6554Steve Block *    documentation and/or other materials provided with the distribution.
122bde8e466a4451c7319e3a072d118917957d6554Steve Block *
132bde8e466a4451c7319e3a072d118917957d6554Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
142bde8e466a4451c7319e3a072d118917957d6554Steve Block * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
152bde8e466a4451c7319e3a072d118917957d6554Steve Block * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
162bde8e466a4451c7319e3a072d118917957d6554Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
172bde8e466a4451c7319e3a072d118917957d6554Steve Block * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
182bde8e466a4451c7319e3a072d118917957d6554Steve Block * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
192bde8e466a4451c7319e3a072d118917957d6554Steve Block * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
202bde8e466a4451c7319e3a072d118917957d6554Steve Block * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
212bde8e466a4451c7319e3a072d118917957d6554Steve Block * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
222bde8e466a4451c7319e3a072d118917957d6554Steve Block * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
232bde8e466a4451c7319e3a072d118917957d6554Steve Block * THE POSSIBILITY OF SUCH DAMAGE.
242bde8e466a4451c7319e3a072d118917957d6554Steve Block */
252bde8e466a4451c7319e3a072d118917957d6554Steve Block
262bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "Test.h"
272bde8e466a4451c7319e3a072d118917957d6554Steve Block
282bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "PlatformUtilities.h"
292bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "PlatformWebView.h"
302bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <WebKit2/WKContextPrivate.h>
312bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <WebKit2/WKNumber.h>
322bde8e466a4451c7319e3a072d118917957d6554Steve Block
332bde8e466a4451c7319e3a072d118917957d6554Steve Blocknamespace TestWebKitAPI {
342bde8e466a4451c7319e3a072d118917957d6554Steve Block
352bde8e466a4451c7319e3a072d118917957d6554Steve Blockstatic bool didReceiveMessage;
362bde8e466a4451c7319e3a072d118917957d6554Steve Blockstatic bool canHandleRequest;
372bde8e466a4451c7319e3a072d118917957d6554Steve Block
382bde8e466a4451c7319e3a072d118917957d6554Steve Blockstatic void didReceiveMessageFromInjectedBundle(WKContextRef, WKStringRef messageName, WKTypeRef body, const void*)
392bde8e466a4451c7319e3a072d118917957d6554Steve Block{
402bde8e466a4451c7319e3a072d118917957d6554Steve Block    didReceiveMessage = true;
412bde8e466a4451c7319e3a072d118917957d6554Steve Block
422bde8e466a4451c7319e3a072d118917957d6554Steve Block    TEST_ASSERT(WKStringIsEqualToUTF8CString(messageName, "DidCheckCanHandleRequest"));
432bde8e466a4451c7319e3a072d118917957d6554Steve Block    TEST_ASSERT(WKGetTypeID(body) == WKBooleanGetTypeID());
442bde8e466a4451c7319e3a072d118917957d6554Steve Block    canHandleRequest = WKBooleanGetValue(static_cast<WKBooleanRef>(body));
452bde8e466a4451c7319e3a072d118917957d6554Steve Block}
462bde8e466a4451c7319e3a072d118917957d6554Steve Block
472bde8e466a4451c7319e3a072d118917957d6554Steve Blockstatic void setInjectedBundleClient(WKContextRef context)
482bde8e466a4451c7319e3a072d118917957d6554Steve Block{
492bde8e466a4451c7319e3a072d118917957d6554Steve Block    WKContextInjectedBundleClient injectedBundleClient;
502bde8e466a4451c7319e3a072d118917957d6554Steve Block    memset(&injectedBundleClient, 0, sizeof(injectedBundleClient));
512bde8e466a4451c7319e3a072d118917957d6554Steve Block    injectedBundleClient.didReceiveMessageFromInjectedBundle = didReceiveMessageFromInjectedBundle;
522bde8e466a4451c7319e3a072d118917957d6554Steve Block
532bde8e466a4451c7319e3a072d118917957d6554Steve Block    WKContextSetInjectedBundleClient(context, &injectedBundleClient);
542bde8e466a4451c7319e3a072d118917957d6554Steve Block}
552bde8e466a4451c7319e3a072d118917957d6554Steve Block
562bde8e466a4451c7319e3a072d118917957d6554Steve BlockTEST(WebKit2, CanHandleRequest)
572bde8e466a4451c7319e3a072d118917957d6554Steve Block{
582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WKRetainPtr<WKContextRef> context = adoptWK(Util::createContextForInjectedBundleTest("CanHandleRequestTest"));
592bde8e466a4451c7319e3a072d118917957d6554Steve Block    setInjectedBundleClient(context.get());
602bde8e466a4451c7319e3a072d118917957d6554Steve Block
612bde8e466a4451c7319e3a072d118917957d6554Steve Block    _WKContextRegisterURLSchemeAsEmptyDocument(context.get(), Util::toWK("emptyscheme").get());
622bde8e466a4451c7319e3a072d118917957d6554Steve Block
632bde8e466a4451c7319e3a072d118917957d6554Steve Block    PlatformWebView webView(context.get());
642bde8e466a4451c7319e3a072d118917957d6554Steve Block
652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WKPageLoadURL(webView.page(), adoptWK(Util::createURLForResource("simple", "html")).get());
662bde8e466a4451c7319e3a072d118917957d6554Steve Block
672bde8e466a4451c7319e3a072d118917957d6554Steve Block    WKContextPostMessageToInjectedBundle(context.get(), Util::toWK("CheckCanHandleRequest").get(), 0);
682bde8e466a4451c7319e3a072d118917957d6554Steve Block    Util::run(&didReceiveMessage);
692bde8e466a4451c7319e3a072d118917957d6554Steve Block    TEST_ASSERT(canHandleRequest);
702bde8e466a4451c7319e3a072d118917957d6554Steve Block}
712bde8e466a4451c7319e3a072d118917957d6554Steve Block
722bde8e466a4451c7319e3a072d118917957d6554Steve Block} // namespace TestWebKitAPI
73