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

Side by Side Diff: chrome/browser/extensions/extension_toolstrip_api.cc

Issue 195093: handle mole/toolstrip URLs properly (Closed)
Patch Set: Created 11 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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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_toolstrip_api.h" 5 #include "chrome/browser/extensions/extension_toolstrip_api.h"
6 6
7 #include "base/json_writer.h" 7 #include "base/json_writer.h"
8 #include "chrome/browser/browser.h" 8 #include "chrome/browser/browser.h"
9 #include "chrome/browser/extensions/extension_host.h" 9 #include "chrome/browser/extensions/extension_host.h"
10 #include "chrome/browser/extensions/extension_message_service.h" 10 #include "chrome/browser/extensions/extension_message_service.h"
(...skipping 15 matching lines...) Expand all
26 // Errors. 26 // Errors.
27 const char kNotAToolstripError[] = "This page is not a toolstrip."; 27 const char kNotAToolstripError[] = "This page is not a toolstrip.";
28 const char kAlreadyExpandedError[] = "This toolstrip is already expanded."; 28 const char kAlreadyExpandedError[] = "This toolstrip is already expanded.";
29 const char kAlreadyCollapsedError[] = "This toolstrip is already collapsed."; 29 const char kAlreadyCollapsedError[] = "This toolstrip is already collapsed.";
30 const char kInvalidURLError[] = "Invalid URL"; 30 const char kInvalidURLError[] = "Invalid URL";
31 const char kBadHeightError[] = "Bad height."; 31 const char kBadHeightError[] = "Bad height.";
32 32
33 // TODO(erikkay) what are good values here? 33 // TODO(erikkay) what are good values here?
34 const int kMinHeight = 50; 34 const int kMinHeight = 50;
35 const int kMaxHeight = 1000; 35 const int kMaxHeight = 1000;
36
37 // If |url_string| is a valid URL, simply return that, otherwise see if it's
38 // a valid extension URL, relative to the |current_url|.
39 static GURL ResolveURLForExtension(const std::string& url_string,
Matt Perry 2009/09/15 20:31:57 I think Resolve works on absolute URLs too, so thi
40 const GURL& current_url,
41 Extension *extension) {
42 GURL url = GURL(url_string);
43 if (!url.is_valid()) {
44 url = current_url.Resolve(url_string);
45 if (url.is_empty())
46 return url;
47 }
48 return url;
49 }
50
36 }; // namespace 51 }; // namespace
37 52
38 namespace keys = extension_tabs_module_constants; 53 namespace keys = extension_tabs_module_constants;
39 namespace events = extension_toolstrip_api_events; 54 namespace events = extension_toolstrip_api_events;
40 55
41 bool ToolstripFunction::RunImpl() { 56 bool ToolstripFunction::RunImpl() {
42 ExtensionHost* host = dispatcher()->GetExtensionHost(); 57 ExtensionHost* host = dispatcher()->GetExtensionHost();
43 if (!host) { 58 if (!host) {
44 error_ = kNotAToolstripError; 59 error_ = kNotAToolstripError;
45 return false; 60 return false;
(...skipping 29 matching lines...) Expand all
75 90
76 int height; 91 int height;
77 EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kHeightKey, 92 EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kHeightKey,
78 &height)); 93 &height));
79 EXTENSION_FUNCTION_VALIDATE(height >= 0); 94 EXTENSION_FUNCTION_VALIDATE(height >= 0);
80 if (height < kMinHeight || height > kMaxHeight) { 95 if (height < kMinHeight || height > kMaxHeight) {
81 error_ = kBadHeightError; 96 error_ = kBadHeightError;
82 return false; 97 return false;
83 } 98 }
84 99
85
86 GURL url; 100 GURL url;
87 if (args->HasKey(keys::kUrlKey)) { 101 if (args->HasKey(keys::kUrlKey)) {
88 std::string url_string; 102 std::string url_string;
89 EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kUrlKey, 103 EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kUrlKey,
90 &url_string)); 104 &url_string));
91 url = GURL(url_string); 105 url = ResolveURLForExtension(url_string,
92 if (!url.is_valid() && !url.is_empty()) { 106 dispatcher()->url(),
107 dispatcher()->GetExtension());
108 if (!url.is_valid()) {
93 error_ = kInvalidURLError; 109 error_ = kInvalidURLError;
94 return false; 110 return false;
95 } 111 }
96 } 112 }
97 113
98 model_->ExpandToolstrip(toolstrip_, url, height); 114 model_->ExpandToolstrip(toolstrip_, url, height);
99 return true; 115 return true;
100 } 116 }
101 117
102 bool ToolstripCollapseFunction::RunImpl() { 118 bool ToolstripCollapseFunction::RunImpl() {
103 if (!ToolstripFunction::RunImpl()) 119 if (!ToolstripFunction::RunImpl())
104 return false; 120 return false;
105 121
106 if (toolstrip_->height == 0) { 122 if (toolstrip_->height == 0) {
107 error_ = kAlreadyCollapsedError; 123 error_ = kAlreadyCollapsedError;
108 return false; 124 return false;
109 } 125 }
110 126
111 GURL url; 127 GURL url;
112 if (args_->GetType() != Value::TYPE_NULL) { 128 if (args_->GetType() != Value::TYPE_NULL) {
113 EXTENSION_FUNCTION_VALIDATE(args_->IsType(Value::TYPE_DICTIONARY)); 129 EXTENSION_FUNCTION_VALIDATE(args_->IsType(Value::TYPE_DICTIONARY));
114 const DictionaryValue* args = static_cast<const DictionaryValue*>(args_); 130 const DictionaryValue* args = static_cast<const DictionaryValue*>(args_);
115 131
116 if (args->HasKey(keys::kUrlKey)) { 132 if (args->HasKey(keys::kUrlKey)) {
117 std::string url_string; 133 std::string url_string;
118 EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kUrlKey, 134 EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kUrlKey,
119 &url_string)); 135 &url_string));
120 url = GURL(url_string); 136 url = ResolveURLForExtension(url_string,
121 if (!url.is_valid() && !url.is_empty()) { 137 dispatcher()->url(),
138 dispatcher()->GetExtension());
139 if (!url.is_valid()) {
122 error_ = kInvalidURLError; 140 error_ = kInvalidURLError;
123 return false; 141 return false;
124 } 142 }
125 } 143 }
126 } 144 }
127 145
128 model_->CollapseToolstrip(toolstrip_, url); 146 model_->CollapseToolstrip(toolstrip_, url);
129 return true; 147 return true;
130 } 148 }
131 149
(...skipping 29 matching lines...) Expand all
161 void ToolstripEventRouter::OnToolstripCollapsed(Profile* profile, 179 void ToolstripEventRouter::OnToolstripCollapsed(Profile* profile,
162 int routing_id, 180 int routing_id,
163 const GURL &url) { 181 const GURL &url) {
164 ListValue args; 182 ListValue args;
165 DictionaryValue* obj = new DictionaryValue(); 183 DictionaryValue* obj = new DictionaryValue();
166 if (!url.is_empty()) 184 if (!url.is_empty())
167 obj->SetString(keys::kUrlKey, url.spec()); 185 obj->SetString(keys::kUrlKey, url.spec());
168 args.Append(obj); 186 args.Append(obj);
169 DispatchEvent(profile, routing_id, events::kOnToolstripCollapsed, args); 187 DispatchEvent(profile, routing_id, events::kOnToolstripCollapsed, args);
170 } 188 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_host.cc ('k') | chrome/test/data/extensions/api_test/toolstrip/folder/relative.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698