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

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_mac.mm

Issue 1652483002: Browser Side Text Input State Tracking for OOPIF. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Using the Old Logic for Determining the State Change Created 4 years, 9 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/renderer_host/render_widget_host_view_mac.h" 5 #include "content/browser/renderer_host/render_widget_host_view_mac.h"
6 6
7 #import <objc/runtime.h> 7 #import <objc/runtime.h>
8 #include <OpenGL/gl.h> 8 #include <OpenGL/gl.h>
9 #include <QuartzCore/QuartzCore.h> 9 #include <QuartzCore/QuartzCore.h>
10 #include <stdint.h> 10 #include <stdint.h>
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 blink::WebScreenInfo* results) { 506 blink::WebScreenInfo* results) {
507 *results = GetWebScreenInfo(NULL); 507 *results = GetWebScreenInfo(NULL);
508 } 508 }
509 509
510 /////////////////////////////////////////////////////////////////////////////// 510 ///////////////////////////////////////////////////////////////////////////////
511 // RenderWidgetHostViewMac, public: 511 // RenderWidgetHostViewMac, public:
512 512
513 RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget, 513 RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget,
514 bool is_guest_view_hack) 514 bool is_guest_view_hack)
515 : render_widget_host_(RenderWidgetHostImpl::From(widget)), 515 : render_widget_host_(RenderWidgetHostImpl::From(widget)),
516 text_input_type_(ui::TEXT_INPUT_TYPE_NONE),
517 can_compose_inline_(true),
518 browser_compositor_state_(BrowserCompositorDestroyed), 516 browser_compositor_state_(BrowserCompositorDestroyed),
519 browser_compositor_placeholder_(new BrowserCompositorMacPlaceholder), 517 browser_compositor_placeholder_(new BrowserCompositorMacPlaceholder),
520 page_at_minimum_scale_(true), 518 page_at_minimum_scale_(true),
521 is_loading_(false), 519 is_loading_(false),
522 allow_pause_for_resize_or_repaint_(true), 520 allow_pause_for_resize_or_repaint_(true),
523 is_guest_view_hack_(is_guest_view_hack), 521 is_guest_view_hack_(is_guest_view_hack),
524 fullscreen_parent_host_view_(NULL), 522 fullscreen_parent_host_view_(NULL),
525 weak_factory_(this) { 523 weak_factory_(this) {
526 // |cocoa_view_| owns us and we will be deleted when |cocoa_view_| 524 // |cocoa_view_| owns us and we will be deleted when |cocoa_view_|
527 // goes away. Since we autorelease it, our caller must put 525 // goes away. Since we autorelease it, our caller must put
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after
1008 WebCursor web_cursor = cursor; 1006 WebCursor web_cursor = cursor;
1009 [cocoa_view_ updateCursor:web_cursor.GetNativeCursor()]; 1007 [cocoa_view_ updateCursor:web_cursor.GetNativeCursor()];
1010 } 1008 }
1011 1009
1012 void RenderWidgetHostViewMac::SetIsLoading(bool is_loading) { 1010 void RenderWidgetHostViewMac::SetIsLoading(bool is_loading) {
1013 is_loading_ = is_loading; 1011 is_loading_ = is_loading;
1014 // If we ever decide to show the waiting cursor while the page is loading 1012 // If we ever decide to show the waiting cursor while the page is loading
1015 // like Chrome does on Windows, call |UpdateCursor()| here. 1013 // like Chrome does on Windows, call |UpdateCursor()| here.
1016 } 1014 }
1017 1015
1018 void RenderWidgetHostViewMac::TextInputStateChanged( 1016 void RenderWidgetHostViewMac::UpdateTextInputState() {
1019 const ViewHostMsg_TextInputState_Params& params) { 1017 RenderWidgetHostViewBase* focused_view = GetFocusedView();
1020 if (text_input_type_ != params.type 1018 if (!focused_view->ShouldProcessTextInputState())
1021 || can_compose_inline_ != params.can_compose_inline) { 1019 return;
1022 text_input_type_ = params.type;
1023 can_compose_inline_ = params.can_compose_inline;
1024 if (HasFocus()) {
1025 SetTextInputActive(true);
1026 1020
1027 // Let AppKit cache the new input context to make IMEs happy. 1021 cached_text_input_state_ = focused_view->text_input_state();
1028 // See http://crbug.com/73039. 1022
1029 [NSApp updateWindows]; 1023 if (HasFocus()) {
1024 SetTextInputActive(true);
1025
1026 // Let AppKit cache the new input context to make IMEs happy.
1027 // See http://crbug.com/73039.
1028 [NSApp updateWindows];
1030 1029
1031 #ifndef __LP64__ 1030 #ifndef __LP64__
1032 UseInputWindow(TSMGetActiveDocument(), !can_compose_inline_); 1031 UseInputWindow(TSMGetActiveDocument(),
1032 focused_view->text_input_state() _->can_compose_inline_);
1033 #endif 1033 #endif
1034 }
1035 } 1034 }
1036 } 1035 }
1037 1036
1038 void RenderWidgetHostViewMac::ImeCancelComposition() { 1037 void RenderWidgetHostViewMac::ImeCancelComposition() {
1039 [cocoa_view_ cancelComposition]; 1038 [cocoa_view_ cancelComposition];
1040 } 1039 }
1041 1040
1042 void RenderWidgetHostViewMac::ImeCompositionRangeChanged( 1041 void RenderWidgetHostViewMac::ImeCompositionRangeChanged(
1043 const gfx::Range& range, 1042 const gfx::Range& range,
1044 const std::vector<gfx::Rect>& character_bounds) { 1043 const std::vector<gfx::Rect>& character_bounds) {
(...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after
1709 origin.y = NSHeight([cocoa_view_ bounds]) - origin.y; 1708 origin.y = NSHeight([cocoa_view_ bounds]) - origin.y;
1710 NSPoint originInWindow = [cocoa_view_ convertPoint:origin toView:nil]; 1709 NSPoint originInWindow = [cocoa_view_ convertPoint:origin toView:nil];
1711 NSPoint originInScreen = 1710 NSPoint originInScreen =
1712 [[cocoa_view_ window] convertBaseToScreen:originInWindow]; 1711 [[cocoa_view_ window] convertBaseToScreen:originInWindow];
1713 originInScreen.y = originInScreen.y - size.height; 1712 originInScreen.y = originInScreen.y - size.height;
1714 return gfx::Point(originInScreen.x, originInScreen.y); 1713 return gfx::Point(originInScreen.x, originInScreen.y);
1715 } 1714 }
1716 1715
1717 void RenderWidgetHostViewMac::SetTextInputActive(bool active) { 1716 void RenderWidgetHostViewMac::SetTextInputActive(bool active) {
1718 if (active) { 1717 if (active) {
1719 if (text_input_type_ == ui::TEXT_INPUT_TYPE_PASSWORD) 1718 if (current_text_input_state()->type == ui::TEXT_INPUT_TYPE_PASSWORD)
1720 EnablePasswordInput(); 1719 EnablePasswordInput();
1721 else 1720 else
1722 DisablePasswordInput(); 1721 DisablePasswordInput();
1723 } else { 1722 } else {
1724 if (text_input_type_ == ui::TEXT_INPUT_TYPE_PASSWORD) 1723 if (current_text_input_state()->type == ui::TEXT_INPUT_TYPE_PASSWORD)
1725 DisablePasswordInput(); 1724 DisablePasswordInput();
1726 } 1725 }
1727 } 1726 }
1728 1727
1729 void RenderWidgetHostViewMac::OnPluginFocusChanged(bool focused, 1728 void RenderWidgetHostViewMac::OnPluginFocusChanged(bool focused,
1730 int plugin_id) { 1729 int plugin_id) {
1731 [cocoa_view_ pluginFocusChanged:(focused ? YES : NO) forPlugin:plugin_id]; 1730 [cocoa_view_ pluginFocusChanged:(focused ? YES : NO) forPlugin:plugin_id];
1732 } 1731 }
1733 1732
1734 void RenderWidgetHostViewMac::OnStartPluginIme() { 1733 void RenderWidgetHostViewMac::OnStartPluginIme() {
(...skipping 1334 matching lines...) Expand 10 before | Expand all | Expand 10 after
3069 return reinterpret_cast<NSInteger>(self); 3068 return reinterpret_cast<NSInteger>(self);
3070 } 3069 }
3071 3070
3072 // Each RenderWidgetHostViewCocoa has its own input context, but we return 3071 // Each RenderWidgetHostViewCocoa has its own input context, but we return
3073 // nil when the caret is in non-editable content or password box to avoid 3072 // nil when the caret is in non-editable content or password box to avoid
3074 // making input methods do their work. 3073 // making input methods do their work.
3075 - (NSTextInputContext *)inputContext { 3074 - (NSTextInputContext *)inputContext {
3076 if (focusedPluginIdentifier_ != -1) 3075 if (focusedPluginIdentifier_ != -1)
3077 return [[ComplexTextInputPanel sharedComplexTextInputPanel] inputContext]; 3076 return [[ComplexTextInputPanel sharedComplexTextInputPanel] inputContext];
3078 3077
3079 switch(renderWidgetHostView_->text_input_type_) { 3078 switch (renderWidgetHostView_->current_text_input_state()->type) {
3080 case ui::TEXT_INPUT_TYPE_NONE: 3079 case ui::TEXT_INPUT_TYPE_NONE:
3081 case ui::TEXT_INPUT_TYPE_PASSWORD: 3080 case ui::TEXT_INPUT_TYPE_PASSWORD:
3082 return nil; 3081 return nil;
3083 default: 3082 default:
3084 return [super inputContext]; 3083 return [super inputContext];
3085 } 3084 }
3086 } 3085 }
3087 3086
3088 - (BOOL)hasMarkedText { 3087 - (BOOL)hasMarkedText {
3089 // An input method calls this function to figure out whether or not an 3088 // An input method calls this function to figure out whether or not an
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
3404 } 3403 }
3405 3404
3406 // Overriding a NSResponder method to support application services. 3405 // Overriding a NSResponder method to support application services.
3407 3406
3408 - (id)validRequestorForSendType:(NSString*)sendType 3407 - (id)validRequestorForSendType:(NSString*)sendType
3409 returnType:(NSString*)returnType { 3408 returnType:(NSString*)returnType {
3410 id requestor = nil; 3409 id requestor = nil;
3411 BOOL sendTypeIsString = [sendType isEqual:NSStringPboardType]; 3410 BOOL sendTypeIsString = [sendType isEqual:NSStringPboardType];
3412 BOOL returnTypeIsString = [returnType isEqual:NSStringPboardType]; 3411 BOOL returnTypeIsString = [returnType isEqual:NSStringPboardType];
3413 BOOL hasText = !renderWidgetHostView_->selected_text().empty(); 3412 BOOL hasText = !renderWidgetHostView_->selected_text().empty();
3414 BOOL takesText = 3413 BOOL takesText = renderWidgetHostView_->current_text_input_state()->type !=
3415 renderWidgetHostView_->text_input_type_ != ui::TEXT_INPUT_TYPE_NONE; 3414 ui::TEXT_INPUT_TYPE_NONE;
3416 3415
3417 if (sendTypeIsString && hasText && !returnType) { 3416 if (sendTypeIsString && hasText && !returnType) {
3418 requestor = self; 3417 requestor = self;
3419 } else if (!sendType && returnTypeIsString && takesText) { 3418 } else if (!sendType && returnTypeIsString && takesText) {
3420 requestor = self; 3419 requestor = self;
3421 } else if (sendTypeIsString && returnTypeIsString && hasText && takesText) { 3420 } else if (sendTypeIsString && returnTypeIsString && hasText && takesText) {
3422 requestor = self; 3421 requestor = self;
3423 } else { 3422 } else {
3424 requestor = [super validRequestorForSendType:sendType 3423 requestor = [super validRequestorForSendType:sendType
3425 returnType:returnType]; 3424 returnType:returnType];
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
3489 3488
3490 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding 3489 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding
3491 // regions that are not draggable. (See ControlRegionView in 3490 // regions that are not draggable. (See ControlRegionView in
3492 // native_app_window_cocoa.mm). This requires the render host view to be 3491 // native_app_window_cocoa.mm). This requires the render host view to be
3493 // draggable by default. 3492 // draggable by default.
3494 - (BOOL)mouseDownCanMoveWindow { 3493 - (BOOL)mouseDownCanMoveWindow {
3495 return YES; 3494 return YES;
3496 } 3495 }
3497 3496
3498 @end 3497 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698