// Copyright 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.

#import "base/mac/launch_services_util.h"

#include "base/logging.h"
#include "base/strings/sys_string_conversions.h"

namespace base {
namespace mac {

Process OpenApplicationWithPath(const base::FilePath& bundle_path,
                                const CommandLine& command_line,
                                NSWorkspaceLaunchOptions launch_options) {
  NSString* bundle_url_spec = base::SysUTF8ToNSString(bundle_path.value());
  NSURL* bundle_url = [NSURL fileURLWithPath:bundle_url_spec isDirectory:YES];
  DCHECK(bundle_url);
  if (!bundle_url) {
    return Process();
  }

  // NSWorkspace automatically adds the binary path as the first argument and
  // it should not be included into the list.
  std::vector<std::string> argv = command_line.argv();
  int argc = argv.size();
  NSMutableArray* launch_args = [NSMutableArray arrayWithCapacity:argc - 1];
  for (int i = 1; i < argc; ++i) {
    [launch_args addObject:base::SysUTF8ToNSString(argv[i])];
  }

  NSDictionary* configuration = @{
    NSWorkspaceLaunchConfigurationArguments : launch_args,
  };
  NSError* launch_error = nil;
  // TODO(jeremya): this opens a new browser window if Chrome is already
  // running without any windows open.
  NSRunningApplication* app =
      [[NSWorkspace sharedWorkspace] launchApplicationAtURL:bundle_url
                                                    options:launch_options
                                              configuration:configuration
                                                      error:&launch_error];
  if (launch_error) {
    LOG(ERROR) << base::SysNSStringToUTF8([launch_error localizedDescription]);
    return Process();
  }
  DCHECK(app);
  return Process([app processIdentifier]);
}

}  // namespace mac
}  // namespace base
