1db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block/* 2db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * Copyright (C) 2010 Apple Inc. All rights reserved. 3db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * 4db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * Redistribution and use in source and binary forms, with or without 5db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * modification, are permitted provided that the following conditions 6db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * are met: 7db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * 1. Redistributions of source code must retain the above copyright 8db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * notice, this list of conditions and the following disclaimer. 9db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * 2. Redistributions in binary form must reproduce the above copyright 10db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * notice, this list of conditions and the following disclaimer in the 11db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * documentation and/or other materials provided with the distribution. 12db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * 13db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 14db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 15db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 17db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 18db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 19db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 20db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 21db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 22db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 23db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * THE POSSIBILITY OF SUCH DAMAGE. 24db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block */ 25db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 262bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "config.h" 27dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include "GCController.h" 28db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 29dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include "InjectedBundle.h" 30dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include "JSGCController.h" 31dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include <WebKit2/WKBundlePrivate.h> 32db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 33dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochnamespace WTR { 34db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 35dd8bb3de4f353a81954234999f1fea748aee2ea9Ben MurdochPassRefPtr<GCController> GCController::create() 36dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 37dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch return adoptRef(new GCController); 38dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 39dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 40dd8bb3de4f353a81954234999f1fea748aee2ea9Ben MurdochGCController::GCController() 41dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 42dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 43dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 44dd8bb3de4f353a81954234999f1fea748aee2ea9Ben MurdochGCController::~GCController() 45dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 46dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 47db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 48dd8bb3de4f353a81954234999f1fea748aee2ea9Ben MurdochJSClassRef GCController::wrapperClass() 49db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{ 50dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch return JSGCController::gCControllerClass(); 51db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block} 52db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 53dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochvoid GCController::collect() 54db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{ 55dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch WKBundleGarbageCollectJavaScriptObjects(InjectedBundle::shared().bundle()); 56db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block} 57db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 58dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochvoid GCController::collectOnAlternateThread(bool waitUntilDone) 59dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 60dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch WKBundleGarbageCollectJavaScriptObjectsOnAlternateThreadForDebugging(InjectedBundle::shared().bundle(), waitUntilDone); 61dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 62dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 63dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochsize_t GCController::getJSObjectCount() 64dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 65dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch return WKBundleGetJavaScriptObjectsCount(InjectedBundle::shared().bundle()); 66dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 67dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 68dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch// Object Creation 69dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 70dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochvoid GCController::makeWindowObject(JSContextRef context, JSObjectRef windowObject, JSValueRef* exception) 71db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{ 72dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch setProperty(context, windowObject, "GCController", this, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete, exception); 73db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block} 74db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 75dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} // namespace WTR 76