This source file includes following definitions.
- handleEvent
- create
- callListenerFunction
- TEST
#include "config.h"
#include "FrameTestHelpers.h"
#include "URLTestHelpers.h"
#include "V8Event.h"
#include "WebFrame.h"
#include "WebFrameImpl.h"
#include "WebView.h"
#include "WebViewImpl.h"
#include "bindings/v8/ExceptionStatePlaceholder.h"
#include "bindings/v8/ScriptController.h"
#include "bindings/v8/SerializedScriptValue.h"
#include "bindings/v8/V8AbstractEventListener.h"
#include "public/platform/Platform.h"
#include "public/platform/WebUnitTestSupport.h"
#include "public/web/WebDOMCustomEvent.h"
#include "v8.h"
#include <gtest/gtest.h>
using namespace WebCore;
using namespace blink;
namespace {
class TestListener : public V8AbstractEventListener {
public:
virtual bool operator==(const EventListener& listener)
{
return true;
}
virtual void handleEvent(ExecutionContext* context, Event* event)
{
EXPECT_EQ(event->type(), "blah");
v8::Local<v8::Context> v8Context = WebCore::toV8Context(context, DOMWrapperWorld::mainWorld());
v8::Isolate* isolate = v8Context->GetIsolate();
v8::Context::Scope scope(v8Context);
v8::Handle<v8::Value> jsEvent = toV8(event, v8::Handle<v8::Object>(), isolate);
EXPECT_EQ(jsEvent->ToObject()->Get(v8::String::NewFromUtf8(isolate, "detail")), v8::Boolean::New(isolate, true));
}
static PassRefPtr<TestListener> create(v8::Isolate* isolate, DOMWrapperWorld& world)
{
return adoptRef(new TestListener(isolate, world));
}
private:
TestListener(v8::Isolate* isolate, DOMWrapperWorld& world)
: V8AbstractEventListener(false, world, isolate)
{
}
virtual v8::Local<v8::Value> callListenerFunction(ExecutionContext*, v8::Handle<v8::Value> jsevent, Event*)
{
ASSERT_NOT_REACHED();
return v8::Local<v8::Value>();
}
};
TEST(CustomEventTest, InitWithSerializedScriptValue)
{
const std::string baseURL = "http://www.test.com";
const std::string path = "visible_iframe.html";
URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(baseURL.c_str()), WebString::fromUTF8(path.c_str()));
FrameTestHelpers::WebViewHelper webViewHelper;
WebFrameImpl* frame = toWebFrameImpl(webViewHelper.initializeAndLoad(baseURL + path)->mainFrame());
WebDOMEvent event = frame->frame()->document()->createEvent("CustomEvent", IGNORE_EXCEPTION);
WebDOMCustomEvent customEvent = event.to<WebDOMCustomEvent>();
v8::Isolate* isolate = toIsolate(frame->frame());
v8::HandleScope handleScope(isolate);
customEvent.initCustomEvent("blah", false, false, WebSerializedScriptValue::serialize(v8::Boolean::New(isolate, true)));
RefPtr<DOMWrapperWorld> world = DOMWrapperWorld::create();
RefPtr<EventListener> listener = TestListener::create(isolate, *world);
frame->frame()->document()->addEventListener("blah", listener, false);
frame->frame()->document()->dispatchEvent(event);
Platform::current()->unitTestSupport()->unregisterAllMockedURLs();
}
}