1/*
2 * Copyright (C) 2008-2017 Apple Inc. All Rights Reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#include "config.h"
27#include "DOMApplicationCache.h"
28
29#include "ApplicationCacheHost.h"
30#include "Document.h"
31#include "DocumentLoader.h"
32#include "Frame.h"
33#include "FrameLoader.h"
34#include <wtf/IsoMallocInlines.h>
35
36namespace WebCore {
37
38WTF_MAKE_ISO_ALLOCATED_IMPL(DOMApplicationCache);
39
40DOMApplicationCache::DOMApplicationCache(DOMWindow& window)
41 : DOMWindowProperty(&window)
42{
43 if (auto* host = applicationCacheHost())
44 host->setDOMApplicationCache(this);
45}
46
47ApplicationCacheHost* DOMApplicationCache::applicationCacheHost() const
48{
49 auto* frame = this->frame();
50 if (!frame)
51 return nullptr;
52 auto* documentLoader = frame->loader().documentLoader();
53 if (!documentLoader)
54 return nullptr;
55 return &documentLoader->applicationCacheHost();
56}
57
58unsigned short DOMApplicationCache::status() const
59{
60 auto* host = applicationCacheHost();
61 if (!host)
62 return ApplicationCacheHost::UNCACHED;
63 return host->status();
64}
65
66ExceptionOr<void> DOMApplicationCache::update()
67{
68 auto* host = applicationCacheHost();
69 if (!host || !host->update())
70 return Exception { InvalidStateError };
71 return { };
72}
73
74ExceptionOr<void> DOMApplicationCache::swapCache()
75{
76 auto* host = applicationCacheHost();
77 if (!host || !host->swapCache())
78 return Exception { InvalidStateError };
79 return { };
80}
81
82void DOMApplicationCache::abort()
83{
84 if (auto* host = applicationCacheHost())
85 host->abort();
86}
87
88ScriptExecutionContext* DOMApplicationCache::scriptExecutionContext() const
89{
90 auto* frame = this->frame();
91 if (!frame)
92 return nullptr;
93 return frame->document();
94}
95
96} // namespace WebCore
97