| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/extensions/extension_tabs_module.h" | 5 #include "chrome/browser/extensions/extension_tabs_module.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/base64.h" | 10 #include "base/base64.h" |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 #include "content/public/browser/web_contents.h" | 54 #include "content/public/browser/web_contents.h" |
| 55 #include "skia/ext/image_operations.h" | 55 #include "skia/ext/image_operations.h" |
| 56 #include "skia/ext/platform_canvas.h" | 56 #include "skia/ext/platform_canvas.h" |
| 57 #include "third_party/skia/include/core/SkBitmap.h" | 57 #include "third_party/skia/include/core/SkBitmap.h" |
| 58 #include "ui/gfx/codec/jpeg_codec.h" | 58 #include "ui/gfx/codec/jpeg_codec.h" |
| 59 #include "ui/gfx/codec/png_codec.h" | 59 #include "ui/gfx/codec/png_codec.h" |
| 60 | 60 |
| 61 namespace keys = extension_tabs_module_constants; | 61 namespace keys = extension_tabs_module_constants; |
| 62 namespace errors = extension_manifest_errors; | 62 namespace errors = extension_manifest_errors; |
| 63 | 63 |
| 64 using content::NavigationController; |
| 64 using content::NavigationEntry; | 65 using content::NavigationEntry; |
| 65 using content::OpenURLParams; | 66 using content::OpenURLParams; |
| 66 using content::Referrer; | 67 using content::Referrer; |
| 67 using content::WebContents; | 68 using content::WebContents; |
| 68 | 69 |
| 69 const int CaptureVisibleTabFunction::kDefaultQuality = 90; | 70 const int CaptureVisibleTabFunction::kDefaultQuality = 90; |
| 70 | 71 |
| 71 namespace { | 72 namespace { |
| 72 | 73 |
| 73 // |error_message| can optionally be passed in a will be set with an appropriate | 74 // |error_message| can optionally be passed in a will be set with an appropriate |
| (...skipping 991 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1065 } else { | 1066 } else { |
| 1066 EXTENSION_FUNCTION_VALIDATE(tab_value->GetAsInteger(&tab_id)); | 1067 EXTENSION_FUNCTION_VALIDATE(tab_value->GetAsInteger(&tab_id)); |
| 1067 } | 1068 } |
| 1068 | 1069 |
| 1069 int tab_index = -1; | 1070 int tab_index = -1; |
| 1070 TabStripModel* tab_strip = NULL; | 1071 TabStripModel* tab_strip = NULL; |
| 1071 if (!GetTabById(tab_id, profile(), include_incognito(), | 1072 if (!GetTabById(tab_id, profile(), include_incognito(), |
| 1072 NULL, &tab_strip, &contents, &tab_index, &error_)) { | 1073 NULL, &tab_strip, &contents, &tab_index, &error_)) { |
| 1073 return false; | 1074 return false; |
| 1074 } | 1075 } |
| 1075 content::NavigationController& controller = | 1076 NavigationController& controller = contents->web_contents()->GetController(); |
| 1076 contents->web_contents()->GetController(); | |
| 1077 | 1077 |
| 1078 // TODO(rafaelw): handle setting remaining tab properties: | 1078 // TODO(rafaelw): handle setting remaining tab properties: |
| 1079 // -title | 1079 // -title |
| 1080 // -favIconUrl | 1080 // -favIconUrl |
| 1081 | 1081 |
| 1082 // Navigate the tab to a new location if the url is different. | 1082 // Navigate the tab to a new location if the url is different. |
| 1083 std::string url_string; | 1083 std::string url_string; |
| 1084 if (update_props->HasKey(keys::kUrlKey)) { | 1084 if (update_props->HasKey(keys::kUrlKey)) { |
| 1085 EXTENSION_FUNCTION_VALIDATE(update_props->GetString( | 1085 EXTENSION_FUNCTION_VALIDATE(update_props->GetString( |
| 1086 keys::kUrlKey, &url_string)); | 1086 keys::kUrlKey, &url_string)); |
| (...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1632 &DetectTabLanguageFunction::GotLanguage, this, | 1632 &DetectTabLanguageFunction::GotLanguage, this, |
| 1633 helper->language_state().original_language())); | 1633 helper->language_state().original_language())); |
| 1634 return true; | 1634 return true; |
| 1635 } | 1635 } |
| 1636 // The tab contents does not know its language yet. Let's wait until it | 1636 // The tab contents does not know its language yet. Let's wait until it |
| 1637 // receives it, or until the tab is closed/navigates to some other page. | 1637 // receives it, or until the tab is closed/navigates to some other page. |
| 1638 registrar_.Add(this, chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, | 1638 registrar_.Add(this, chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, |
| 1639 content::Source<WebContents>(contents->web_contents())); | 1639 content::Source<WebContents>(contents->web_contents())); |
| 1640 registrar_.Add( | 1640 registrar_.Add( |
| 1641 this, content::NOTIFICATION_TAB_CLOSING, | 1641 this, content::NOTIFICATION_TAB_CLOSING, |
| 1642 content::Source<content::NavigationController>( | 1642 content::Source<NavigationController>( |
| 1643 &(contents->web_contents()->GetController()))); | 1643 &(contents->web_contents()->GetController()))); |
| 1644 registrar_.Add( | 1644 registrar_.Add( |
| 1645 this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, | 1645 this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
| 1646 content::Source<content::NavigationController>( | 1646 content::Source<NavigationController>( |
| 1647 &(contents->web_contents()->GetController()))); | 1647 &(contents->web_contents()->GetController()))); |
| 1648 return true; | 1648 return true; |
| 1649 } | 1649 } |
| 1650 | 1650 |
| 1651 void DetectTabLanguageFunction::Observe( | 1651 void DetectTabLanguageFunction::Observe( |
| 1652 int type, | 1652 int type, |
| 1653 const content::NotificationSource& source, | 1653 const content::NotificationSource& source, |
| 1654 const content::NotificationDetails& details) { | 1654 const content::NotificationDetails& details) { |
| 1655 std::string language; | 1655 std::string language; |
| 1656 if (type == chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED) | 1656 if (type == chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED) |
| 1657 language = *content::Details<std::string>(details).ptr(); | 1657 language = *content::Details<std::string>(details).ptr(); |
| 1658 | 1658 |
| 1659 registrar_.RemoveAll(); | 1659 registrar_.RemoveAll(); |
| 1660 | 1660 |
| 1661 // Call GotLanguage in all cases as we want to guarantee the callback is | 1661 // Call GotLanguage in all cases as we want to guarantee the callback is |
| 1662 // called for every API call the extension made. | 1662 // called for every API call the extension made. |
| 1663 GotLanguage(language); | 1663 GotLanguage(language); |
| 1664 } | 1664 } |
| 1665 | 1665 |
| 1666 void DetectTabLanguageFunction::GotLanguage(const std::string& language) { | 1666 void DetectTabLanguageFunction::GotLanguage(const std::string& language) { |
| 1667 result_.reset(Value::CreateStringValue(language.c_str())); | 1667 result_.reset(Value::CreateStringValue(language.c_str())); |
| 1668 SendResponse(true); | 1668 SendResponse(true); |
| 1669 | 1669 |
| 1670 Release(); // Balanced in Run() | 1670 Release(); // Balanced in Run() |
| 1671 } | 1671 } |
| OLD | NEW |