diff options
author | jstritar@chromium.org <jstritar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-14 20:05:54 +0000 |
---|---|---|
committer | jstritar@chromium.org <jstritar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-14 20:05:54 +0000 |
commit | ce258c92a8cb8183105d05a6f8d8b8b48614eabf (patch) | |
tree | e346c6b52506877d2ee61114df9d4173b771c0d8 /chrome/browser/extensions/extension_tabs_module.cc | |
parent | 18b147138e014805955bfcb5dc93e2191d6e2447 (diff) | |
download | chromium_src-ce258c92a8cb8183105d05a6f8d8b8b48614eabf.zip chromium_src-ce258c92a8cb8183105d05a6f8d8b8b48614eabf.tar.gz chromium_src-ce258c92a8cb8183105d05a6f8d8b8b48614eabf.tar.bz2 |
Tab array support for chrome.windows.create
With this change, a user can pass in an individual url or a list of urls to be opened with the new window.
BUG=53517
TEST=ExtensionApiTest
Review URL: http://codereview.chromium.org/3772004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@62633 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_tabs_module.cc')
-rw-r--r-- | chrome/browser/extensions/extension_tabs_module.cc | 49 |
1 files changed, 38 insertions, 11 deletions
diff --git a/chrome/browser/extensions/extension_tabs_module.cc b/chrome/browser/extensions/extension_tabs_module.cc index 7cbaf29..7c5ac37 100644 --- a/chrome/browser/extensions/extension_tabs_module.cc +++ b/chrome/browser/extensions/extension_tabs_module.cc @@ -288,23 +288,43 @@ bool GetAllWindowsFunction::RunImpl() { } bool CreateWindowFunction::RunImpl() { - GURL url; DictionaryValue* args = NULL; + std::vector<GURL> urls; if (HasOptionalArgument(0)) EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); // Look for optional url. if (args) { - std::string url_string; if (args->HasKey(keys::kUrlKey)) { - EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kUrlKey, - &url_string)); - url = ResolvePossiblyRelativeURL(url_string, GetExtension()); - if (!url.is_valid()) { - error_ = ExtensionErrorUtils::FormatErrorMessage( - keys::kInvalidUrlError, url_string); - return false; + Value* url_value; + std::vector<std::string> url_strings; + args->Get(keys::kUrlKey, &url_value); + + // First, get all the URLs the client wants to open. + if (url_value->IsType(Value::TYPE_STRING)) { + std::string url_string; + url_value->GetAsString(&url_string); + url_strings.push_back(url_string); + } else if (url_value->IsType(Value::TYPE_LIST)) { + const ListValue* url_list = static_cast<const ListValue*>(url_value); + for (size_t i = 0; i < url_list->GetSize(); ++i) { + std::string url_string; + EXTENSION_FUNCTION_VALIDATE(url_list->GetString(i, &url_string)); + url_strings.push_back(url_string); + } + } + + // Second, resolve, validate and convert them to GURLs. + for (std::vector<std::string>::iterator i = url_strings.begin(); + i != url_strings.end(); ++i) { + GURL url = ResolvePossiblyRelativeURL(*i, GetExtension()); + if (!url.is_valid()) { + error_ = ExtensionErrorUtils::FormatErrorMessage( + keys::kInvalidUrlError, *i); + return false; + } + urls.push_back(url); } } } @@ -386,7 +406,14 @@ bool CreateWindowFunction::RunImpl() { } Browser* new_window = Browser::CreateForType(window_type, window_profile); - new_window->AddSelectedTabWithURL(url, PageTransition::LINK); + for (std::vector<GURL>::iterator i = urls.begin(); i != urls.end(); ++i) { + Browser::AddTabWithURLParams addTabParams = + Browser::AddTabWithURLParams(*i, PageTransition::LINK); + new_window->AddTabWithURL(&addTabParams); + } + if (urls.size() == 0) + new_window->NewTab(); + new_window->SelectNumberedTab(0); if (window_type & Browser::TYPE_POPUP) new_window->window()->SetBounds(popup_bounds); else @@ -397,7 +424,7 @@ bool CreateWindowFunction::RunImpl() { // Don't expose incognito windows if the extension isn't allowed. result_.reset(Value::CreateNullValue()); } else { - result_.reset(ExtensionTabUtil::CreateWindowValue(new_window, false)); + result_.reset(ExtensionTabUtil::CreateWindowValue(new_window, true)); } return true; |