summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_tabs_module.cc
diff options
context:
space:
mode:
authorjstritar@chromium.org <jstritar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-14 20:05:54 +0000
committerjstritar@chromium.org <jstritar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-14 20:05:54 +0000
commitce258c92a8cb8183105d05a6f8d8b8b48614eabf (patch)
treee346c6b52506877d2ee61114df9d4173b771c0d8 /chrome/browser/extensions/extension_tabs_module.cc
parent18b147138e014805955bfcb5dc93e2191d6e2447 (diff)
downloadchromium_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.cc49
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;