1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "content/child/appcache/appcache_frontend_impl.h"
6
7#include "base/logging.h"
8#include "content/child/appcache/web_application_cache_host_impl.h"
9#include "third_party/WebKit/public/web/WebApplicationCacheHost.h"
10#include "third_party/WebKit/public/web/WebConsoleMessage.h"
11
12using blink::WebApplicationCacheHost;
13using blink::WebConsoleMessage;
14
15namespace content {
16
17// Inline helper to keep the lines shorter and unwrapped.
18inline WebApplicationCacheHostImpl* GetHost(int id) {
19  return WebApplicationCacheHostImpl::FromId(id);
20}
21
22void AppCacheFrontendImpl::OnCacheSelected(int host_id,
23                                           const appcache::AppCacheInfo& info) {
24  WebApplicationCacheHostImpl* host = GetHost(host_id);
25  if (host)
26    host->OnCacheSelected(info);
27}
28
29void AppCacheFrontendImpl::OnStatusChanged(const std::vector<int>& host_ids,
30                                           appcache::Status status) {
31  for (std::vector<int>::const_iterator i = host_ids.begin();
32       i != host_ids.end(); ++i) {
33    WebApplicationCacheHostImpl* host = GetHost(*i);
34    if (host)
35      host->OnStatusChanged(status);
36  }
37}
38
39void AppCacheFrontendImpl::OnEventRaised(const std::vector<int>& host_ids,
40                                         appcache::EventID event_id) {
41  DCHECK(event_id != appcache::PROGRESS_EVENT);  // See OnProgressEventRaised.
42  DCHECK(event_id != appcache::ERROR_EVENT);  // See OnErrorEventRaised.
43  for (std::vector<int>::const_iterator i = host_ids.begin();
44       i != host_ids.end(); ++i) {
45    WebApplicationCacheHostImpl* host = GetHost(*i);
46    if (host)
47      host->OnEventRaised(event_id);
48  }
49}
50
51void AppCacheFrontendImpl::OnProgressEventRaised(
52    const std::vector<int>& host_ids,
53    const GURL& url,
54    int num_total,
55    int num_complete) {
56  for (std::vector<int>::const_iterator i = host_ids.begin();
57       i != host_ids.end(); ++i) {
58    WebApplicationCacheHostImpl* host = GetHost(*i);
59    if (host)
60      host->OnProgressEventRaised(url, num_total, num_complete);
61  }
62}
63
64void AppCacheFrontendImpl::OnErrorEventRaised(const std::vector<int>& host_ids,
65                                              const std::string& message) {
66  for (std::vector<int>::const_iterator i = host_ids.begin();
67       i != host_ids.end(); ++i) {
68    WebApplicationCacheHostImpl* host = GetHost(*i);
69    if (host)
70      host->OnErrorEventRaised(message);
71  }
72}
73
74void AppCacheFrontendImpl::OnLogMessage(int host_id,
75                                        appcache::LogLevel log_level,
76                                        const std::string& message) {
77  WebApplicationCacheHostImpl* host = GetHost(host_id);
78  if (host)
79    host->OnLogMessage(log_level, message);
80}
81
82void AppCacheFrontendImpl::OnContentBlocked(int host_id,
83                                            const GURL& manifest_url) {
84  WebApplicationCacheHostImpl* host = GetHost(host_id);
85  if (host)
86    host->OnContentBlocked(manifest_url);
87}
88
89// Ensure that enum values never get out of sync with the
90// ones declared for use within the WebKit api
91COMPILE_ASSERT((int)WebApplicationCacheHost::Uncached ==
92               (int)appcache::UNCACHED, Uncached);
93COMPILE_ASSERT((int)WebApplicationCacheHost::Idle ==
94               (int)appcache::IDLE, Idle);
95COMPILE_ASSERT((int)WebApplicationCacheHost::Checking ==
96               (int)appcache::CHECKING, Checking);
97COMPILE_ASSERT((int)WebApplicationCacheHost::Downloading ==
98               (int)appcache::DOWNLOADING, Downloading);
99COMPILE_ASSERT((int)WebApplicationCacheHost::UpdateReady ==
100               (int)appcache::UPDATE_READY, UpdateReady);
101COMPILE_ASSERT((int)WebApplicationCacheHost::Obsolete ==
102               (int)appcache::OBSOLETE, Obsolete);
103COMPILE_ASSERT((int)WebApplicationCacheHost::CheckingEvent ==
104               (int)appcache::CHECKING_EVENT, CheckingEvent);
105COMPILE_ASSERT((int)WebApplicationCacheHost::ErrorEvent ==
106               (int)appcache::ERROR_EVENT, ErrorEvent);
107COMPILE_ASSERT((int)WebApplicationCacheHost::NoUpdateEvent ==
108               (int)appcache::NO_UPDATE_EVENT, NoUpdateEvent);
109COMPILE_ASSERT((int)WebApplicationCacheHost::DownloadingEvent ==
110               (int)appcache::DOWNLOADING_EVENT, DownloadingEvent);
111COMPILE_ASSERT((int)WebApplicationCacheHost::ProgressEvent ==
112               (int)appcache::PROGRESS_EVENT, ProgressEvent);
113COMPILE_ASSERT((int)WebApplicationCacheHost::UpdateReadyEvent ==
114               (int)appcache::UPDATE_READY_EVENT, UpdateReadyEvent);
115COMPILE_ASSERT((int)WebApplicationCacheHost::CachedEvent ==
116               (int)appcache::CACHED_EVENT, CachedEvent);
117COMPILE_ASSERT((int)WebApplicationCacheHost::ObsoleteEvent ==
118               (int)appcache::OBSOLETE_EVENT, ObsoleteEvent);
119COMPILE_ASSERT((int)WebConsoleMessage::LevelDebug ==
120               (int)appcache::LOG_DEBUG, LevelDebug);
121COMPILE_ASSERT((int)WebConsoleMessage::LevelLog ==
122               (int)appcache::LOG_INFO, LevelLog);
123COMPILE_ASSERT((int)WebConsoleMessage::LevelWarning ==
124               (int)appcache::LOG_WARNING, LevelWarning);
125COMPILE_ASSERT((int)WebConsoleMessage::LevelError ==
126               (int)appcache::LOG_ERROR, LevelError);
127
128}  // namespace content
129