|  | // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "chrome/browser/ui/browser_commands_mac.h" | 
|  |  | 
|  | #include <unistd.h> | 
|  |  | 
|  | #import <Cocoa/Cocoa.h> | 
|  |  | 
|  | #include "base/logging.h" | 
|  | #include "chrome/browser/profiles/profile.h" | 
|  | #include "chrome/browser/ui/browser.h" | 
|  | #include "chrome/browser/ui/browser_commands.h" | 
|  | #include "chrome/browser/ui/exclusive_access/fullscreen_controller.h" | 
|  | #include "chrome/common/pref_names.h" | 
|  | #include "components/prefs/pref_service.h" | 
|  |  | 
|  | namespace chrome { | 
|  |  | 
|  | void ToggleFullscreenToolbar(Browser* browser) { | 
|  | DCHECK(browser); | 
|  |  | 
|  | // Toggle the value of the preference. | 
|  | PrefService* prefs = browser->profile()->GetPrefs(); | 
|  | bool show_toolbar = prefs->GetBoolean(prefs::kShowFullscreenToolbar); | 
|  | prefs->SetBoolean(prefs::kShowFullscreenToolbar, !show_toolbar); | 
|  | } | 
|  |  | 
|  | void ToggleJavaScriptFromAppleEventsAllowed(Browser* browser) { | 
|  | CGEventRef cg_event = [[NSApp currentEvent] CGEvent]; | 
|  | if (!cg_event) | 
|  | return; | 
|  |  | 
|  | // If the event is from another process, do not allow it to toggle this | 
|  | // secure setting. | 
|  | int sender_pid = | 
|  | CGEventGetIntegerValueField(cg_event, kCGEventSourceUnixProcessID); | 
|  | if (sender_pid != 0 && sender_pid != getpid()) { | 
|  | DLOG(ERROR) | 
|  | << "Dropping JS AppleScript toggle, event not from browser, from " | 
|  | << sender_pid; | 
|  | return; | 
|  | } | 
|  |  | 
|  | // Only allow events generated in the HID system to toggle this setting. | 
|  | int event_source = | 
|  | CGEventGetIntegerValueField(cg_event, kCGEventSourceStateID); | 
|  | if (event_source != kCGEventSourceStateHIDSystemState) { | 
|  | DLOG(ERROR) << "Dropping JS AppleScript toggle, event source state not " | 
|  | "from HID, from " | 
|  | << event_source; | 
|  | return; | 
|  | } | 
|  |  | 
|  | PrefService* prefs = browser->profile()->GetPrefs(); | 
|  | prefs->SetBoolean(prefs::kAllowJavascriptAppleEvents, | 
|  | !prefs->GetBoolean(prefs::kAllowJavascriptAppleEvents)); | 
|  | } | 
|  |  | 
|  | }  // namespace chrome |