OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chrome_quota_permission_context.h" | 5 #include "chrome/browser/chrome_quota_permission_context.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
(...skipping 20 matching lines...) Expand all Loading... |
31 namespace { | 31 namespace { |
32 | 32 |
33 // If we requested larger quota than this threshold, show a different | 33 // If we requested larger quota than this threshold, show a different |
34 // message to the user. | 34 // message to the user. |
35 const int64 kRequestLargeQuotaThreshold = 5 * 1024 * 1024; | 35 const int64 kRequestLargeQuotaThreshold = 5 * 1024 * 1024; |
36 | 36 |
37 class RequestQuotaInfoBarDelegate : public ConfirmInfoBarDelegate { | 37 class RequestQuotaInfoBarDelegate : public ConfirmInfoBarDelegate { |
38 public: | 38 public: |
39 typedef QuotaPermissionContext::PermissionCallback PermissionCallback; | 39 typedef QuotaPermissionContext::PermissionCallback PermissionCallback; |
40 | 40 |
| 41 // Creates a request quota infobar delegate and adds it to |infobar_service|. |
| 42 static void Create( |
| 43 InfoBarService* infobar_service, |
| 44 ChromeQuotaPermissionContext* context, |
| 45 const GURL& origin_url, |
| 46 int64 requested_quota, |
| 47 const std::string& display_languages, |
| 48 const PermissionCallback& callback); |
| 49 |
| 50 private: |
41 RequestQuotaInfoBarDelegate( | 51 RequestQuotaInfoBarDelegate( |
42 InfoBarService* infobar_service, | 52 InfoBarService* infobar_service, |
43 ChromeQuotaPermissionContext* context, | 53 ChromeQuotaPermissionContext* context, |
44 const GURL& origin_url, | 54 const GURL& origin_url, |
45 int64 requested_quota, | 55 int64 requested_quota, |
46 const std::string& display_languages, | 56 const std::string& display_languages, |
47 const PermissionCallback& callback) | 57 const PermissionCallback& callback) |
48 : ConfirmInfoBarDelegate(infobar_service), | 58 : ConfirmInfoBarDelegate(infobar_service), |
49 context_(context), | 59 context_(context), |
50 origin_url_(origin_url), | 60 origin_url_(origin_url), |
51 display_languages_(display_languages), | 61 display_languages_(display_languages), |
52 requested_quota_(requested_quota), | 62 requested_quota_(requested_quota), |
53 callback_(callback) {} | 63 callback_(callback) {} |
54 | 64 |
55 private: | |
56 virtual ~RequestQuotaInfoBarDelegate() { | 65 virtual ~RequestQuotaInfoBarDelegate() { |
57 if (!callback_.is_null()) | 66 if (!callback_.is_null()) |
58 context_->DispatchCallbackOnIOThread( | 67 context_->DispatchCallbackOnIOThread( |
59 callback_, | 68 callback_, |
60 QuotaPermissionContext::QUOTA_PERMISSION_RESPONSE_CANCELLED); | 69 QuotaPermissionContext::QUOTA_PERMISSION_RESPONSE_CANCELLED); |
61 } | 70 } |
62 | 71 |
63 virtual bool ShouldExpireInternal( | 72 virtual bool ShouldExpireInternal( |
64 const content::LoadCommittedDetails& details) | 73 const content::LoadCommittedDetails& details) |
65 const OVERRIDE { | 74 const OVERRIDE { |
66 return false; | 75 return false; |
67 } | 76 } |
68 | 77 |
69 virtual string16 GetMessageText() const OVERRIDE; | 78 virtual string16 GetMessageText() const OVERRIDE; |
70 virtual bool Accept() OVERRIDE; | 79 virtual bool Accept() OVERRIDE; |
71 virtual bool Cancel() OVERRIDE; | 80 virtual bool Cancel() OVERRIDE; |
72 | 81 |
73 scoped_refptr<ChromeQuotaPermissionContext> context_; | 82 scoped_refptr<ChromeQuotaPermissionContext> context_; |
74 GURL origin_url_; | 83 GURL origin_url_; |
75 std::string display_languages_; | 84 std::string display_languages_; |
76 int64 requested_quota_; | 85 int64 requested_quota_; |
77 PermissionCallback callback_; | 86 PermissionCallback callback_; |
78 DISALLOW_COPY_AND_ASSIGN(RequestQuotaInfoBarDelegate); | 87 DISALLOW_COPY_AND_ASSIGN(RequestQuotaInfoBarDelegate); |
79 }; | 88 }; |
80 | 89 |
| 90 // static |
| 91 void RequestQuotaInfoBarDelegate::Create( |
| 92 InfoBarService* infobar_service, |
| 93 ChromeQuotaPermissionContext* context, |
| 94 const GURL& origin_url, |
| 95 int64 requested_quota, |
| 96 const std::string& display_languages, |
| 97 const QuotaPermissionContext::PermissionCallback& callback) { |
| 98 infobar_service->AddInfoBar(scoped_ptr<InfoBarDelegate>( |
| 99 new RequestQuotaInfoBarDelegate(infobar_service, context, origin_url, |
| 100 requested_quota, display_languages, |
| 101 callback))); |
| 102 } |
| 103 |
81 string16 RequestQuotaInfoBarDelegate::GetMessageText() const { | 104 string16 RequestQuotaInfoBarDelegate::GetMessageText() const { |
82 return l10n_util::GetStringFUTF16( | 105 return l10n_util::GetStringFUTF16( |
83 (requested_quota_ > kRequestLargeQuotaThreshold ? | 106 (requested_quota_ > kRequestLargeQuotaThreshold ? |
84 IDS_REQUEST_LARGE_QUOTA_INFOBAR_QUESTION : | 107 IDS_REQUEST_LARGE_QUOTA_INFOBAR_QUESTION : |
85 IDS_REQUEST_QUOTA_INFOBAR_QUESTION), | 108 IDS_REQUEST_QUOTA_INFOBAR_QUESTION), |
86 net::FormatUrl(origin_url_, display_languages_)); | 109 net::FormatUrl(origin_url_, display_languages_)); |
87 } | 110 } |
88 | 111 |
89 bool RequestQuotaInfoBarDelegate::Accept() { | 112 bool RequestQuotaInfoBarDelegate::Accept() { |
90 context_->DispatchCallbackOnIOThread( | 113 context_->DispatchCallbackOnIOThread( |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 InfoBarService::FromWebContents(web_contents); | 164 InfoBarService::FromWebContents(web_contents); |
142 if (!infobar_service) { | 165 if (!infobar_service) { |
143 // The tab has no infobar service. | 166 // The tab has no infobar service. |
144 LOG(WARNING) << "Attempt to request quota from a background page: " | 167 LOG(WARNING) << "Attempt to request quota from a background page: " |
145 << render_process_id << "," << render_view_id; | 168 << render_process_id << "," << render_view_id; |
146 DispatchCallbackOnIOThread(callback, QUOTA_PERMISSION_RESPONSE_CANCELLED); | 169 DispatchCallbackOnIOThread(callback, QUOTA_PERMISSION_RESPONSE_CANCELLED); |
147 return; | 170 return; |
148 } | 171 } |
149 Profile* profile = | 172 Profile* profile = |
150 Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 173 Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
151 infobar_service->AddInfoBar(new RequestQuotaInfoBarDelegate( | 174 RequestQuotaInfoBarDelegate::Create( |
152 infobar_service, this, origin_url, requested_quota, | 175 infobar_service, this, origin_url, requested_quota, |
153 profile->GetPrefs()->GetString(prefs::kAcceptLanguages), | 176 profile->GetPrefs()->GetString(prefs::kAcceptLanguages), |
154 callback)); | 177 callback); |
155 } | 178 } |
156 | 179 |
157 void ChromeQuotaPermissionContext::DispatchCallbackOnIOThread( | 180 void ChromeQuotaPermissionContext::DispatchCallbackOnIOThread( |
158 const PermissionCallback& callback, | 181 const PermissionCallback& callback, |
159 QuotaPermissionResponse response) { | 182 QuotaPermissionResponse response) { |
160 DCHECK_EQ(false, callback.is_null()); | 183 DCHECK_EQ(false, callback.is_null()); |
161 | 184 |
162 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { | 185 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { |
163 BrowserThread::PostTask( | 186 BrowserThread::PostTask( |
164 BrowserThread::IO, FROM_HERE, | 187 BrowserThread::IO, FROM_HERE, |
165 base::Bind(&ChromeQuotaPermissionContext::DispatchCallbackOnIOThread, | 188 base::Bind(&ChromeQuotaPermissionContext::DispatchCallbackOnIOThread, |
166 this, callback, response)); | 189 this, callback, response)); |
167 return; | 190 return; |
168 } | 191 } |
169 | 192 |
170 callback.Run(response); | 193 callback.Run(response); |
171 } | 194 } |
172 | 195 |
173 ChromeQuotaPermissionContext::~ChromeQuotaPermissionContext() {} | 196 ChromeQuotaPermissionContext::~ChromeQuotaPermissionContext() {} |
OLD | NEW |