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

#include "chrome/browser/ui/cocoa/permission_bubble/permission_bubble_cocoa.h"

#include "base/memory/ptr_util.h"
#import "chrome/browser/ui/cocoa/base_bubble_controller.h"
#import "chrome/browser/ui/cocoa/permission_bubble/permission_bubble_controller.h"
#import "chrome/browser/ui/permission_bubble/permission_prompt.h"
#include "content/public/browser/web_contents.h"
#import "ui/base/cocoa/nsview_additions.h"

PermissionBubbleCocoa::PermissionBubbleCocoa(Browser* browser,
                                             Delegate* delegate)
    : browser_(browser), delegate_(delegate), bubbleController_(nil) {
  DCHECK(browser_);

  if (!bubbleController_) {
    bubbleController_ =
        [[PermissionBubbleController alloc] initWithBrowser:browser_
                                                     bridge:this];
  }

  [bubbleController_ showWithDelegate:delegate_];
}

PermissionBubbleCocoa::~PermissionBubbleCocoa() {
  [bubbleController_ close];
}

bool PermissionBubbleCocoa::CanAcceptRequestUpdate() {
  return ![[[bubbleController_ window] contentView] cr_isMouseInView];
}

void PermissionBubbleCocoa::UpdateAnchorPosition() {
  [bubbleController_ updateAnchorPosition];
}

gfx::NativeWindow PermissionBubbleCocoa::GetNativeWindow() {
  return [bubbleController_ window];
}

void PermissionBubbleCocoa::OnBubbleClosing() {
  bubbleController_ = nil;
}
