| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/notifications/desktop_notification_service.h" | 5 #include "chrome/browser/notifications/desktop_notification_service.h" |
| 6 | 6 |
| 7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
| 8 #include "app/resource_bundle.h" | 8 #include "app/resource_bundle.h" |
| 9 #include "base/thread.h" | 9 #include "base/thread.h" |
| 10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 #include "third_party/WebKit/WebKit/chromium/public/WebNotificationPresenter.h" | 36 #include "third_party/WebKit/WebKit/chromium/public/WebNotificationPresenter.h" |
| 37 | 37 |
| 38 using WebKit::WebNotificationPresenter; | 38 using WebKit::WebNotificationPresenter; |
| 39 | 39 |
| 40 // static | 40 // static |
| 41 string16 DesktopNotificationService::CreateDataUrl( | 41 string16 DesktopNotificationService::CreateDataUrl( |
| 42 const GURL& icon_url, const string16& title, const string16& body) { | 42 const GURL& icon_url, const string16& title, const string16& body) { |
| 43 int resource; | 43 int resource; |
| 44 string16 line_name; | 44 string16 line_name; |
| 45 string16 line; | 45 string16 line; |
| 46 std::vector<string16> subst; | 46 std::vector<std::string> subst; |
| 47 if (icon_url.is_valid()) { | 47 if (icon_url.is_valid()) { |
| 48 resource = IDR_NOTIFICATION_ICON_HTML; | 48 resource = IDR_NOTIFICATION_ICON_HTML; |
| 49 subst.push_back(UTF8ToUTF16(icon_url.spec())); | 49 subst.push_back(icon_url.spec()); |
| 50 subst.push_back(UTF8ToUTF16(EscapeForHTML(UTF16ToUTF8(title)))); | 50 subst.push_back(EscapeForHTML(UTF16ToUTF8(title))); |
| 51 subst.push_back(UTF8ToUTF16(EscapeForHTML(UTF16ToUTF8(body)))); | 51 subst.push_back(EscapeForHTML(UTF16ToUTF8(body))); |
| 52 } else if (title.empty() || body.empty()) { | 52 } else if (title.empty() || body.empty()) { |
| 53 resource = IDR_NOTIFICATION_1LINE_HTML; | 53 resource = IDR_NOTIFICATION_1LINE_HTML; |
| 54 line = title.empty() ? body : title; | 54 line = title.empty() ? body : title; |
| 55 // Strings are div names in the template file. | 55 // Strings are div names in the template file. |
| 56 line_name = title.empty() ? ASCIIToUTF16("description") | 56 line_name = title.empty() ? ASCIIToUTF16("description") |
| 57 : ASCIIToUTF16("title"); | 57 : ASCIIToUTF16("title"); |
| 58 subst.push_back(UTF8ToUTF16(EscapeForHTML(UTF16ToUTF8(line_name)))); | 58 subst.push_back(EscapeForHTML(UTF16ToUTF8(line_name))); |
| 59 subst.push_back(UTF8ToUTF16(EscapeForHTML(UTF16ToUTF8(line)))); | 59 subst.push_back(EscapeForHTML(UTF16ToUTF8(line))); |
| 60 } else { | 60 } else { |
| 61 resource = IDR_NOTIFICATION_2LINE_HTML; | 61 resource = IDR_NOTIFICATION_2LINE_HTML; |
| 62 subst.push_back(UTF8ToUTF16(EscapeForHTML(UTF16ToUTF8(title)))); | 62 subst.push_back(EscapeForHTML(UTF16ToUTF8(title))); |
| 63 subst.push_back(UTF8ToUTF16(EscapeForHTML(UTF16ToUTF8(body)))); | 63 subst.push_back(EscapeForHTML(UTF16ToUTF8(body))); |
| 64 } | 64 } |
| 65 | 65 |
| 66 const base::StringPiece template_html( | 66 const base::StringPiece template_html( |
| 67 ResourceBundle::GetSharedInstance().GetRawDataResource( | 67 ResourceBundle::GetSharedInstance().GetRawDataResource( |
| 68 resource)); | 68 resource)); |
| 69 | 69 |
| 70 if (template_html.empty()) { | 70 if (template_html.empty()) { |
| 71 NOTREACHED() << "unable to load template. ID: " << resource; | 71 NOTREACHED() << "unable to load template. ID: " << resource; |
| 72 return string16(); | 72 return string16(); |
| 73 } | 73 } |
| 74 | 74 |
| 75 string16 format_string = ASCIIToUTF16("data:text/html;charset=utf-8," | 75 std::string data = ReplaceStringPlaceholders(template_html, subst, NULL); |
| 76 + template_html.as_string()); | 76 return UTF8ToUTF16("data:text/html;charset=utf-8," + |
| 77 return ReplaceStringPlaceholders(format_string, subst, NULL); | 77 EscapeQueryParamValue(data, false)); |
| 78 } | 78 } |
| 79 | 79 |
| 80 // A task object which calls the renderer to inform the web page that the | 80 // A task object which calls the renderer to inform the web page that the |
| 81 // permission request has completed. | 81 // permission request has completed. |
| 82 class NotificationPermissionCallbackTask : public Task { | 82 class NotificationPermissionCallbackTask : public Task { |
| 83 public: | 83 public: |
| 84 NotificationPermissionCallbackTask(int process_id, int route_id, | 84 NotificationPermissionCallbackTask(int process_id, int route_id, |
| 85 int request_id) | 85 int request_id) |
| 86 : process_id_(process_id), | 86 : process_id_(process_id), |
| 87 route_id_(route_id), | 87 route_id_(route_id), |
| (...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 441 if (origin.SchemeIs(chrome::kExtensionScheme)) { | 441 if (origin.SchemeIs(chrome::kExtensionScheme)) { |
| 442 ExtensionsService* ext_service = profile_->GetExtensionsService(); | 442 ExtensionsService* ext_service = profile_->GetExtensionsService(); |
| 443 if (ext_service) { | 443 if (ext_service) { |
| 444 Extension* extension = ext_service->GetExtensionByURL(origin); | 444 Extension* extension = ext_service->GetExtensionByURL(origin); |
| 445 if (extension) | 445 if (extension) |
| 446 return UTF8ToWide(extension->name()); | 446 return UTF8ToWide(extension->name()); |
| 447 } | 447 } |
| 448 } | 448 } |
| 449 return UTF8ToWide(origin.host()); | 449 return UTF8ToWide(origin.host()); |
| 450 } | 450 } |
| OLD | NEW |