Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(143)

Side by Side Diff: chrome/browser/extensions/api/tabs/tabs_api.cc

Issue 543873002: Add ChromeExtensionFunctionDetails (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/extensions/api/tabs/tabs_api.h" 5 #include "chrome/browser/extensions/api/tabs/tabs_api.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 1618 matching lines...) Expand 10 before | Expand all | Expand 10 after
1629 } 1629 }
1630 1630
1631 void TabsDetectLanguageFunction::GotLanguage(const std::string& language) { 1631 void TabsDetectLanguageFunction::GotLanguage(const std::string& language) {
1632 SetResult(new base::StringValue(language.c_str())); 1632 SetResult(new base::StringValue(language.c_str()));
1633 SendResponse(true); 1633 SendResponse(true);
1634 1634
1635 Release(); // Balanced in Run() 1635 Release(); // Balanced in Run()
1636 } 1636 }
1637 1637
1638 ExecuteCodeInTabFunction::ExecuteCodeInTabFunction() 1638 ExecuteCodeInTabFunction::ExecuteCodeInTabFunction()
1639 : execute_tab_id_(-1) { 1639 : chrome_details_(this), execute_tab_id_(-1) {
1640 } 1640 }
1641 1641
1642 ExecuteCodeInTabFunction::~ExecuteCodeInTabFunction() {} 1642 ExecuteCodeInTabFunction::~ExecuteCodeInTabFunction() {}
1643 1643
1644 bool ExecuteCodeInTabFunction::HasPermission() { 1644 bool ExecuteCodeInTabFunction::HasPermission() {
1645 if (Init() && 1645 if (Init() &&
1646 extension_->permissions_data()->HasAPIPermissionForTab( 1646 extension_->permissions_data()->HasAPIPermissionForTab(
1647 execute_tab_id_, APIPermission::kTab)) { 1647 execute_tab_id_, APIPermission::kTab)) {
1648 return true; 1648 return true;
1649 } 1649 }
1650 return ExtensionFunction::HasPermission(); 1650 return ExtensionFunction::HasPermission();
1651 } 1651 }
1652 1652
1653 bool ExecuteCodeInTabFunction::Init() {
1654 if (details_.get())
1655 return true;
1656
1657 // |tab_id| is optional so it's ok if it's not there.
1658 int tab_id = -1;
1659 if (args_->GetInteger(0, &tab_id))
1660 EXTENSION_FUNCTION_VALIDATE(tab_id >= 0);
1661
1662 // |details| are not optional.
1663 base::DictionaryValue* details_value = NULL;
1664 if (!args_->GetDictionary(1, &details_value))
1665 return false;
1666 scoped_ptr<InjectDetails> details(new InjectDetails());
1667 if (!InjectDetails::Populate(*details_value, details.get()))
1668 return false;
1669
1670 // If the tab ID wasn't given then it needs to be converted to the
1671 // currently active tab's ID.
1672 if (tab_id == -1) {
1673 Browser* browser = chrome_details_.GetCurrentBrowser();
1674 if (!browser)
1675 return false;
1676 content::WebContents* web_contents = NULL;
1677 if (!ExtensionTabUtil::GetDefaultTab(browser, &web_contents, &tab_id))
1678 return false;
1679 }
1680
1681 execute_tab_id_ = tab_id;
1682 details_ = details.Pass();
1683 return true;
1684 }
1685
1653 bool ExecuteCodeInTabFunction::CanExecuteScriptOnPage() { 1686 bool ExecuteCodeInTabFunction::CanExecuteScriptOnPage() {
1654 content::WebContents* contents = NULL; 1687 content::WebContents* contents = NULL;
1655 1688
1656 // If |tab_id| is specified, look for the tab. Otherwise default to selected 1689 // If |tab_id| is specified, look for the tab. Otherwise default to selected
1657 // tab in the current window. 1690 // tab in the current window.
1658 CHECK_GE(execute_tab_id_, 0); 1691 CHECK_GE(execute_tab_id_, 0);
1659 if (!GetTabById(execute_tab_id_, 1692 if (!GetTabById(execute_tab_id_,
1660 GetProfile(), 1693 chrome_details_.GetProfile(),
1661 include_incognito(), 1694 include_incognito(),
1662 NULL, 1695 NULL,
1663 NULL, 1696 NULL,
1664 &contents, 1697 &contents,
1665 NULL, 1698 NULL,
1666 &error_)) { 1699 &error_)) {
1667 return false; 1700 return false;
1668 } 1701 }
1669 1702
1670 CHECK(contents); 1703 CHECK(contents);
(...skipping 12 matching lines...) Expand all
1683 } 1716 }
1684 1717
1685 return true; 1718 return true;
1686 } 1719 }
1687 1720
1688 ScriptExecutor* ExecuteCodeInTabFunction::GetScriptExecutor() { 1721 ScriptExecutor* ExecuteCodeInTabFunction::GetScriptExecutor() {
1689 Browser* browser = NULL; 1722 Browser* browser = NULL;
1690 content::WebContents* contents = NULL; 1723 content::WebContents* contents = NULL;
1691 1724
1692 bool success = GetTabById(execute_tab_id_, 1725 bool success = GetTabById(execute_tab_id_,
1693 GetProfile(), 1726 chrome_details_.GetProfile(),
1694 include_incognito(), 1727 include_incognito(),
1695 &browser, 1728 &browser,
1696 NULL, 1729 NULL,
1697 &contents, 1730 &contents,
1698 NULL, 1731 NULL,
1699 &error_) && 1732 &error_) &&
1700 contents && browser; 1733 contents && browser;
1701 1734
1702 if (!success) 1735 if (!success)
1703 return NULL; 1736 return NULL;
(...skipping 15 matching lines...) Expand all
1719 1752
1720 void TabsExecuteScriptFunction::OnExecuteCodeFinished( 1753 void TabsExecuteScriptFunction::OnExecuteCodeFinished(
1721 const std::string& error, 1754 const std::string& error,
1722 const GURL& on_url, 1755 const GURL& on_url,
1723 const base::ListValue& result) { 1756 const base::ListValue& result) {
1724 if (error.empty()) 1757 if (error.empty())
1725 SetResult(result.DeepCopy()); 1758 SetResult(result.DeepCopy());
1726 ExecuteCodeInTabFunction::OnExecuteCodeFinished(error, on_url, result); 1759 ExecuteCodeInTabFunction::OnExecuteCodeFinished(error, on_url, result);
1727 } 1760 }
1728 1761
1729 bool ExecuteCodeInTabFunction::Init() {
1730 if (details_.get())
1731 return true;
1732
1733 // |tab_id| is optional so it's ok if it's not there.
1734 int tab_id = -1;
1735 if (args_->GetInteger(0, &tab_id))
1736 EXTENSION_FUNCTION_VALIDATE(tab_id >= 0);
1737
1738 // |details| are not optional.
1739 base::DictionaryValue* details_value = NULL;
1740 if (!args_->GetDictionary(1, &details_value))
1741 return false;
1742 scoped_ptr<InjectDetails> details(new InjectDetails());
1743 if (!InjectDetails::Populate(*details_value, details.get()))
1744 return false;
1745
1746 // If the tab ID wasn't given then it needs to be converted to the
1747 // currently active tab's ID.
1748 if (tab_id == -1) {
1749 Browser* browser = GetCurrentBrowser();
1750 if (!browser)
1751 return false;
1752 content::WebContents* web_contents = NULL;
1753 if (!ExtensionTabUtil::GetDefaultTab(browser, &web_contents, &tab_id))
1754 return false;
1755 }
1756
1757 execute_tab_id_ = tab_id;
1758 details_ = details.Pass();
1759 return true;
1760 }
1761
1762 bool TabsInsertCSSFunction::ShouldInsertCSS() const { 1762 bool TabsInsertCSSFunction::ShouldInsertCSS() const {
1763 return true; 1763 return true;
1764 } 1764 }
1765 1765
1766 content::WebContents* ZoomAPIFunction::GetWebContents(int tab_id) { 1766 content::WebContents* ZoomAPIFunction::GetWebContents(int tab_id) {
1767 content::WebContents* web_contents = NULL; 1767 content::WebContents* web_contents = NULL;
1768 if (tab_id != -1) { 1768 if (tab_id != -1) {
1769 // We assume this call leaves web_contents unchanged if it is unsuccessful. 1769 // We assume this call leaves web_contents unchanged if it is unsuccessful.
1770 GetTabById(tab_id, 1770 GetTabById(tab_id,
1771 GetProfile(), 1771 GetProfile(),
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
1898 ZoomController::ZoomMode zoom_mode = zoom_controller->zoom_mode(); 1898 ZoomController::ZoomMode zoom_mode = zoom_controller->zoom_mode();
1899 api::tabs::ZoomSettings zoom_settings; 1899 api::tabs::ZoomSettings zoom_settings;
1900 ZoomModeToZoomSettings(zoom_mode, &zoom_settings); 1900 ZoomModeToZoomSettings(zoom_mode, &zoom_settings);
1901 1901
1902 results_ = api::tabs::GetZoomSettings::Results::Create(zoom_settings); 1902 results_ = api::tabs::GetZoomSettings::Results::Create(zoom_settings);
1903 SendResponse(true); 1903 SendResponse(true);
1904 return true; 1904 return true;
1905 } 1905 }
1906 1906
1907 } // namespace extensions 1907 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/api/tabs/tabs_api.h ('k') | chrome/browser/extensions/api/tabs/windows_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698