// Copyright (c) 2013 The Chromium Embedded Framework Authors. // Portions copyright (c) 2010 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. #import #include "cefsimple/simple_app.h" #include "cefsimple/simple_handler.h" #include "cefsimple/util.h" #include "include/cef_application_mac.h" // Provide the CefAppProtocol implementation required by CEF. @interface SimpleApplication : NSApplication { @private BOOL handlingSendEvent_; } @end @implementation SimpleApplication - (BOOL)isHandlingSendEvent { return handlingSendEvent_; } - (void)setHandlingSendEvent:(BOOL)handlingSendEvent { handlingSendEvent_ = handlingSendEvent; } - (void)sendEvent:(NSEvent*)event { CefScopedSendingEvent sendingEventScoper; [super sendEvent:event]; } @end // Receives notifications from the application. @interface SimpleAppDelegate : NSObject - (void)createApp:(id)object; @end @implementation SimpleAppDelegate // Create the application on the UI thread. - (void)createApp:(id)object { [NSApplication sharedApplication]; [NSBundle loadNibNamed:@"MainMenu" owner:NSApp]; // Set the delegate for application events. [NSApp setDelegate:self]; } // Called when the application's Quit menu item is selected. - (NSApplicationTerminateReply)applicationShouldTerminate: (NSApplication *)sender { // Request that all browser windows close. if (SimpleHandler* handler = SimpleHandler::GetInstance()) handler->CloseAllBrowsers(false); // Cancel the termination. The application will exit after all windows have // closed. return NSTerminateCancel; } // Sent immediately before the application terminates. This signal should not // be called because we cancel the termination. - (void)applicationWillTerminate:(NSNotification *)aNotification { ASSERT(false); // Not reached. } @end // Entry point function for the browser process. int main(int argc, char* argv[]) { // Provide CEF with command-line arguments. CefMainArgs main_args(argc, argv); // SimpleApp implements application-level callbacks. It will create the first // browser instance in OnContextInitialized() after CEF has initialized. CefRefPtr app(new SimpleApp); // Initialize the AutoRelease pool. NSAutoreleasePool* autopool = [[NSAutoreleasePool alloc] init]; // Initialize the SimpleApplication instance. [SimpleApplication sharedApplication]; // Specify CEF global settings here. CefSettings settings; // Initialize CEF for the browser process. CefInitialize(main_args, settings, app.get(), NULL); // Create the application delegate. NSObject* delegate = [[SimpleAppDelegate alloc] init]; [delegate performSelectorOnMainThread:@selector(createApp:) withObject:nil waitUntilDone:NO]; // Run the CEF message loop. This will block until CefQuitMessageLoop() is // called. CefRunMessageLoop(); // Shut down CEF. CefShutdown(); // Release the delegate. [delegate release]; // Release the AutoRelease pool. [autopool release]; return 0; }