f16184fa6474497bbf4aa3801eb69d974ed1b33b
[WebKit-https.git] / Source / WebCore / inspector / agents / InspectorApplicationCacheAgent.h
1 /*
2  * Copyright (C) 2010, 2015 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. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16  * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  */
24
25 #pragma once
26
27 #include "ApplicationCacheHost.h"
28 #include "InspectorWebAgentBase.h"
29 #include <JavaScriptCore/InspectorBackendDispatchers.h>
30 #include <JavaScriptCore/InspectorFrontendDispatchers.h>
31 #include <wtf/Noncopyable.h>
32
33 namespace Inspector {
34 class ApplicationCacheFrontendDispatcher;
35 }
36
37 namespace WebCore {
38
39 class Frame;
40 class Page;
41
42 typedef String ErrorString;
43
44 class InspectorApplicationCacheAgent final : public InspectorAgentBase, public Inspector::ApplicationCacheBackendDispatcherHandler {
45     WTF_MAKE_NONCOPYABLE(InspectorApplicationCacheAgent);
46     WTF_MAKE_FAST_ALLOCATED;
47 public:
48     InspectorApplicationCacheAgent(PageAgentContext&);
49     virtual ~InspectorApplicationCacheAgent();
50
51     // InspectorAgentBase
52     void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*);
53     void willDestroyFrontendAndBackend(Inspector::DisconnectReason);
54
55     // ApplicationCacheBackendDispatcherHandler
56     void enable(ErrorString&);
57     void disable(ErrorString&);
58     void getFramesWithManifests(ErrorString&, RefPtr<JSON::ArrayOf<Inspector::Protocol::ApplicationCache::FrameWithManifest>>& result);
59     void getManifestForFrame(ErrorString&, const String& frameId, String* manifestURL);
60     void getApplicationCacheForFrame(ErrorString&, const String& frameId, RefPtr<Inspector::Protocol::ApplicationCache::ApplicationCache>&);
61
62     // InspectorInstrumentation
63     void updateApplicationCacheStatus(Frame*);
64     void networkStateChanged();
65
66 private:
67     Ref<Inspector::Protocol::ApplicationCache::ApplicationCache> buildObjectForApplicationCache(const Vector<ApplicationCacheHost::ResourceInfo>&, const ApplicationCacheHost::CacheInfo&);
68     Ref<JSON::ArrayOf<Inspector::Protocol::ApplicationCache::ApplicationCacheResource>> buildArrayForApplicationCacheResources(const Vector<ApplicationCacheHost::ResourceInfo>&);
69     Ref<Inspector::Protocol::ApplicationCache::ApplicationCacheResource> buildObjectForApplicationCacheResource(const ApplicationCacheHost::ResourceInfo&);
70
71     DocumentLoader* assertFrameWithDocumentLoader(ErrorString&, const String& frameId);
72
73     std::unique_ptr<Inspector::ApplicationCacheFrontendDispatcher> m_frontendDispatcher;
74     RefPtr<Inspector::ApplicationCacheBackendDispatcher> m_backendDispatcher;
75     Page& m_inspectedPage;
76 };
77
78 } // namespace WebCore
79