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