示例#1
0
TEST(WTF_GMainLoopSource, DestructionDuringDispatch)
{
    // This is just a raw test that ensures deleting the GMainLoopSource object during
    // dispatch does not cause problems. This test succeeds if it doesn't crash.

    GMainLoopSource* source;
    GMainLoop* loop = g_main_loop_new(nullptr, TRUE);

    source = new GMainLoopSource;
    source->schedule("[Test] DestroySourceTask", [&] {
        delete source;
        g_main_loop_quit(loop);
    });
    g_main_loop_run(loop);

    source = new GMainLoopSource;
    source->schedule("[Test] DestroySourceTask", std::function<bool ()>([&] {
        delete source;
        g_main_loop_quit(loop);
        return false;
    }));
    g_main_loop_run(loop);

    g_main_loop_unref(loop);
}
示例#2
0
void TestController::platformRunUntil(bool&, double timeout)
{
    if (timeout > 0) {
        timeoutSource.scheduleAfterDelay("[WTR] Test timeout source", [] {
            fprintf(stderr, "FAIL: TestControllerRunLoop timed out.\n");
            gtk_main_quit();
        }, std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::duration<double>(timeout)));
    } else
        timeoutSource.cancel();
    gtk_main();
}
void setSharedTimerFireInterval(double interval)
{
    ASSERT(sharedTimerFiredFunction);

    gSharedTimer.scheduleAfterDelay("[WebKit] sharedTimerTimeoutCallback", std::function<void()>(sharedTimerFiredFunction),
        std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::duration<double>(interval)), GDK_PRIORITY_REDRAW);
}
namespace WebCore {

static GMainLoopSource gSharedTimer;
static void (*sharedTimerFiredFunction)();

void setSharedTimerFiredFunction(void (*f)())
{
    sharedTimerFiredFunction = f;
    if (!sharedTimerFiredFunction)
        gSharedTimer.cancel();
}

void setSharedTimerFireInterval(double interval)
{
    ASSERT(sharedTimerFiredFunction);

    gSharedTimer.scheduleAfterDelay("[WebKit] sharedTimerTimeoutCallback", std::function<void()>(sharedTimerFiredFunction),
        std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::duration<double>(interval)), GDK_PRIORITY_REDRAW);
}

void stopSharedTimer()
{
    gSharedTimer.cancel();
}

}
示例#5
0
namespace WebCore {

static GMainLoopSource gSharedTimer;
static void (*sharedTimerFiredFunction)();

void setSharedTimerFiredFunction(void (*f)())
{
    sharedTimerFiredFunction = f;
    if (!sharedTimerFiredFunction)
        gSharedTimer.cancel();
}

void setSharedTimerFireInterval(double interval)
{
    ASSERT(sharedTimerFiredFunction);

    // This is GDK_PRIORITY_REDRAW, but we don't want to depend on GDK here just to use a constant.
    static const int priority = G_PRIORITY_HIGH_IDLE + 20;
    gSharedTimer.scheduleAfterDelay("[WebKit] sharedTimerTimeoutCallback", std::function<void()>(sharedTimerFiredFunction),
        std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::duration<double>(interval)), priority);
}

void stopSharedTimer()
{
    gSharedTimer.cancel();
}

}
示例#6
0
void setSharedTimerFireInterval(double interval)
{
    ASSERT(sharedTimerFiredFunction);

    // This is GDK_PRIORITY_REDRAW, but we don't want to depend on GDK here just to use a constant.
    static const int priority = G_PRIORITY_HIGH_IDLE + 20;
    gSharedTimer.scheduleAfterDelay("[WebKit] sharedTimerTimeoutCallback", std::function<void()>(sharedTimerFiredFunction),
        std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::duration<double>(interval)), priority);
}
示例#7
0
void TestController::notifyDone()
{
    gtk_main_quit();
    timeoutSource.cancel();
}
示例#8
0
namespace WTR {

static GMainLoopSource timeoutSource;

void TestController::notifyDone()
{
    gtk_main_quit();
    timeoutSource.cancel();
}

void TestController::platformInitialize()
{
}

void TestController::platformDestroy()
{
}

void TestController::platformRunUntil(bool&, double timeout)
{
    if (timeout > 0) {
        timeoutSource.scheduleAfterDelay("[WTR] Test timeout source", [] {
            fprintf(stderr, "FAIL: TestControllerRunLoop timed out.\n");
            gtk_main_quit();
        }, std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::duration<double>(timeout)));
    } else
        timeoutSource.cancel();
    gtk_main();
}

static char* getEnvironmentVariableAsUTF8String(const char* variableName)
{
    const char* value = g_getenv(variableName);
    if (!value) {
        fprintf(stderr, "%s environment variable not found\n", variableName);
        exit(0);
    }
    gsize bytesWritten;
    return g_filename_to_utf8(value, -1, 0, &bytesWritten, 0);
}

void TestController::initializeInjectedBundlePath()
{
    GUniquePtr<char> utf8BundlePath(getEnvironmentVariableAsUTF8String("TEST_RUNNER_INJECTED_BUNDLE_FILENAME"));
    m_injectedBundlePath.adopt(WKStringCreateWithUTF8CString(utf8BundlePath.get()));
}

void TestController::initializeTestPluginDirectory()
{
    GUniquePtr<char> testPluginPath(getEnvironmentVariableAsUTF8String("TEST_RUNNER_TEST_PLUGIN_PATH"));
    m_testPluginDirectory.adopt(WKStringCreateWithUTF8CString(testPluginPath.get()));
}

void TestController::platformInitializeContext()
{
}

void TestController::setHidden(bool hidden)
{
    if (!m_mainWebView)
        return;
    if (hidden)
        gtk_widget_unmap(GTK_WIDGET(m_mainWebView->platformView()));
    else
        gtk_widget_map(GTK_WIDGET(m_mainWebView->platformView()));
}

void TestController::runModal(PlatformWebView*)
{
    // FIXME: Need to implement this to test showModalDialog.
}

const char* TestController::platformLibraryPathForTesting()
{
    return 0;
}

void TestController::platformConfigureViewForTest(const TestInvocation&)
{
}

void TestController::platformResetPreferencesToConsistentValues()
{
    if (!m_mainWebView)
        return;
    m_mainWebView->dismissAllPopupMenus();
}

void TestController::updatePlatformSpecificViewOptionsForTest(ViewOptions&, const TestInvocation&) const
{
}

} // namespace WTR
void stopSharedTimer()
{
    gSharedTimer.cancel();
}
示例#10
0
void setSharedTimerFiredFunction(void (*f)())
{
    sharedTimerFiredFunction = f;
    if (!sharedTimerFiredFunction)
        gSharedTimer.cancel();
}