Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 #import "chrome/browser/ui/cocoa/content_settings/content_setting_bubble_cocoa.h " | 5 #import "chrome/browser/ui/cocoa/content_settings/content_setting_bubble_cocoa.h " |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "base/strings/sys_string_conversions.h" | 10 #include "base/strings/sys_string_conversions.h" |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 63 | 63 |
| 64 // Padding between media menu elements in the media bubble. | 64 // Padding between media menu elements in the media bubble. |
| 65 const int kMediaMenuElementVerticalPadding = 5; | 65 const int kMediaMenuElementVerticalPadding = 5; |
| 66 | 66 |
| 67 // The amount of horizontal space between the media menu title and the border. | 67 // The amount of horizontal space between the media menu title and the border. |
| 68 const int kMediaMenuTitleHorizontalPadding = 10; | 68 const int kMediaMenuTitleHorizontalPadding = 10; |
| 69 | 69 |
| 70 // The minimum width of the media menu buttons. | 70 // The minimum width of the media menu buttons. |
| 71 const CGFloat kMinMediaMenuButtonWidth = 100; | 71 const CGFloat kMinMediaMenuButtonWidth = 100; |
| 72 | 72 |
| 73 // Height of each of the labels in the MIDI bubble. | |
| 74 const int kMIDISysExLabelHeight = 14; | |
| 75 | |
| 76 // Height of the "Clear" button in the MIDI bubble. | |
| 77 const int kMIDISysExClearButtonHeight = 17; | |
| 78 | |
| 79 // General padding between elements in the MIDI bubble. | |
| 80 const int kMIDISysExPadding = 8; | |
| 81 | |
| 82 // Padding between host names in the MIDI bubble. | |
| 83 const int kMIDISysExHostPadding = 4; | |
| 84 | |
| 73 void SetControlSize(NSControl* control, NSControlSize controlSize) { | 85 void SetControlSize(NSControl* control, NSControlSize controlSize) { |
| 74 CGFloat fontSize = [NSFont systemFontSizeForControlSize:controlSize]; | 86 CGFloat fontSize = [NSFont systemFontSizeForControlSize:controlSize]; |
| 75 NSCell* cell = [control cell]; | 87 NSCell* cell = [control cell]; |
| 76 NSFont* font = [NSFont fontWithName:[[cell font] fontName] size:fontSize]; | 88 NSFont* font = [NSFont fontWithName:[[cell font] fontName] size:fontSize]; |
| 77 [cell setFont:font]; | 89 [cell setFont:font]; |
| 78 [cell setControlSize:controlSize]; | 90 [cell setControlSize:controlSize]; |
| 79 } | 91 } |
| 80 | 92 |
| 81 // Returns an autoreleased NSTextField that is configured to look like a Label | 93 // Returns an autoreleased NSTextField that is configured to look like a Label |
| 82 // looks in Interface Builder. | 94 // looks in Interface Builder. |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 164 - (NSButton*)hyperlinkButtonWithFrame:(NSRect)frame | 176 - (NSButton*)hyperlinkButtonWithFrame:(NSRect)frame |
| 165 title:(NSString*)title | 177 title:(NSString*)title |
| 166 icon:(NSImage*)icon | 178 icon:(NSImage*)icon |
| 167 referenceFrame:(NSRect)referenceFrame; | 179 referenceFrame:(NSRect)referenceFrame; |
| 168 - (void)initializeBlockedPluginsList; | 180 - (void)initializeBlockedPluginsList; |
| 169 - (void)initializeTitle; | 181 - (void)initializeTitle; |
| 170 - (void)initializeRadioGroup; | 182 - (void)initializeRadioGroup; |
| 171 - (void)initializePopupList; | 183 - (void)initializePopupList; |
| 172 - (void)initializeGeoLists; | 184 - (void)initializeGeoLists; |
| 173 - (void)initializeMediaMenus; | 185 - (void)initializeMediaMenus; |
| 186 - (void)initializeMIDISysExLists; | |
| 174 - (void)sizeToFitLoadButton; | 187 - (void)sizeToFitLoadButton; |
| 175 - (void)initManageDoneButtons; | 188 - (void)initManageDoneButtons; |
| 176 - (void)removeInfoButton; | 189 - (void)removeInfoButton; |
| 177 - (void)popupLinkClicked:(id)sender; | 190 - (void)popupLinkClicked:(id)sender; |
| 178 - (void)clearGeolocationForCurrentHost:(id)sender; | 191 - (void)clearGeolocationForCurrentHost:(id)sender; |
| 192 - (void)clearMIDISysExForCurrentHost:(id)sender; | |
| 179 @end | 193 @end |
| 180 | 194 |
| 181 @implementation ContentSettingBubbleController | 195 @implementation ContentSettingBubbleController |
| 182 | 196 |
| 183 + (ContentSettingBubbleController*) | 197 + (ContentSettingBubbleController*) |
| 184 showForModel:(ContentSettingBubbleModel*)contentSettingBubbleModel | 198 showForModel:(ContentSettingBubbleModel*)contentSettingBubbleModel |
| 185 parentWindow:(NSWindow*)parentWindow | 199 parentWindow:(NSWindow*)parentWindow |
| 186 anchoredAt:(NSPoint)anchor { | 200 anchoredAt:(NSPoint)anchor { |
| 187 // Autoreleases itself on bubble close. | 201 // Autoreleases itself on bubble close. |
| 188 return [[ContentSettingBubbleController alloc] | 202 return [[ContentSettingBubbleController alloc] |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 214 case CONTENT_SETTINGS_TYPE_GEOLOCATION: | 228 case CONTENT_SETTINGS_TYPE_GEOLOCATION: |
| 215 nibPath = @"ContentBlockedGeolocation"; break; | 229 nibPath = @"ContentBlockedGeolocation"; break; |
| 216 case CONTENT_SETTINGS_TYPE_MIXEDSCRIPT: | 230 case CONTENT_SETTINGS_TYPE_MIXEDSCRIPT: |
| 217 nibPath = @"ContentBlockedMixedScript"; break; | 231 nibPath = @"ContentBlockedMixedScript"; break; |
| 218 case CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS: | 232 case CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS: |
| 219 nibPath = @"ContentProtocolHandlers"; break; | 233 nibPath = @"ContentProtocolHandlers"; break; |
| 220 case CONTENT_SETTINGS_TYPE_MEDIASTREAM: | 234 case CONTENT_SETTINGS_TYPE_MEDIASTREAM: |
| 221 nibPath = @"ContentBlockedMedia"; break; | 235 nibPath = @"ContentBlockedMedia"; break; |
| 222 case CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS: | 236 case CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS: |
| 223 nibPath = @"ContentBlockedDownloads"; break; | 237 nibPath = @"ContentBlockedDownloads"; break; |
| 238 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX: | |
| 239 nibPath = @"ContentBlockedMIDISysEx"; break; | |
| 224 // These content types have no bubble: | 240 // These content types have no bubble: |
| 225 case CONTENT_SETTINGS_TYPE_DEFAULT: | 241 case CONTENT_SETTINGS_TYPE_DEFAULT: |
| 226 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: | 242 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: |
| 227 case CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE: | 243 case CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE: |
| 228 case CONTENT_SETTINGS_TYPE_FULLSCREEN: | 244 case CONTENT_SETTINGS_TYPE_FULLSCREEN: |
| 229 case CONTENT_SETTINGS_TYPE_MOUSELOCK: | 245 case CONTENT_SETTINGS_TYPE_MOUSELOCK: |
| 230 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC: | 246 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC: |
| 231 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA: | 247 case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA: |
| 232 case CONTENT_SETTINGS_TYPE_MIDI_SYSEX: | |
| 233 case CONTENT_SETTINGS_NUM_TYPES: | 248 case CONTENT_SETTINGS_NUM_TYPES: |
| 234 NOTREACHED(); | 249 NOTREACHED(); |
| 235 } | 250 } |
| 236 if ((self = [super initWithWindowNibPath:nibPath | 251 if ((self = [super initWithWindowNibPath:nibPath |
| 237 parentWindow:parentWindow | 252 parentWindow:parentWindow |
| 238 anchoredAt:anchoredAt])) { | 253 anchoredAt:anchoredAt])) { |
| 239 contentSettingBubbleModel_.reset(model.release()); | 254 contentSettingBubbleModel_.reset(model.release()); |
| 240 [self showWindow:nil]; | 255 [self showWindow:nil]; |
| 241 } | 256 } |
| 242 return self; | 257 return self; |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 442 // Fetch the updated sizes. | 457 // Fetch the updated sizes. |
| 443 containerFrame = [contentsContainer_ frame]; | 458 containerFrame = [contentsContainer_ frame]; |
| 444 frame = NSMakeRect(0, 0, NSWidth(containerFrame), kGeoLabelHeight); | 459 frame = NSMakeRect(0, 0, NSWidth(containerFrame), kGeoLabelHeight); |
| 445 } | 460 } |
| 446 | 461 |
| 447 DCHECK(control); | 462 DCHECK(control); |
| 448 [contentsContainer_ addSubview:control]; | 463 [contentsContainer_ addSubview:control]; |
| 449 frame.origin.y = NSMaxY([control frame]) + kGeoPadding; | 464 frame.origin.y = NSMaxY([control frame]) + kGeoPadding; |
| 450 } | 465 } |
| 451 | 466 |
| 452 typedef | 467 for (auto i = content.domain_lists.rbegin(); |
|
Robert Sesek
2013/08/08 14:37:50
Do you want const auto& for any of these?
Takashi Toyoshima
2013/08/08 14:52:32
If I didn't miss something, const auto& doesn't al
Robert Sesek
2013/08/08 14:53:51
Ah, you're right. You can't with the reverse itera
| |
| 453 std::vector<ContentSettingBubbleModel::DomainList>::const_reverse_iterator | |
| 454 GeolocationGroupIterator; | |
| 455 for (GeolocationGroupIterator i = content.domain_lists.rbegin(); | |
| 456 i != content.domain_lists.rend(); ++i) { | 468 i != content.domain_lists.rend(); ++i) { |
| 457 // Add all hosts in the current domain list. | 469 // Add all hosts in the current domain list. |
| 458 for (std::set<std::string>::const_reverse_iterator j = i->hosts.rbegin(); | 470 for (auto j = i->hosts.rbegin(); j != i->hosts.rend(); ++j) { |
| 459 j != i->hosts.rend(); ++j) { | |
| 460 NSTextField* title = LabelWithFrame(base::SysUTF8ToNSString(*j), frame); | 471 NSTextField* title = LabelWithFrame(base::SysUTF8ToNSString(*j), frame); |
| 461 SetControlSize(title, NSSmallControlSize); | 472 SetControlSize(title, NSSmallControlSize); |
| 462 [contentsContainer_ addSubview:title]; | 473 [contentsContainer_ addSubview:title]; |
| 463 | 474 |
| 464 frame.origin.y = NSMaxY(frame) + kGeoHostPadding + | 475 frame.origin.y = NSMaxY(frame) + kGeoHostPadding + |
| 465 [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:title]; | 476 [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:title]; |
| 466 } | 477 } |
| 467 if (!i->hosts.empty()) | 478 if (!i->hosts.empty()) |
| 468 frame.origin.y += kGeoPadding - kGeoHostPadding; | 479 frame.origin.y += kGeoPadding - kGeoHostPadding; |
| 469 | 480 |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 572 NSRect menuFrame = [i->first frame]; | 583 NSRect menuFrame = [i->first frame]; |
| 573 menuFrame.origin.y = topMenuY; | 584 menuFrame.origin.y = topMenuY; |
| 574 menuFrame.origin.x = NSMinX(radioFrame) + maxLabelWidth; | 585 menuFrame.origin.x = NSMinX(radioFrame) + maxLabelWidth; |
| 575 menuFrame.size.width = maxMenuWidth; | 586 menuFrame.size.width = maxMenuWidth; |
| 576 menuFrame.size.height = maxMenuHeight; | 587 menuFrame.size.height = maxMenuHeight; |
| 577 [i->first setFrame:menuFrame]; | 588 [i->first setFrame:menuFrame]; |
| 578 topMenuY -= (maxMenuHeight + kMediaMenuElementVerticalPadding); | 589 topMenuY -= (maxMenuHeight + kMediaMenuElementVerticalPadding); |
| 579 } | 590 } |
| 580 } | 591 } |
| 581 | 592 |
| 593 - (void)initializeMIDISysExLists { | |
| 594 const ContentSettingBubbleModel::BubbleContent& content = | |
| 595 contentSettingBubbleModel_->bubble_content(); | |
| 596 NSRect containerFrame = [contentsContainer_ frame]; | |
| 597 NSRect frame = | |
| 598 NSMakeRect(0, 0, NSWidth(containerFrame), kMIDISysExLabelHeight); | |
| 599 | |
| 600 // "Clear" button / text field. | |
| 601 if (!content.custom_link.empty()) { | |
| 602 base::scoped_nsobject<NSControl> control; | |
| 603 if (content.custom_link_enabled) { | |
| 604 NSRect buttonFrame = NSMakeRect(0, 0, | |
| 605 NSWidth(containerFrame), | |
| 606 kMIDISysExClearButtonHeight); | |
| 607 NSButton* button = [[NSButton alloc] initWithFrame:buttonFrame]; | |
| 608 control.reset(button); | |
| 609 [button setTitle:base::SysUTF8ToNSString(content.custom_link)]; | |
| 610 [button setTarget:self]; | |
| 611 [button setAction:@selector(clearMIDISysExForCurrentHost:)]; | |
| 612 [button setBezelStyle:NSRoundRectBezelStyle]; | |
| 613 SetControlSize(button, NSSmallControlSize); | |
| 614 [button sizeToFit]; | |
| 615 } else { | |
| 616 // Add the notification that settings will be cleared on next reload. | |
| 617 control.reset([LabelWithFrame( | |
| 618 base::SysUTF8ToNSString(content.custom_link), frame) retain]); | |
| 619 SetControlSize(control.get(), NSSmallControlSize); | |
| 620 } | |
| 621 | |
| 622 // If the new control is wider than the container, widen the window. | |
| 623 CGFloat controlWidth = NSWidth([control frame]); | |
| 624 if (controlWidth > NSWidth(containerFrame)) { | |
| 625 NSRect windowFrame = [[self window] frame]; | |
| 626 windowFrame.size.width += controlWidth - NSWidth(containerFrame); | |
| 627 [[self window] setFrame:windowFrame display:NO]; | |
| 628 // Fetch the updated sizes. | |
| 629 containerFrame = [contentsContainer_ frame]; | |
| 630 frame = NSMakeRect(0, 0, NSWidth(containerFrame), kMIDISysExLabelHeight); | |
| 631 } | |
| 632 | |
| 633 DCHECK(control); | |
| 634 [contentsContainer_ addSubview:control]; | |
| 635 frame.origin.y = NSMaxY([control frame]) + kMIDISysExPadding; | |
| 636 } | |
| 637 | |
| 638 for (auto i = content.domain_lists.rbegin(); | |
| 639 i != content.domain_lists.rend(); ++i) { | |
| 640 // Add all hosts in the current domain list. | |
| 641 for (auto j = i->hosts.rbegin(); j != i->hosts.rend(); ++j) { | |
| 642 NSTextField* title = LabelWithFrame(base::SysUTF8ToNSString(*j), frame); | |
| 643 SetControlSize(title, NSSmallControlSize); | |
| 644 [contentsContainer_ addSubview:title]; | |
| 645 | |
| 646 frame.origin.y = NSMaxY(frame) + kMIDISysExHostPadding + | |
| 647 [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:title]; | |
| 648 } | |
| 649 if (!i->hosts.empty()) | |
| 650 frame.origin.y += kMIDISysExPadding - kMIDISysExHostPadding; | |
| 651 | |
| 652 // Add the domain list's title. | |
| 653 NSTextField* title = | |
| 654 LabelWithFrame(base::SysUTF8ToNSString(i->title), frame); | |
| 655 SetControlSize(title, NSSmallControlSize); | |
| 656 [contentsContainer_ addSubview:title]; | |
| 657 | |
| 658 frame.origin.y = NSMaxY(frame) + kMIDISysExPadding + | |
| 659 [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:title]; | |
| 660 } | |
| 661 | |
| 662 CGFloat containerHeight = frame.origin.y; | |
| 663 // Undo last padding. | |
| 664 if (!content.domain_lists.empty()) | |
| 665 containerHeight -= kMIDISysExPadding; | |
| 666 | |
| 667 // Resize container to fit its subviews, and window to fit the container. | |
| 668 NSRect windowFrame = [[self window] frame]; | |
| 669 windowFrame.size.height += containerHeight - NSHeight(containerFrame); | |
| 670 [[self window] setFrame:windowFrame display:NO]; | |
| 671 containerFrame.size.height = containerHeight; | |
| 672 [contentsContainer_ setFrame:containerFrame]; | |
| 673 } | |
| 674 | |
| 582 - (void)sizeToFitLoadButton { | 675 - (void)sizeToFitLoadButton { |
| 583 const ContentSettingBubbleModel::BubbleContent& content = | 676 const ContentSettingBubbleModel::BubbleContent& content = |
| 584 contentSettingBubbleModel_->bubble_content(); | 677 contentSettingBubbleModel_->bubble_content(); |
| 585 [loadButton_ setEnabled:content.custom_link_enabled]; | 678 [loadButton_ setEnabled:content.custom_link_enabled]; |
| 586 | 679 |
| 587 // Resize horizontally to fit button if necessary. | 680 // Resize horizontally to fit button if necessary. |
| 588 NSRect windowFrame = [[self window] frame]; | 681 NSRect windowFrame = [[self window] frame]; |
| 589 int widthNeeded = NSWidth([loadButton_ frame]) + | 682 int widthNeeded = NSWidth([loadButton_ frame]) + |
| 590 2 * NSMinX([loadButton_ frame]); | 683 2 * NSMinX([loadButton_ frame]); |
| 591 if (NSWidth(windowFrame) < widthNeeded) { | 684 if (NSWidth(windowFrame) < widthNeeded) { |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 633 | 726 |
| 634 if (allowBlockRadioGroup_) // not bound in cookie bubble xib | 727 if (allowBlockRadioGroup_) // not bound in cookie bubble xib |
| 635 [self initializeRadioGroup]; | 728 [self initializeRadioGroup]; |
| 636 | 729 |
| 637 if (type == CONTENT_SETTINGS_TYPE_POPUPS) | 730 if (type == CONTENT_SETTINGS_TYPE_POPUPS) |
| 638 [self initializePopupList]; | 731 [self initializePopupList]; |
| 639 if (type == CONTENT_SETTINGS_TYPE_GEOLOCATION) | 732 if (type == CONTENT_SETTINGS_TYPE_GEOLOCATION) |
| 640 [self initializeGeoLists]; | 733 [self initializeGeoLists]; |
| 641 if (type == CONTENT_SETTINGS_TYPE_MEDIASTREAM) | 734 if (type == CONTENT_SETTINGS_TYPE_MEDIASTREAM) |
| 642 [self initializeMediaMenus]; | 735 [self initializeMediaMenus]; |
| 736 if (type == CONTENT_SETTINGS_TYPE_MIDI_SYSEX) | |
| 737 [self initializeMIDISysExLists]; | |
| 643 } | 738 } |
| 644 | 739 |
| 645 /////////////////////////////////////////////////////////////////////////////// | 740 /////////////////////////////////////////////////////////////////////////////// |
| 646 // Actual application logic | 741 // Actual application logic |
| 647 | 742 |
| 648 - (IBAction)allowBlockToggled:(id)sender { | 743 - (IBAction)allowBlockToggled:(id)sender { |
| 649 NSButtonCell *selectedCell = [sender selectedCell]; | 744 NSButtonCell *selectedCell = [sender selectedCell]; |
| 650 contentSettingBubbleModel_->OnRadioClicked([selectedCell tag] - 1); | 745 contentSettingBubbleModel_->OnRadioClicked([selectedCell tag] - 1); |
| 651 } | 746 } |
| 652 | 747 |
| 653 - (void)popupLinkClicked:(id)sender { | 748 - (void)popupLinkClicked:(id)sender { |
| 654 content_setting_bubble::PopupLinks::iterator i(popupLinks_.find(sender)); | 749 content_setting_bubble::PopupLinks::iterator i(popupLinks_.find(sender)); |
| 655 DCHECK(i != popupLinks_.end()); | 750 DCHECK(i != popupLinks_.end()); |
| 656 contentSettingBubbleModel_->OnPopupClicked(i->second); | 751 contentSettingBubbleModel_->OnPopupClicked(i->second); |
| 657 } | 752 } |
| 658 | 753 |
| 659 - (void)clearGeolocationForCurrentHost:(id)sender { | 754 - (void)clearGeolocationForCurrentHost:(id)sender { |
| 660 contentSettingBubbleModel_->OnCustomLinkClicked(); | 755 contentSettingBubbleModel_->OnCustomLinkClicked(); |
| 661 [self close]; | 756 [self close]; |
| 662 } | 757 } |
| 663 | 758 |
| 759 - (void)clearMIDISysExForCurrentHost:(id)sender { | |
| 760 contentSettingBubbleModel_->OnCustomLinkClicked(); | |
| 761 [self close]; | |
| 762 } | |
| 763 | |
| 664 - (IBAction)showMoreInfo:(id)sender { | 764 - (IBAction)showMoreInfo:(id)sender { |
| 665 contentSettingBubbleModel_->OnCustomLinkClicked(); | 765 contentSettingBubbleModel_->OnCustomLinkClicked(); |
| 666 [self close]; | 766 [self close]; |
| 667 } | 767 } |
| 668 | 768 |
| 669 - (IBAction)load:(id)sender { | 769 - (IBAction)load:(id)sender { |
| 670 contentSettingBubbleModel_->OnCustomLinkClicked(); | 770 contentSettingBubbleModel_->OnCustomLinkClicked(); |
| 671 [self close]; | 771 [self close]; |
| 672 } | 772 } |
| 673 | 773 |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 695 button, base::SysUTF16ToNSString(it->second->model->GetLabelAt(index))); | 795 button, base::SysUTF16ToNSString(it->second->model->GetLabelAt(index))); |
| 696 | 796 |
| 697 it->second->model->ExecuteCommand(index, 0); | 797 it->second->model->ExecuteCommand(index, 0); |
| 698 } | 798 } |
| 699 | 799 |
| 700 - (content_setting_bubble::MediaMenuPartsMap*)mediaMenus { | 800 - (content_setting_bubble::MediaMenuPartsMap*)mediaMenus { |
| 701 return &mediaMenus_; | 801 return &mediaMenus_; |
| 702 } | 802 } |
| 703 | 803 |
| 704 @end // ContentSettingBubbleController | 804 @end // ContentSettingBubbleController |
| OLD | NEW |