// 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 "content/browser/plugin_content_origin_whitelist.h"

#include "content/common/frame_messages.h"
#include "content/public/browser/navigation_details.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"

namespace content {

PluginContentOriginWhitelist::PluginContentOriginWhitelist(
    WebContents* web_contents)
    : WebContentsObserver(web_contents) {
}

PluginContentOriginWhitelist::~PluginContentOriginWhitelist() {
}

void PluginContentOriginWhitelist::RenderFrameCreated(
    RenderFrameHost* render_frame_host) {
  if (!whitelist_.empty()) {
    Send(new FrameMsg_UpdatePluginContentOriginWhitelist(
        render_frame_host->GetRoutingID(), whitelist_));
  }
}

bool PluginContentOriginWhitelist::OnMessageReceived(
    const IPC::Message& message,
    RenderFrameHost* render_frame_host) {
  bool handled = true;
  IPC_BEGIN_MESSAGE_MAP(PluginContentOriginWhitelist, message)
    IPC_MESSAGE_HANDLER(FrameHostMsg_PluginContentOriginAllowed,
                        OnPluginContentOriginAllowed)
    IPC_MESSAGE_UNHANDLED(handled = false)
  IPC_END_MESSAGE_MAP()

  return handled;
}

void PluginContentOriginWhitelist::DidNavigateMainFrame(
    const LoadCommittedDetails& details,
    const FrameNavigateParams& params) {
  if (details.is_navigation_to_different_page()) {
    // We expect RenderFrames to clear their replicated whitelist independently.
    whitelist_.clear();
  }
}

void PluginContentOriginWhitelist::OnPluginContentOriginAllowed(
    const url::Origin& content_origin) {
  whitelist_.insert(content_origin);

  web_contents()->SendToAllFrames(
      new FrameMsg_UpdatePluginContentOriginWhitelist(
          MSG_ROUTING_NONE, whitelist_));
}

}  // namespace content
