Skip to content
Permalink
Browse files
https://bugs.webkit.org/show_bug.cgi?id=48027
Add ability to test injected bundle API using TestWebKitAPI

Reviewed by Adam Roben.

* TestWebKitAPI/InjectedBundleController.cpp: Added.
* TestWebKitAPI/InjectedBundleController.h: Added.
Shared main object for bundle functionality.

* TestWebKitAPI/InjectedBundleMain.cpp: Added.
Bundle entry point.

* TestWebKitAPI/InjectedBundleTest.h: Added.
Base class for which the bundle portion of a test derives from.

* TestWebKitAPI/PlatformUtilities.h:
* TestWebKitAPI/PlatformUtilities.cpp: Added.
* TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
* TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
(TestWebKitAPI::Util::createInjectedBundlePath):
(TestWebKitAPI::Util::createURLForResource):
(TestWebKitAPI::Util::URLForNonExistentResource):
Add helper to create a context with the shared injected bundle,
and send the initial message to set up the test.

* TestWebKitAPI/Configurations/InjectedBundle.xcconfig: Added.
* TestWebKitAPI/InjectedBundle-Info.plist: Added.
Add mac configuration files.

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
Add the new files.

* TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic.cpp: Added.
* TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic_Bundle.cpp: Added.
Add a simple initial bundle test.



Canonical link: https://commits.webkit.org/60745@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@70194 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
weinig committed Oct 21, 2010
1 parent 00bdb04 commit a2a45b4069c8f7d59d779c00917e915dc8343316
Showing 15 changed files with 728 additions and 12 deletions.
@@ -1,3 +1,41 @@
2010-10-20 Sam Weinig <sam@webkit.org>

Reviewed by Adam Roben.

https://bugs.webkit.org/show_bug.cgi?id=48027
Add ability to test injected bundle API using TestWebKitAPI

* TestWebKitAPI/InjectedBundleController.cpp: Added.
* TestWebKitAPI/InjectedBundleController.h: Added.
Shared main object for bundle functionality.

* TestWebKitAPI/InjectedBundleMain.cpp: Added.
Bundle entry point.

* TestWebKitAPI/InjectedBundleTest.h: Added.
Base class for which the bundle portion of a test derives from.

* TestWebKitAPI/PlatformUtilities.h:
* TestWebKitAPI/PlatformUtilities.cpp: Added.
* TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
* TestWebKitAPI/win/PlatformUtilitiesWin.cpp:
(TestWebKitAPI::Util::createInjectedBundlePath):
(TestWebKitAPI::Util::createURLForResource):
(TestWebKitAPI::Util::URLForNonExistentResource):
Add helper to create a context with the shared injected bundle,
and send the initial message to set up the test.

* TestWebKitAPI/Configurations/InjectedBundle.xcconfig: Added.
* TestWebKitAPI/InjectedBundle-Info.plist: Added.
Add mac configuration files.

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
Add the new files.

* TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic.cpp: Added.
* TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic_Bundle.cpp: Added.
Add a simple initial bundle test.

2010-10-20 Eric Seidel <eric@webkit.org>

Unreviewed. Fixing /release-patch url used by the EWS bots.
@@ -0,0 +1,24 @@
// Copyright (C) 2010 Apple Inc. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

PRODUCT_NAME = InjectedBundle
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>
@@ -0,0 +1,118 @@
/*
* Copyright (C) 2010 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/

#include "InjectedBundleController.h"

#include "InjectedBundleTest.h"
#include "PlatformUtilities.h"
#include <WebKit2/WebKit2.h>
#include <algorithm>
#include <assert.h>

namespace TestWebKitAPI {

InjectedBundleController& InjectedBundleController::shared()
{
static InjectedBundleController& shared = *new InjectedBundleController;
return shared;
}

InjectedBundleController::InjectedBundleController()
: m_bundle(0)
, m_currentTest(0)
{
}

void InjectedBundleController::initialize(WKBundleRef bundle)
{
m_bundle = bundle;

WKBundleClient client = {
0,
this,
didCreatePage,
willDestroyPage,
didReceiveMessage
};
WKBundleSetClient(m_bundle, &client);
}

void InjectedBundleController::didCreatePage(WKBundleRef bundle, WKBundlePageRef page, const void* clientInfo)
{
InjectedBundleController* self = static_cast<InjectedBundleController*>(const_cast<void*>(clientInfo));
assert(self->m_currentTest);
self->m_currentTest->didCreatePage(bundle, page);
}

void InjectedBundleController::willDestroyPage(WKBundleRef bundle, WKBundlePageRef page, const void* clientInfo)
{
InjectedBundleController* self = static_cast<InjectedBundleController*>(const_cast<void*>(clientInfo));
assert(self->m_currentTest);
self->m_currentTest->willDestroyPage(bundle, page);
}

void InjectedBundleController::didReceiveMessage(WKBundleRef bundle, WKStringRef messageName, WKTypeRef messageBody, const void* clientInfo)
{
InjectedBundleController* self = static_cast<InjectedBundleController*>(const_cast<void*>(clientInfo));

if (WKStringIsEqualToUTF8CString(messageName, "BundleTestInstantiator")) {
assert(WKGetTypeID(messageBody) == WKStringGetTypeID());
WKStringRef messageBodyString = static_cast<WKStringRef>(messageBody);

self->initializeTestNamed(Util::toSTD(messageBodyString));

return;
}

assert(self->m_currentTest);
self->m_currentTest->didReceiveMessage(bundle, messageName, messageBody);
}

void InjectedBundleController::dumpTestNames()
{
std::map<std::string, CreateInjectedBundleTestFunction>::const_iterator it = m_createInjectedBundleTestFunctions.begin();
std::map<std::string, CreateInjectedBundleTestFunction>::const_iterator end = m_createInjectedBundleTestFunctions.end();
for (; it != end; ++it)
printf("%s\n", (*it).first.c_str());
}

void InjectedBundleController::initializeTestNamed(const std::string& identifier)
{
CreateInjectedBundleTestFunction createTestFunction = m_createInjectedBundleTestFunctions[identifier];
if (!createTestFunction) {
printf("ERROR: InjectedBundle test not found - %s\n", identifier.c_str());
exit(1);
}

m_currentTest = createTestFunction(identifier);
m_currentTest->initialize();
}

void InjectedBundleController::registerCreateInjectedBundleTestFunction(const std::string& identifier, CreateInjectedBundleTestFunction function)
{
m_createInjectedBundleTestFunctions[identifier] = function;
}

} // namespace TestWebKitAPI
@@ -0,0 +1,64 @@
/*
* Copyright (C) 2010 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/

#ifndef InjectedBundleController_h
#define InjectedBundleController_h

#include <WebKit2/WKBundle.h>
#include <map>
#include <string>

namespace TestWebKitAPI {

class InjectedBundleTest;

class InjectedBundleController {
public:
static InjectedBundleController& shared();

void initialize(WKBundleRef);

void dumpTestNames();
void initializeTestNamed(const std::string&);

typedef InjectedBundleTest* (*CreateInjectedBundleTestFunction)(const std::string&);
void registerCreateInjectedBundleTestFunction(const std::string&, CreateInjectedBundleTestFunction);

private:
InjectedBundleController();
~InjectedBundleController();

static void didCreatePage(WKBundleRef bundle, WKBundlePageRef page, const void* clientInfo);
static void willDestroyPage(WKBundleRef bundle, WKBundlePageRef page, const void* clientInfo);
static void didReceiveMessage(WKBundleRef bundle, WKStringRef messageName, WKTypeRef messageBody, const void* clientInfo);

std::map<std::string, CreateInjectedBundleTestFunction> m_createInjectedBundleTestFunctions;
WKBundleRef m_bundle;
InjectedBundleTest* m_currentTest;
};

} // namespace TestWebKitAPI

#endif // InjectedBundleController_h
@@ -0,0 +1,37 @@
/*
* Copyright (C) 2010 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/

#include "InjectedBundleController.h"
#include <WebKit2/WKBundleInitialize.h>

#if defined(WIN32) || defined(_WIN32)
extern "C" __declspec(dllexport)
#else
extern "C"
#endif
void WKBundleInitialize(WKBundleRef bundle)
{
TestWebKitAPI::InjectedBundleController::shared().initialize(bundle);
}
@@ -0,0 +1,70 @@
/*
* Copyright (C) 2010 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/

#ifndef InjectedBundleTest_h
#define InjectedBundleTest_h

#include "InjectedBundleController.h"

namespace TestWebKitAPI {

class InjectedBundleTest {
public:
virtual ~InjectedBundleTest() { }

virtual void initialize() { }

virtual void didCreatePage(WKBundleRef, WKBundlePageRef) { }
virtual void willDestroyPage(WKBundleRef, WKBundlePageRef) { }
virtual void didReceiveMessage(WKBundleRef, WKStringRef messageName, WKTypeRef messageBody) { }

std::string name() const { return m_identifier; }

template<typename TestClassTy> class Register {
public:
Register(const std::string& test)
{
InjectedBundleController::shared().registerCreateInjectedBundleTestFunction(test, Register::create);
}

private:
static InjectedBundleTest* create(const std::string& identifier)
{
return new TestClassTy(identifier);
}
};

protected:
InjectedBundleTest(const std::string& identifier)
: m_identifier(identifier)
{
}

std::string m_identifier;
};

} // namespace TestWebKitAPI

#endif // InjectedBundleTest_h

0 comments on commit a2a45b4

Please sign in to comment.