• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008, 2009 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 "core/loader/appcache/ApplicationCache.h"
28 
29 #include "bindings/v8/ExceptionState.h"
30 #include "core/dom/Document.h"
31 #include "core/dom/ExceptionCode.h"
32 #include "core/events/EventListener.h"
33 #include "core/frame/LocalFrame.h"
34 #include "core/loader/DocumentLoader.h"
35 #include "core/loader/FrameLoader.h"
36 
37 namespace WebCore {
38 
ApplicationCache(LocalFrame * frame)39 ApplicationCache::ApplicationCache(LocalFrame* frame)
40     : DOMWindowProperty(frame)
41 {
42     ScriptWrappable::init(this);
43     ApplicationCacheHost* cacheHost = applicationCacheHost();
44     if (cacheHost)
45         cacheHost->setApplicationCache(this);
46 }
47 
willDestroyGlobalObjectInFrame()48 void ApplicationCache::willDestroyGlobalObjectInFrame()
49 {
50     if (ApplicationCacheHost* cacheHost = applicationCacheHost())
51         cacheHost->setApplicationCache(0);
52     DOMWindowProperty::willDestroyGlobalObjectInFrame();
53 }
54 
applicationCacheHost() const55 ApplicationCacheHost* ApplicationCache::applicationCacheHost() const
56 {
57     if (!m_frame || !m_frame->loader().documentLoader())
58         return 0;
59     return m_frame->loader().documentLoader()->applicationCacheHost();
60 }
61 
status() const62 unsigned short ApplicationCache::status() const
63 {
64     ApplicationCacheHost* cacheHost = applicationCacheHost();
65     if (!cacheHost)
66         return ApplicationCacheHost::UNCACHED;
67     return cacheHost->status();
68 }
69 
update(ExceptionState & exceptionState)70 void ApplicationCache::update(ExceptionState& exceptionState)
71 {
72     ApplicationCacheHost* cacheHost = applicationCacheHost();
73     if (!cacheHost || !cacheHost->update())
74         exceptionState.throwDOMException(InvalidStateError, "there is no application cache to update.");
75 }
76 
swapCache(ExceptionState & exceptionState)77 void ApplicationCache::swapCache(ExceptionState& exceptionState)
78 {
79     ApplicationCacheHost* cacheHost = applicationCacheHost();
80     if (!cacheHost || !cacheHost->swapCache())
81         exceptionState.throwDOMException(InvalidStateError, "there is no newer application cache to swap to.");
82 }
83 
abort()84 void ApplicationCache::abort()
85 {
86     ApplicationCacheHost* cacheHost = applicationCacheHost();
87     if (cacheHost)
88         cacheHost->abort();
89 }
90 
interfaceName() const91 const AtomicString& ApplicationCache::interfaceName() const
92 {
93     return EventTargetNames::ApplicationCache;
94 }
95 
executionContext() const96 ExecutionContext* ApplicationCache::executionContext() const
97 {
98     if (m_frame)
99         return m_frame->document();
100     return 0;
101 }
102 
toEventType(ApplicationCacheHost::EventID id)103 const AtomicString& ApplicationCache::toEventType(ApplicationCacheHost::EventID id)
104 {
105     switch (id) {
106     case ApplicationCacheHost::CHECKING_EVENT:
107         return EventTypeNames::checking;
108     case ApplicationCacheHost::ERROR_EVENT:
109         return EventTypeNames::error;
110     case ApplicationCacheHost::NOUPDATE_EVENT:
111         return EventTypeNames::noupdate;
112     case ApplicationCacheHost::DOWNLOADING_EVENT:
113         return EventTypeNames::downloading;
114     case ApplicationCacheHost::PROGRESS_EVENT:
115         return EventTypeNames::progress;
116     case ApplicationCacheHost::UPDATEREADY_EVENT:
117         return EventTypeNames::updateready;
118     case ApplicationCacheHost::CACHED_EVENT:
119         return EventTypeNames::cached;
120     case ApplicationCacheHost::OBSOLETE_EVENT:
121         return EventTypeNames::obsolete;
122     }
123     ASSERT_NOT_REACHED();
124     return EventTypeNames::error;
125 }
126 
127 } // namespace WebCore
128