• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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