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 "config.h"
272bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "WebMediaCacheManagerProxy.h"
282bde8e466a4451c7319e3a072d118917957d6554Steve Block
292bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "WebContext.h"
302bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "WebMediaCacheManagerMessages.h"
312bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "WebSecurityOrigin.h"
322bde8e466a4451c7319e3a072d118917957d6554Steve Block
332bde8e466a4451c7319e3a072d118917957d6554Steve Blocknamespace WebKit {
342bde8e466a4451c7319e3a072d118917957d6554Steve Block
352bde8e466a4451c7319e3a072d118917957d6554Steve BlockPassRefPtr<WebMediaCacheManagerProxy> WebMediaCacheManagerProxy::create(WebContext* context)
362bde8e466a4451c7319e3a072d118917957d6554Steve Block{
372bde8e466a4451c7319e3a072d118917957d6554Steve Block    return adoptRef(new WebMediaCacheManagerProxy(context));
382bde8e466a4451c7319e3a072d118917957d6554Steve Block}
392bde8e466a4451c7319e3a072d118917957d6554Steve Block
402bde8e466a4451c7319e3a072d118917957d6554Steve BlockWebMediaCacheManagerProxy::WebMediaCacheManagerProxy(WebContext* context)
412bde8e466a4451c7319e3a072d118917957d6554Steve Block    : m_webContext(context)
422bde8e466a4451c7319e3a072d118917957d6554Steve Block{
432bde8e466a4451c7319e3a072d118917957d6554Steve Block}
442bde8e466a4451c7319e3a072d118917957d6554Steve Block
452bde8e466a4451c7319e3a072d118917957d6554Steve BlockWebMediaCacheManagerProxy::~WebMediaCacheManagerProxy()
462bde8e466a4451c7319e3a072d118917957d6554Steve Block{
472bde8e466a4451c7319e3a072d118917957d6554Steve Block}
482bde8e466a4451c7319e3a072d118917957d6554Steve Block
492bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebMediaCacheManagerProxy::invalidate()
502bde8e466a4451c7319e3a072d118917957d6554Steve Block{
512bde8e466a4451c7319e3a072d118917957d6554Steve Block    invalidateCallbackMap(m_arrayCallbacks);
522bde8e466a4451c7319e3a072d118917957d6554Steve Block}
532bde8e466a4451c7319e3a072d118917957d6554Steve Block
542bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool WebMediaCacheManagerProxy::shouldTerminate(WebProcessProxy*) const
552bde8e466a4451c7319e3a072d118917957d6554Steve Block{
562bde8e466a4451c7319e3a072d118917957d6554Steve Block    return m_arrayCallbacks.isEmpty();
572bde8e466a4451c7319e3a072d118917957d6554Steve Block}
582bde8e466a4451c7319e3a072d118917957d6554Steve Block
592bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebMediaCacheManagerProxy::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
602bde8e466a4451c7319e3a072d118917957d6554Steve Block{
612bde8e466a4451c7319e3a072d118917957d6554Steve Block    didReceiveWebMediaCacheManagerProxyMessage(connection, messageID, arguments);
622bde8e466a4451c7319e3a072d118917957d6554Steve Block}
632bde8e466a4451c7319e3a072d118917957d6554Steve Block
642bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebMediaCacheManagerProxy::getHostnamesWithMediaCache(PassRefPtr<ArrayCallback> prpCallback)
652bde8e466a4451c7319e3a072d118917957d6554Steve Block{
662bde8e466a4451c7319e3a072d118917957d6554Steve Block    RefPtr<ArrayCallback> callback = prpCallback;
672bde8e466a4451c7319e3a072d118917957d6554Steve Block    uint64_t callbackID = callback->callbackID();
682bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_arrayCallbacks.set(callbackID, callback.release());
692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // FIXME (Multi-WebProcess): When we're sending this to multiple processes, we need to aggregate the
712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // callback data when it comes back.
722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_webContext->sendToAllProcessesRelaunchingThemIfNecessary(Messages::WebMediaCacheManager::GetHostnamesWithMediaCache(callbackID));
732bde8e466a4451c7319e3a072d118917957d6554Steve Block}
742bde8e466a4451c7319e3a072d118917957d6554Steve Block
752bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebMediaCacheManagerProxy::didGetHostnamesWithMediaCache(const Vector<String>& hostnameList, uint64_t callbackID)
762bde8e466a4451c7319e3a072d118917957d6554Steve Block{
772bde8e466a4451c7319e3a072d118917957d6554Steve Block    RefPtr<ArrayCallback> callback = m_arrayCallbacks.take(callbackID);
782bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (!callback) {
792bde8e466a4451c7319e3a072d118917957d6554Steve Block        // FIXME: Log error or assert.
802bde8e466a4451c7319e3a072d118917957d6554Steve Block        return;
812bde8e466a4451c7319e3a072d118917957d6554Steve Block    }
822bde8e466a4451c7319e3a072d118917957d6554Steve Block
832bde8e466a4451c7319e3a072d118917957d6554Steve Block    size_t hostnameCount = hostnameList.size();
842bde8e466a4451c7319e3a072d118917957d6554Steve Block    Vector<RefPtr<APIObject> > hostnames(hostnameCount);
852bde8e466a4451c7319e3a072d118917957d6554Steve Block
862bde8e466a4451c7319e3a072d118917957d6554Steve Block    for (size_t i = 0; i < hostnameCount; ++i)
872bde8e466a4451c7319e3a072d118917957d6554Steve Block        hostnames[i] = WebString::create(hostnameList[i]);
882bde8e466a4451c7319e3a072d118917957d6554Steve Block
892bde8e466a4451c7319e3a072d118917957d6554Steve Block    callback->performCallbackWithReturnValue(ImmutableArray::adopt(hostnames).get());
902bde8e466a4451c7319e3a072d118917957d6554Steve Block}
912bde8e466a4451c7319e3a072d118917957d6554Steve Block
922bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebMediaCacheManagerProxy::clearCacheForHostname(const String& hostname)
932bde8e466a4451c7319e3a072d118917957d6554Steve Block{
942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_webContext->sendToAllProcessesRelaunchingThemIfNecessary(Messages::WebMediaCacheManager::ClearCacheForHostname(hostname));
952bde8e466a4451c7319e3a072d118917957d6554Steve Block}
962bde8e466a4451c7319e3a072d118917957d6554Steve Block
972bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebMediaCacheManagerProxy::clearCacheForAllHostnames()
982bde8e466a4451c7319e3a072d118917957d6554Steve Block{
992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_webContext->sendToAllProcessesRelaunchingThemIfNecessary(Messages::WebMediaCacheManager::ClearCacheForAllHostnames());
1002bde8e466a4451c7319e3a072d118917957d6554Steve Block}
1012bde8e466a4451c7319e3a072d118917957d6554Steve Block
1022bde8e466a4451c7319e3a072d118917957d6554Steve Block} // namespace WebKit
103