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 3 // found in the LICENSE file. 4 5 #import "chrome/browser/ui/cocoa/applescript/browsercrapplication+applescript.h" 6 7 #include "base/logging.h" 8 #import "base/mac/scoped_nsobject.h" 9 #import "chrome/browser/app_controller_mac.h" 10 #include "chrome/browser/bookmarks/bookmark_model_factory.h" 11 #include "chrome/browser/profiles/profile.h" 12 #include "chrome/browser/ui/browser.h" 13 #include "chrome/browser/ui/browser_finder.h" 14 #include "chrome/browser/ui/browser_iterator.h" 15 #import "chrome/browser/ui/cocoa/applescript/bookmark_folder_applescript.h" 16 #import "chrome/browser/ui/cocoa/applescript/constants_applescript.h" 17 #import "chrome/browser/ui/cocoa/applescript/error_applescript.h" 18 #import "chrome/browser/ui/cocoa/applescript/window_applescript.h" 19 #include "components/bookmarks/browser/bookmark_model.h" 20 21 @implementation BrowserCrApplication (AppleScriptAdditions) 22 23 - (NSArray*)appleScriptWindows { 24 NSMutableArray* appleScriptWindows = [NSMutableArray 25 arrayWithCapacity:chrome::GetTotalBrowserCount()]; 26 // Iterate through all browsers and check if it closing, 27 // if not add it to list. 28 for (chrome::BrowserIterator browserIterator; !browserIterator.done(); 29 browserIterator.Next()) { 30 if ((*browserIterator)->IsAttemptingToCloseBrowser()) 31 continue; 32 33 base::scoped_nsobject<WindowAppleScript> window( 34 [[WindowAppleScript alloc] initWithBrowser:*browserIterator]); 35 [window setContainer:NSApp 36 property:AppleScript::kWindowsProperty]; 37 [appleScriptWindows addObject:window]; 38 } 39 // Windows sorted by their index value, which is obtained by calling 40 // orderedIndex: on each window. 41 [appleScriptWindows sortUsingSelector:@selector(windowComparator:)]; 42 return appleScriptWindows; 43 } 44 45 - (void)insertInAppleScriptWindows:(WindowAppleScript*)aWindow { 46 // This method gets called when a new window is created so 47 // the container and property are set here. 48 [aWindow setContainer:self 49 property:AppleScript::kWindowsProperty]; 50 } 51 52 - (void)insertInAppleScriptWindows:(WindowAppleScript*)aWindow 53 atIndex:(int)index { 54 // This method gets called when a new window is created so 55 // the container and property are set here. 56 [aWindow setContainer:self 57 property:AppleScript::kWindowsProperty]; 58 // Note: AppleScript is 1-based. 59 index--; 60 [aWindow setOrderedIndex:[NSNumber numberWithInt:index]]; 61 } 62 63 - (void)removeFromAppleScriptWindowsAtIndex:(int)index { 64 [[[self appleScriptWindows] objectAtIndex:index] 65 handlesCloseScriptCommand:nil]; 66 } 67 68 - (NSScriptObjectSpecifier*)objectSpecifier { 69 return nil; 70 } 71 72 - (BookmarkFolderAppleScript*)otherBookmarks { 73 AppController* appDelegate = [NSApp delegate]; 74 75 Profile* lastProfile = [appDelegate lastProfile]; 76 if (!lastProfile) { 77 AppleScript::SetError(AppleScript::errGetProfile); 78 return nil; 79 } 80 81 BookmarkModel* model = BookmarkModelFactory::GetForProfile(lastProfile); 82 if (!model->loaded()) { 83 AppleScript::SetError(AppleScript::errBookmarkModelLoad); 84 return nil; 85 } 86 87 BookmarkFolderAppleScript* otherBookmarks = 88 [[[BookmarkFolderAppleScript alloc] 89 initWithBookmarkNode:model->other_node()] autorelease]; 90 [otherBookmarks setContainer:self 91 property:AppleScript::kBookmarkFoldersProperty]; 92 return otherBookmarks; 93 } 94 95 - (BookmarkFolderAppleScript*)bookmarksBar { 96 AppController* appDelegate = [NSApp delegate]; 97 98 Profile* lastProfile = [appDelegate lastProfile]; 99 if (!lastProfile) { 100 AppleScript::SetError(AppleScript::errGetProfile); 101 return nil; 102 } 103 104 BookmarkModel* model = BookmarkModelFactory::GetForProfile(lastProfile); 105 if (!model->loaded()) { 106 AppleScript::SetError(AppleScript::errBookmarkModelLoad); 107 return NULL; 108 } 109 110 BookmarkFolderAppleScript* bookmarksBar = 111 [[[BookmarkFolderAppleScript alloc] 112 initWithBookmarkNode:model->bookmark_bar_node()] autorelease]; 113 [bookmarksBar setContainer:self 114 property:AppleScript::kBookmarkFoldersProperty]; 115 return bookmarksBar; 116 } 117 118 - (NSArray*)bookmarkFolders { 119 BookmarkFolderAppleScript* otherBookmarks = [self otherBookmarks]; 120 BookmarkFolderAppleScript* bookmarksBar = [self bookmarksBar]; 121 NSArray* folderArray = [NSArray arrayWithObjects:otherBookmarks, 122 bookmarksBar, 123 nil]; 124 return folderArray; 125 } 126 127 - (void)insertInBookmarksFolders:(id)aBookmarkFolder { 128 NOTIMPLEMENTED(); 129 } 130 131 - (void)insertInBookmarksFolders:(id)aBookmarkFolder atIndex:(int)index { 132 NOTIMPLEMENTED(); 133 } 134 135 - (void)removeFromBookmarksFoldersAtIndex:(int)index { 136 NOTIMPLEMENTED(); 137 } 138 139 @end 140