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

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

Issue 3129003: remove toolstrips (Closed)
Patch Set: merge Created 10 years, 4 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
(Empty)
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/extensions/extension_toolstrip_api.h"
6
7 #include "base/json/json_writer.h"
8 #include "base/string_util.h"
9 #include "chrome/browser/browser.h"
10 #include "chrome/browser/extensions/extension_host.h"
11 #include "chrome/browser/extensions/extension_message_service.h"
12 #include "chrome/browser/extensions/extension_shelf_model.h"
13 #include "chrome/browser/extensions/extension_tabs_module_constants.h"
14 #include "chrome/browser/profile.h"
15 #include "chrome/browser/renderer_host/render_view_host.h"
16
17 namespace extension_toolstrip_api_events {
18 const char kOnToolstripExpanded[] = "toolstrip.onExpanded.%d";
19 const char kOnToolstripCollapsed[] = "toolstrip.onCollapsed.%d";
20 }; // namespace extension_toolstrip_api_events
21
22 namespace {
23 // Errors.
24 const char kNotAToolstripError[] = "This page is not a toolstrip.";
25 const char kAlreadyExpandedError[] = "This toolstrip is already expanded.";
26 const char kAlreadyCollapsedError[] = "This toolstrip is already collapsed.";
27 const char kInvalidURLError[] = "Invalid URL";
28 const char kBadHeightError[] = "Bad height.";
29
30 // TODO(erikkay) what are good values here?
31 const int kMinHeight = 50;
32 const int kMaxHeight = 1000;
33 }; // namespace
34
35 namespace keys = extension_tabs_module_constants;
36 namespace events = extension_toolstrip_api_events;
37
38 bool ToolstripFunction::RunImpl() {
39 ViewType::Type view_type =
40 dispatcher()->render_view_host()->delegate()->GetRenderViewType();
41 if (view_type != ViewType::EXTENSION_TOOLSTRIP &&
42 view_type != ViewType::EXTENSION_MOLE) {
43 error_ = kNotAToolstripError;
44 return false;
45 }
46
47 Browser* browser = GetCurrentBrowser();
48 if (!browser) {
49 error_ = kNotAToolstripError;
50 return false;
51 }
52
53 model_ = browser->extension_shelf_model();
54 if (!model_) {
55 error_ = kNotAToolstripError;
56 return false;
57 }
58
59 // Since this is an EXTENSION_TOOLSTRIP or EXTESION_MOLE view type, we know
60 // the delegate must be an ExtensionHost.
61 ExtensionHost* host =
62 static_cast<ExtensionHost*>(dispatcher()->delegate());
63 toolstrip_ = model_->ToolstripForHost(host);
64 if (toolstrip_ == model_->end()) {
65 error_ = kNotAToolstripError;
66 return false;
67 }
68
69 return true;
70 }
71
72 bool ToolstripExpandFunction::RunImpl() {
73 if (!ToolstripFunction::RunImpl())
74 return false;
75 if (toolstrip_->height != 0) {
76 error_ = kAlreadyExpandedError;
77 return false;
78 }
79
80 DictionaryValue* args;
81 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args));
82
83 int height;
84 EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kHeightKey,
85 &height));
86 EXTENSION_FUNCTION_VALIDATE(height >= 0);
87 if (height < kMinHeight || height > kMaxHeight) {
88 error_ = kBadHeightError;
89 return false;
90 }
91
92 GURL url;
93 if (args->HasKey(keys::kUrlKey)) {
94 std::string url_string;
95 EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kUrlKey,
96 &url_string));
97 url = dispatcher()->url().Resolve(url_string);
98 if (!url.is_valid()) {
99 error_ = kInvalidURLError;
100 return false;
101 }
102 }
103
104 model_->ExpandToolstrip(toolstrip_, url, height);
105 return true;
106 }
107
108 bool ToolstripCollapseFunction::RunImpl() {
109 if (!ToolstripFunction::RunImpl())
110 return false;
111
112 if (toolstrip_->height == 0) {
113 error_ = kAlreadyCollapsedError;
114 return false;
115 }
116
117 GURL url;
118 if (HasOptionalArgument(0)) {
119 DictionaryValue* args;
120 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args));
121
122 if (args->HasKey(keys::kUrlKey)) {
123 std::string url_string;
124 EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kUrlKey,
125 &url_string));
126 url = dispatcher()->url().Resolve(url_string);
127 if (!url.is_valid()) {
128 error_ = kInvalidURLError;
129 return false;
130 }
131 }
132 }
133
134 model_->CollapseToolstrip(toolstrip_, url);
135 return true;
136 }
137
138 // static
139 void ToolstripEventRouter::DispatchEvent(Profile *profile,
140 int routing_id,
141 const char *event_name,
142 const Value& json) {
143 if (profile->GetExtensionMessageService()) {
144 std::string json_args;
145 base::JSONWriter::Write(&json, false, &json_args);
146 std::string full_event_name = StringPrintf(event_name, routing_id);
147 profile->GetExtensionMessageService()->DispatchEventToRenderers(
148 full_event_name, json_args, profile->IsOffTheRecord(), GURL());
149 }
150 }
151
152 // static
153 void ToolstripEventRouter::OnToolstripExpanded(Profile* profile,
154 int routing_id,
155 const GURL &url,
156 int height) {
157 ListValue args;
158 DictionaryValue* obj = new DictionaryValue();
159 if (!url.is_empty())
160 obj->SetString(keys::kUrlKey, url.spec());
161 obj->SetInteger(keys::kHeightKey, height);
162 args.Append(obj);
163 DispatchEvent(profile, routing_id, events::kOnToolstripExpanded, args);
164 }
165
166 // static
167 void ToolstripEventRouter::OnToolstripCollapsed(Profile* profile,
168 int routing_id,
169 const GURL &url) {
170 ListValue args;
171 DictionaryValue* obj = new DictionaryValue();
172 if (!url.is_empty())
173 obj->SetString(keys::kUrlKey, url.spec());
174 args.Append(obj);
175 DispatchEvent(profile, routing_id, events::kOnToolstripCollapsed, args);
176 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_toolstrip_api.h ('k') | chrome/browser/extensions/extension_toolstrip_apitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698