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

Side by Side Diff: chrome/renderer/extensions/extension_process_bindings.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
« no previous file with comments | « chrome/renderer/extensions/extension_process_bindings.h ('k') | chrome/renderer/render_view.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 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 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/renderer/extensions/extension_process_bindings.h" 5 #include "chrome/renderer/extensions/extension_process_bindings.h"
6 6
7 #include <map> 7 #include <map>
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 194
195 // Returns true is |type| "isa" |match|. 195 // Returns true is |type| "isa" |match|.
196 static bool ViewTypeMatches(ViewType::Type type, ViewType::Type match) { 196 static bool ViewTypeMatches(ViewType::Type type, ViewType::Type match) {
197 if (type == match) 197 if (type == match)
198 return true; 198 return true;
199 199
200 // INVALID means match all. 200 // INVALID means match all.
201 if (match == ViewType::INVALID) 201 if (match == ViewType::INVALID)
202 return true; 202 return true;
203 203
204 // TODO(erikkay) for now, special case mole as a type of toolstrip.
205 // Perhaps this isn't the right long-term thing to do.
206 if (match == ViewType::EXTENSION_TOOLSTRIP &&
207 type == ViewType::EXTENSION_MOLE) {
208 return true;
209 }
210
211 return false; 204 return false;
212 } 205 }
213 206
214 std::string extension_id_; 207 std::string extension_id_;
215 int browser_window_id_; 208 int browser_window_id_;
216 ViewType::Type view_type_; 209 ViewType::Type view_type_;
217 v8::Local<v8::Array> views_; 210 v8::Local<v8::Array> views_;
218 int index_; 211 int index_;
219 }; 212 };
220 213
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 } 275 }
283 276
284 static v8::Handle<v8::Value> PopupViewFinder( 277 static v8::Handle<v8::Value> PopupViewFinder(
285 const v8::Arguments& args, 278 const v8::Arguments& args,
286 ViewType::Type viewtype_to_find) { 279 ViewType::Type viewtype_to_find) {
287 // TODO(twiz) Correct the logic that ties the ownership of the pop-up view 280 // TODO(twiz) Correct the logic that ties the ownership of the pop-up view
288 // to the hosting view. At the moment we assume that there may only be 281 // to the hosting view. At the moment we assume that there may only be
289 // a single pop-up view for a given extension. By doing so, we can find 282 // a single pop-up view for a given extension. By doing so, we can find
290 // the pop-up view by simply searching for the only pop-up view present. 283 // the pop-up view by simply searching for the only pop-up view present.
291 // We also assume that if the current view is a pop-up, we can find the 284 // We also assume that if the current view is a pop-up, we can find the
292 // hosting view by searching for a TOOLSTRIP view. 285 // hosting view by searching for a tab contents view.
293 if (args.Length() != 0) 286 if (args.Length() != 0)
294 return v8::Undefined(); 287 return v8::Undefined();
295 288
296 if (viewtype_to_find != ViewType::EXTENSION_POPUP && 289 if (viewtype_to_find != ViewType::EXTENSION_POPUP &&
297 viewtype_to_find != ViewType::EXTENSION_TOOLSTRIP) { 290 viewtype_to_find != ViewType::TAB_CONTENTS) {
298 NOTREACHED() << "Requesting invalid view type."; 291 NOTREACHED() << "Requesting invalid view type.";
299 } 292 }
300 293
301 // Disallow searching for a host view if we are a popup view, and likewise 294 // Disallow searching for the same view type as the current view:
302 // if we are a toolstrip view. 295 // Popups can only look for hosts, and hosts can only look for popups.
303 RenderView* render_view = bindings_utils::GetRenderViewForCurrentContext(); 296 RenderView* render_view = bindings_utils::GetRenderViewForCurrentContext();
304 if (!render_view || 297 if (!render_view ||
305 render_view->view_type() == viewtype_to_find) { 298 render_view->view_type() == viewtype_to_find) {
306 return v8::Undefined(); 299 return v8::Undefined();
307 } 300 }
308 301
309 int browser_window_id = render_view->browser_window_id(); 302 int browser_window_id = render_view->browser_window_id();
310 std::string extension_id = ExtensionIdForCurrentContext(); 303 std::string extension_id = ExtensionIdForCurrentContext();
311 if (extension_id.empty()) 304 if (extension_id.empty())
312 return v8::Undefined(); 305 return v8::Undefined();
313 306
314 ExtensionViewAccumulator popup_matcher(extension_id, 307 ExtensionViewAccumulator popup_matcher(extension_id,
315 browser_window_id, 308 browser_window_id,
316 viewtype_to_find); 309 viewtype_to_find);
317 RenderView::ForEach(&popup_matcher); 310 RenderView::ForEach(&popup_matcher);
318 311
319 if (0 == popup_matcher.views()->Length()) 312 if (0 == popup_matcher.views()->Length())
320 return v8::Undefined(); 313 return v8::Undefined();
321 DCHECK(1 == popup_matcher.views()->Length()); 314 DCHECK(1 == popup_matcher.views()->Length());
322 315
323 // Return the first view found. 316 // Return the first view found.
324 return popup_matcher.views()->Get(v8::Integer::New(0)); 317 return popup_matcher.views()->Get(v8::Integer::New(0));
325 } 318 }
326 319
327 static v8::Handle<v8::Value> GetPopupView(const v8::Arguments& args) { 320 static v8::Handle<v8::Value> GetPopupView(const v8::Arguments& args) {
328 return PopupViewFinder(args, ViewType::EXTENSION_POPUP); 321 return PopupViewFinder(args, ViewType::EXTENSION_POPUP);
329 } 322 }
330 323
331 static v8::Handle<v8::Value> GetPopupParentWindow(const v8::Arguments& args) { 324 static v8::Handle<v8::Value> GetPopupParentWindow(const v8::Arguments& args) {
332 return PopupViewFinder(args, ViewType::EXTENSION_TOOLSTRIP); 325 return PopupViewFinder(args, ViewType::TAB_CONTENTS);
333 } 326 }
334 327
335 static v8::Handle<v8::Value> GetExtensionViews(const v8::Arguments& args) { 328 static v8::Handle<v8::Value> GetExtensionViews(const v8::Arguments& args) {
336 if (args.Length() != 2) 329 if (args.Length() != 2)
337 return v8::Undefined(); 330 return v8::Undefined();
338 331
339 if (!args[0]->IsInt32() || !args[1]->IsString()) 332 if (!args[0]->IsInt32() || !args[1]->IsString())
340 return v8::Undefined(); 333 return v8::Undefined();
341 334
342 // |browser_window_id| == extension_misc::kUnknownWindowId means getting 335 // |browser_window_id| == extension_misc::kUnknownWindowId means getting
343 // views attached to any browser window. 336 // views attached to any browser window.
344 int browser_window_id = args[0]->Int32Value(); 337 int browser_window_id = args[0]->Int32Value();
345 338
346 std::string view_type_string = *v8::String::Utf8Value(args[1]->ToString()); 339 std::string view_type_string = *v8::String::Utf8Value(args[1]->ToString());
347 StringToUpperASCII(&view_type_string); 340 StringToUpperASCII(&view_type_string);
348 // |view_type| == ViewType::INVALID means getting any type of views. 341 // |view_type| == ViewType::INVALID means getting any type of views.
349 ViewType::Type view_type = ViewType::INVALID; 342 ViewType::Type view_type = ViewType::INVALID;
350 if (view_type_string == ViewType::kToolstrip) { 343 if (view_type_string == ViewType::kBackgroundPage) {
351 view_type = ViewType::EXTENSION_TOOLSTRIP;
352 } else if (view_type_string == ViewType::kMole) {
353 view_type = ViewType::EXTENSION_MOLE;
354 } else if (view_type_string == ViewType::kBackgroundPage) {
355 view_type = ViewType::EXTENSION_BACKGROUND_PAGE; 344 view_type = ViewType::EXTENSION_BACKGROUND_PAGE;
356 } else if (view_type_string == ViewType::kInfobar) { 345 } else if (view_type_string == ViewType::kInfobar) {
357 view_type = ViewType::EXTENSION_INFOBAR; 346 view_type = ViewType::EXTENSION_INFOBAR;
358 } else if (view_type_string == ViewType::kNotification) { 347 } else if (view_type_string == ViewType::kNotification) {
359 view_type = ViewType::NOTIFICATION; 348 view_type = ViewType::NOTIFICATION;
360 } else if (view_type_string == ViewType::kTabContents) { 349 } else if (view_type_string == ViewType::kTabContents) {
361 view_type = ViewType::TAB_CONTENTS; 350 view_type = ViewType::TAB_CONTENTS;
362 } else if (view_type_string == ViewType::kPopup) { 351 } else if (view_type_string == ViewType::kPopup) {
363 view_type = ViewType::EXTENSION_POPUP; 352 view_type = ViewType::EXTENSION_POPUP;
364 } else if (view_type_string != ViewType::kAll) { 353 } else if (view_type_string != ViewType::kAll) {
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 const std::string& function_name) { 691 const std::string& function_name) {
703 static const char kMessage[] = 692 static const char kMessage[] =
704 "You do not have permission to use '%s'. Be sure to declare" 693 "You do not have permission to use '%s'. Be sure to declare"
705 " in your manifest what permissions you need."; 694 " in your manifest what permissions you need.";
706 std::string error_msg = StringPrintf(kMessage, function_name.c_str()); 695 std::string error_msg = StringPrintf(kMessage, function_name.c_str());
707 696
708 return v8::ThrowException(v8::Exception::Error( 697 return v8::ThrowException(v8::Exception::Error(
709 v8::String::New(error_msg.c_str()))); 698 v8::String::New(error_msg.c_str())));
710 } 699 }
711 700
712 // static
713 void ExtensionProcessBindings::SetViewType(WebView* view,
714 ViewType::Type type) {
715 DCHECK(type == ViewType::EXTENSION_MOLE ||
716 type == ViewType::EXTENSION_TOOLSTRIP);
717 const char* type_str;
718 if (type == ViewType::EXTENSION_MOLE)
719 type_str = "mole";
720 else if (type == ViewType::EXTENSION_TOOLSTRIP)
721 type_str = "toolstrip";
722 else
723 return;
724
725 v8::HandleScope handle_scope;
726 WebFrame* frame = view->mainFrame();
727 v8::Local<v8::Context> context = frame->mainWorldScriptContext();
728 v8::Handle<v8::Value> argv[1];
729 argv[0] = v8::String::New(type_str);
730 bindings_utils::CallFunctionInContext(context, "setViewType",
731 arraysize(argv), argv);
732 }
OLDNEW
« no previous file with comments | « chrome/renderer/extensions/extension_process_bindings.h ('k') | chrome/renderer/render_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698