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/extensions/api/tabs/tabs_api.h" | 5 #include "chrome/browser/extensions/api/tabs/tabs_api.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <algorithm> | 8 #include <algorithm> |
9 #include <limits> | 9 #include <limits> |
| 10 #include <memory> |
10 #include <utility> | 11 #include <utility> |
11 #include <vector> | 12 #include <vector> |
12 | 13 |
13 #include "base/bind.h" | 14 #include "base/bind.h" |
14 #include "base/command_line.h" | 15 #include "base/command_line.h" |
15 #include "base/location.h" | 16 #include "base/location.h" |
16 #include "base/logging.h" | 17 #include "base/logging.h" |
| 18 #include "base/memory/ptr_util.h" |
17 #include "base/memory/ref_counted_memory.h" | 19 #include "base/memory/ref_counted_memory.h" |
18 #include "base/single_thread_task_runner.h" | 20 #include "base/single_thread_task_runner.h" |
19 #include "base/stl_util.h" | 21 #include "base/stl_util.h" |
20 #include "base/strings/pattern.h" | 22 #include "base/strings/pattern.h" |
21 #include "base/strings/string16.h" | 23 #include "base/strings/string16.h" |
22 #include "base/strings/string_number_conversions.h" | 24 #include "base/strings/string_number_conversions.h" |
23 #include "base/strings/string_util.h" | 25 #include "base/strings/string_util.h" |
24 #include "base/strings/stringprintf.h" | 26 #include "base/strings/stringprintf.h" |
25 #include "base/strings/utf_string_conversions.h" | 27 #include "base/strings/utf_string_conversions.h" |
26 #include "base/threading/thread_task_runner_handle.h" | 28 #include "base/threading/thread_task_runner_handle.h" |
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 SetResult(controller->CreateWindowValue()); | 352 SetResult(controller->CreateWindowValue()); |
351 return true; | 353 return true; |
352 } | 354 } |
353 | 355 |
354 bool WindowsGetAllFunction::RunSync() { | 356 bool WindowsGetAllFunction::RunSync() { |
355 std::unique_ptr<windows::GetAll::Params> params( | 357 std::unique_ptr<windows::GetAll::Params> params( |
356 windows::GetAll::Params::Create(*args_)); | 358 windows::GetAll::Params::Create(*args_)); |
357 EXTENSION_FUNCTION_VALIDATE(params.get()); | 359 EXTENSION_FUNCTION_VALIDATE(params.get()); |
358 | 360 |
359 ApiParameterExtractor<windows::GetAll::Params> extractor(params.get()); | 361 ApiParameterExtractor<windows::GetAll::Params> extractor(params.get()); |
360 base::ListValue* window_list = new base::ListValue(); | 362 std::unique_ptr<base::ListValue> window_list(new base::ListValue()); |
361 const WindowControllerList::ControllerList& windows = | 363 const WindowControllerList::ControllerList& windows = |
362 WindowControllerList::GetInstance()->windows(); | 364 WindowControllerList::GetInstance()->windows(); |
363 for (WindowControllerList::ControllerList::const_iterator iter = | 365 for (WindowControllerList::ControllerList::const_iterator iter = |
364 windows.begin(); | 366 windows.begin(); |
365 iter != windows.end(); ++iter) { | 367 iter != windows.end(); ++iter) { |
366 if (!windows_util::CanOperateOnWindow(this, *iter, | 368 if (!windows_util::CanOperateOnWindow(this, *iter, |
367 extractor.type_filters())) | 369 extractor.type_filters())) |
368 continue; | 370 continue; |
369 if (extractor.populate_tabs()) | 371 if (extractor.populate_tabs()) |
370 window_list->Append((*iter)->CreateWindowValueWithTabs(extension())); | 372 window_list->Append((*iter)->CreateWindowValueWithTabs(extension())); |
371 else | 373 else |
372 window_list->Append((*iter)->CreateWindowValue()); | 374 window_list->Append((*iter)->CreateWindowValue()); |
373 } | 375 } |
374 SetResult(window_list); | 376 SetResult(std::move(window_list)); |
375 return true; | 377 return true; |
376 } | 378 } |
377 | 379 |
378 bool WindowsCreateFunction::ShouldOpenIncognitoWindow( | 380 bool WindowsCreateFunction::ShouldOpenIncognitoWindow( |
379 const windows::Create::Params::CreateData* create_data, | 381 const windows::Create::Params::CreateData* create_data, |
380 std::vector<GURL>* urls, bool* is_error) { | 382 std::vector<GURL>* urls, bool* is_error) { |
381 *is_error = false; | 383 *is_error = false; |
382 const IncognitoModePrefs::Availability incognito_availability = | 384 const IncognitoModePrefs::Availability incognito_availability = |
383 IncognitoModePrefs::GetAvailability(GetProfile()->GetPrefs()); | 385 IncognitoModePrefs::GetAvailability(GetProfile()->GetPrefs()); |
384 bool incognito = false; | 386 bool incognito = false; |
(...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
911 window_id = *params->query_info.window_id; | 913 window_id = *params->query_info.window_id; |
912 | 914 |
913 int index = -1; | 915 int index = -1; |
914 if (params->query_info.index.get()) | 916 if (params->query_info.index.get()) |
915 index = *params->query_info.index; | 917 index = *params->query_info.index; |
916 | 918 |
917 std::string window_type; | 919 std::string window_type; |
918 if (params->query_info.window_type != tabs::WINDOW_TYPE_NONE) | 920 if (params->query_info.window_type != tabs::WINDOW_TYPE_NONE) |
919 window_type = tabs::ToString(params->query_info.window_type); | 921 window_type = tabs::ToString(params->query_info.window_type); |
920 | 922 |
921 base::ListValue* result = new base::ListValue(); | 923 std::unique_ptr<base::ListValue> result(new base::ListValue()); |
922 Browser* last_active_browser = | 924 Browser* last_active_browser = |
923 chrome::FindAnyBrowser(GetProfile(), include_incognito()); | 925 chrome::FindAnyBrowser(GetProfile(), include_incognito()); |
924 Browser* current_browser = GetCurrentBrowser(); | 926 Browser* current_browser = GetCurrentBrowser(); |
925 for (auto* browser : *BrowserList::GetInstance()) { | 927 for (auto* browser : *BrowserList::GetInstance()) { |
926 if (!GetProfile()->IsSameProfile(browser->profile())) | 928 if (!GetProfile()->IsSameProfile(browser->profile())) |
927 continue; | 929 continue; |
928 | 930 |
929 if (!browser->window()) | 931 if (!browser->window()) |
930 continue; | 932 continue; |
931 | 933 |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1021 if (loading_status_set && loading != web_contents->IsLoading()) | 1023 if (loading_status_set && loading != web_contents->IsLoading()) |
1022 continue; | 1024 continue; |
1023 | 1025 |
1024 result->Append(ExtensionTabUtil::CreateTabObject(web_contents, tab_strip, | 1026 result->Append(ExtensionTabUtil::CreateTabObject(web_contents, tab_strip, |
1025 i, extension()) | 1027 i, extension()) |
1026 ->ToValue() | 1028 ->ToValue() |
1027 .release()); | 1029 .release()); |
1028 } | 1030 } |
1029 } | 1031 } |
1030 | 1032 |
1031 SetResult(result); | 1033 SetResult(std::move(result)); |
1032 return true; | 1034 return true; |
1033 } | 1035 } |
1034 | 1036 |
1035 bool TabsCreateFunction::RunSync() { | 1037 bool TabsCreateFunction::RunSync() { |
1036 std::unique_ptr<tabs::Create::Params> params( | 1038 std::unique_ptr<tabs::Create::Params> params( |
1037 tabs::Create::Params::Create(*args_)); | 1039 tabs::Create::Params::Create(*args_)); |
1038 EXTENSION_FUNCTION_VALIDATE(params.get()); | 1040 EXTENSION_FUNCTION_VALIDATE(params.get()); |
1039 | 1041 |
1040 ExtensionTabUtil::OpenTabParams options; | 1042 ExtensionTabUtil::OpenTabParams options; |
1041 AssignOptionalValue(params->create_properties.window_id, options.window_id); | 1043 AssignOptionalValue(params->create_properties.window_id, options.window_id); |
1042 AssignOptionalValue(params->create_properties.opener_tab_id, | 1044 AssignOptionalValue(params->create_properties.opener_tab_id, |
1043 options.opener_tab_id); | 1045 options.opener_tab_id); |
1044 AssignOptionalValue(params->create_properties.selected, options.active); | 1046 AssignOptionalValue(params->create_properties.selected, options.active); |
1045 // The 'active' property has replaced the 'selected' property. | 1047 // The 'active' property has replaced the 'selected' property. |
1046 AssignOptionalValue(params->create_properties.active, options.active); | 1048 AssignOptionalValue(params->create_properties.active, options.active); |
1047 AssignOptionalValue(params->create_properties.pinned, options.pinned); | 1049 AssignOptionalValue(params->create_properties.pinned, options.pinned); |
1048 AssignOptionalValue(params->create_properties.index, options.index); | 1050 AssignOptionalValue(params->create_properties.index, options.index); |
1049 AssignOptionalValue(params->create_properties.url, options.url); | 1051 AssignOptionalValue(params->create_properties.url, options.url); |
1050 | 1052 |
1051 std::string error; | 1053 std::string error; |
1052 std::unique_ptr<base::DictionaryValue> result( | 1054 std::unique_ptr<base::DictionaryValue> result( |
1053 ExtensionTabUtil::OpenTab(this, options, &error)); | 1055 ExtensionTabUtil::OpenTab(this, options, &error)); |
1054 if (!result) { | 1056 if (!result) { |
1055 SetError(error); | 1057 SetError(error); |
1056 return false; | 1058 return false; |
1057 } | 1059 } |
1058 | 1060 |
1059 // Return data about the newly created tab. | 1061 // Return data about the newly created tab. |
1060 if (has_callback()) { | 1062 if (has_callback()) { |
1061 SetResult(result.release()); | 1063 SetResult(std::move(result)); |
1062 } | 1064 } |
1063 return true; | 1065 return true; |
1064 } | 1066 } |
1065 | 1067 |
1066 bool TabsDuplicateFunction::RunSync() { | 1068 bool TabsDuplicateFunction::RunSync() { |
1067 std::unique_ptr<tabs::Duplicate::Params> params( | 1069 std::unique_ptr<tabs::Duplicate::Params> params( |
1068 tabs::Duplicate::Params::Create(*args_)); | 1070 tabs::Duplicate::Params::Create(*args_)); |
1069 EXTENSION_FUNCTION_VALIDATE(params.get()); | 1071 EXTENSION_FUNCTION_VALIDATE(params.get()); |
1070 int tab_id = params->tab_id; | 1072 int tab_id = params->tab_id; |
1071 | 1073 |
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1444 | 1446 |
1445 if (!has_callback()) | 1447 if (!has_callback()) |
1446 return true; | 1448 return true; |
1447 | 1449 |
1448 if (num_tabs == 0) { | 1450 if (num_tabs == 0) { |
1449 error_ = "No tabs given."; | 1451 error_ = "No tabs given."; |
1450 return false; | 1452 return false; |
1451 } else if (num_tabs == 1) { | 1453 } else if (num_tabs == 1) { |
1452 std::unique_ptr<base::Value> value; | 1454 std::unique_ptr<base::Value> value; |
1453 CHECK(tab_values.get()->Remove(0, &value)); | 1455 CHECK(tab_values.get()->Remove(0, &value)); |
1454 SetResult(value.release()); | 1456 SetResult(std::move(value)); |
1455 } else { | 1457 } else { |
1456 // Only return the results as an array if there are multiple tabs. | 1458 // Only return the results as an array if there are multiple tabs. |
1457 SetResult(tab_values.release()); | 1459 SetResult(std::move(tab_values)); |
1458 } | 1460 } |
1459 | 1461 |
1460 return true; | 1462 return true; |
1461 } | 1463 } |
1462 | 1464 |
1463 bool TabsMoveFunction::MoveTab(int tab_id, | 1465 bool TabsMoveFunction::MoveTab(int tab_id, |
1464 int* new_index, | 1466 int* new_index, |
1465 int iteration, | 1467 int iteration, |
1466 base::ListValue* tab_values, | 1468 base::ListValue* tab_values, |
1467 int* window_id) { | 1469 int* window_id) { |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1727 this)); | 1729 this)); |
1728 } | 1730 } |
1729 | 1731 |
1730 void TabsCaptureVisibleTabFunction::OnCaptureSuccess(const SkBitmap& bitmap) { | 1732 void TabsCaptureVisibleTabFunction::OnCaptureSuccess(const SkBitmap& bitmap) { |
1731 std::string base64_result; | 1733 std::string base64_result; |
1732 if (!EncodeBitmap(bitmap, &base64_result)) { | 1734 if (!EncodeBitmap(bitmap, &base64_result)) { |
1733 OnCaptureFailure(FAILURE_REASON_ENCODING_FAILED); | 1735 OnCaptureFailure(FAILURE_REASON_ENCODING_FAILED); |
1734 return; | 1736 return; |
1735 } | 1737 } |
1736 | 1738 |
1737 SetResult(new base::StringValue(base64_result)); | 1739 SetResult(base::MakeUnique<base::StringValue>(base64_result)); |
1738 SendResponse(true); | 1740 SendResponse(true); |
1739 } | 1741 } |
1740 | 1742 |
1741 void TabsCaptureVisibleTabFunction::OnCaptureFailure(FailureReason reason) { | 1743 void TabsCaptureVisibleTabFunction::OnCaptureFailure(FailureReason reason) { |
1742 const char* reason_description = "internal error"; | 1744 const char* reason_description = "internal error"; |
1743 switch (reason) { | 1745 switch (reason) { |
1744 case FAILURE_REASON_UNKNOWN: | 1746 case FAILURE_REASON_UNKNOWN: |
1745 reason_description = "unknown error"; | 1747 reason_description = "unknown error"; |
1746 break; | 1748 break; |
1747 case FAILURE_REASON_ENCODING_FAILED: | 1749 case FAILURE_REASON_ENCODING_FAILED: |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1843 } | 1845 } |
1844 | 1846 |
1845 registrar_.RemoveAll(); | 1847 registrar_.RemoveAll(); |
1846 | 1848 |
1847 // Call GotLanguage in all cases as we want to guarantee the callback is | 1849 // Call GotLanguage in all cases as we want to guarantee the callback is |
1848 // called for every API call the extension made. | 1850 // called for every API call the extension made. |
1849 GotLanguage(language); | 1851 GotLanguage(language); |
1850 } | 1852 } |
1851 | 1853 |
1852 void TabsDetectLanguageFunction::GotLanguage(const std::string& language) { | 1854 void TabsDetectLanguageFunction::GotLanguage(const std::string& language) { |
1853 SetResult(new base::StringValue(language.c_str())); | 1855 SetResult(base::MakeUnique<base::StringValue>(language.c_str())); |
1854 SendResponse(true); | 1856 SendResponse(true); |
1855 | 1857 |
1856 Release(); // Balanced in Run() | 1858 Release(); // Balanced in Run() |
1857 } | 1859 } |
1858 | 1860 |
1859 ExecuteCodeInTabFunction::ExecuteCodeInTabFunction() | 1861 ExecuteCodeInTabFunction::ExecuteCodeInTabFunction() |
1860 : chrome_details_(this), execute_tab_id_(-1) { | 1862 : chrome_details_(this), execute_tab_id_(-1) { |
1861 } | 1863 } |
1862 | 1864 |
1863 ExecuteCodeInTabFunction::~ExecuteCodeInTabFunction() {} | 1865 ExecuteCodeInTabFunction::~ExecuteCodeInTabFunction() {} |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1999 | 2001 |
2000 bool TabsExecuteScriptFunction::ShouldInsertCSS() const { | 2002 bool TabsExecuteScriptFunction::ShouldInsertCSS() const { |
2001 return false; | 2003 return false; |
2002 } | 2004 } |
2003 | 2005 |
2004 void TabsExecuteScriptFunction::OnExecuteCodeFinished( | 2006 void TabsExecuteScriptFunction::OnExecuteCodeFinished( |
2005 const std::string& error, | 2007 const std::string& error, |
2006 const GURL& on_url, | 2008 const GURL& on_url, |
2007 const base::ListValue& result) { | 2009 const base::ListValue& result) { |
2008 if (error.empty()) | 2010 if (error.empty()) |
2009 SetResult(result.DeepCopy()); | 2011 SetResult(result.CreateDeepCopy()); |
2010 ExecuteCodeInTabFunction::OnExecuteCodeFinished(error, on_url, result); | 2012 ExecuteCodeInTabFunction::OnExecuteCodeFinished(error, on_url, result); |
2011 } | 2013 } |
2012 | 2014 |
2013 bool TabsInsertCSSFunction::ShouldInsertCSS() const { | 2015 bool TabsInsertCSSFunction::ShouldInsertCSS() const { |
2014 return true; | 2016 return true; |
2015 } | 2017 } |
2016 | 2018 |
2017 content::WebContents* ZoomAPIFunction::GetWebContents(int tab_id) { | 2019 content::WebContents* ZoomAPIFunction::GetWebContents(int tab_id) { |
2018 content::WebContents* web_contents = NULL; | 2020 content::WebContents* web_contents = NULL; |
2019 if (tab_id != -1) { | 2021 if (tab_id != -1) { |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2155 ZoomModeToZoomSettings(zoom_mode, &zoom_settings); | 2157 ZoomModeToZoomSettings(zoom_mode, &zoom_settings); |
2156 zoom_settings.default_zoom_factor.reset(new double( | 2158 zoom_settings.default_zoom_factor.reset(new double( |
2157 content::ZoomLevelToZoomFactor(zoom_controller->GetDefaultZoomLevel()))); | 2159 content::ZoomLevelToZoomFactor(zoom_controller->GetDefaultZoomLevel()))); |
2158 | 2160 |
2159 results_ = api::tabs::GetZoomSettings::Results::Create(zoom_settings); | 2161 results_ = api::tabs::GetZoomSettings::Results::Create(zoom_settings); |
2160 SendResponse(true); | 2162 SendResponse(true); |
2161 return true; | 2163 return true; |
2162 } | 2164 } |
2163 | 2165 |
2164 } // namespace extensions | 2166 } // namespace extensions |
OLD | NEW |