| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "chrome/browser/ui/cocoa/applescript/browsercrapplication+applescript.h" |
| |
| #include <Foundation/Foundation.h> |
| |
| #include <map> |
| |
| #import "base/apple/foundation_util.h" |
| #include "base/notreached.h" |
| #import "chrome/browser/app_controller_mac.h" |
| #include "chrome/browser/bookmarks/bookmark_model_factory.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/browser/ui/browser_finder.h" |
| #include "chrome/browser/ui/browser_list.h" |
| #include "chrome/browser/ui/browser_window.h" |
| #import "chrome/browser/ui/cocoa/applescript/bookmark_folder_applescript.h" |
| #import "chrome/browser/ui/cocoa/applescript/constants_applescript.h" |
| #import "chrome/browser/ui/cocoa/applescript/error_applescript.h" |
| #import "chrome/browser/ui/cocoa/applescript/window_applescript.h" |
| #include "components/bookmarks/browser/bookmark_model.h" |
| |
| using bookmarks::BookmarkModel; |
| |
| @implementation BrowserCrApplication (AppleScriptAdditions) |
| |
| - (NSArray*)appleScriptWindows { |
| std::map<NSWindow*, Browser*> browsers; |
| for (Browser* browser : *BrowserList::GetInstance()) { |
| if (browser->IsAttemptingToCloseBrowser()) { |
| continue; |
| } |
| |
| browsers.emplace(browser->window()->GetNativeWindow().GetNativeNSWindow(), |
| browser); |
| } |
| |
| NSMutableArray* result = [NSMutableArray array]; |
| for (NSWindow* window in NSApp.orderedWindows) { |
| const auto& browser_it = browsers.find(window); |
| if (browser_it == browsers.end()) { |
| continue; |
| } |
| |
| WindowAppleScript* aWindow = |
| [[WindowAppleScript alloc] initWithBrowser:browser_it->second]; |
| [aWindow setContainer:self property:AppleScript::kWindowsProperty]; |
| [result addObject:aWindow]; |
| } |
| |
| return result; |
| } |
| |
| - (void)insertInAppleScriptWindows:(WindowAppleScript*)aWindow { |
| // This method gets called when a new window is created so |
| // the container and property are set here. |
| [aWindow setContainer:self property:AppleScript::kWindowsProperty]; |
| } |
| |
| - (void)insertInAppleScriptWindows:(WindowAppleScript*)aWindow |
| atIndex:(int)index { |
| // This method gets called when a new window is created so |
| // the container and property are set here. |
| [aWindow setContainer:self property:AppleScript::kWindowsProperty]; |
| // Note: AppleScript is 1-based. |
| index--; |
| aWindow.orderedIndex = @(index); |
| } |
| |
| - (void)removeFromAppleScriptWindowsAtIndex:(int)index { |
| [self.appleScriptWindows[index] handlesCloseScriptCommand:nil]; |
| } |
| |
| - (NSScriptObjectSpecifier*)objectSpecifier { |
| return nil; |
| } |
| |
| - (BookmarkFolderAppleScript*)otherBookmarks { |
| Profile* lastProfile = AppController.sharedController.lastProfile; |
| if (!lastProfile) { |
| AppleScript::SetError(AppleScript::Error::kGetProfile); |
| return nil; |
| } |
| |
| BookmarkModel* model = |
| BookmarkModelFactory::GetForBrowserContext(lastProfile); |
| if (!model->loaded()) { |
| AppleScript::SetError(AppleScript::Error::kBookmarkModelLoad); |
| return nil; |
| } |
| |
| BookmarkFolderAppleScript* otherBookmarks = [[BookmarkFolderAppleScript alloc] |
| initWithBookmarkNode:model->other_node()]; |
| [otherBookmarks setContainer:self |
| property:AppleScript::kBookmarkFoldersProperty]; |
| return otherBookmarks; |
| } |
| |
| - (BookmarkFolderAppleScript*)bookmarksBar { |
| Profile* lastProfile = AppController.sharedController.lastProfile; |
| if (!lastProfile) { |
| AppleScript::SetError(AppleScript::Error::kGetProfile); |
| return nil; |
| } |
| |
| BookmarkModel* model = |
| BookmarkModelFactory::GetForBrowserContext(lastProfile); |
| if (!model->loaded()) { |
| AppleScript::SetError(AppleScript::Error::kBookmarkModelLoad); |
| return nullptr; |
| } |
| |
| BookmarkFolderAppleScript* bookmarksBar = [[BookmarkFolderAppleScript alloc] |
| initWithBookmarkNode:model->bookmark_bar_node()]; |
| [bookmarksBar setContainer:self |
| property:AppleScript::kBookmarkFoldersProperty]; |
| return bookmarksBar; |
| } |
| |
| - (NSArray<BookmarkFolderAppleScript*>*)bookmarkFolders { |
| return @[ self.otherBookmarks, self.bookmarksBar ]; |
| } |
| |
| - (void)insertInBookmarksFolders:(BookmarkFolderAppleScript*)aBookmarkFolder { |
| NOTIMPLEMENTED(); |
| } |
| |
| - (void)insertInBookmarksFolders:(BookmarkFolderAppleScript*)aBookmarkFolder |
| atIndex:(int)index { |
| NOTIMPLEMENTED(); |
| } |
| |
| - (void)removeFromBookmarksFoldersAtIndex:(int)index { |
| NOTIMPLEMENTED(); |
| } |
| |
| @end |