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

#ifndef HEADLESS_PUBLIC_WEB_FRAME_H_
#define HEADLESS_PUBLIC_WEB_FRAME_H_

#include "base/callback.h"
#include "base/macros.h"
#include "base/values.h"
#include "headless/public/headless_export.h"

namespace headless {

class WebDocument;

// Class representing a frame in a web page (e.g. main frame or an iframe).
// Should be accessed from renderer main thread.
class HEADLESS_EXPORT WebFrame {
 public:
  virtual ~WebFrame() {}

  using ScriptExecutionCallback =
      base::Callback<void(const std::vector<scoped_ptr<base::Value>>&)>;

  // Schedule given script for execution.
  virtual void ExecuteScript(const std::string& source_code) = 0;

  // Execute given script and return its result.
  // Returned value will be converted to json (base::Value).
  // Special effects to bear in mind:
  // - Boolean will be converted to base::FundamentalValue (no surprises here).
  // - Number will be converted to base::FundamentalValue.
  // - Array will be converted to base::ListValue.
  //   Note: All non-numerical properties will be omitted
  //   (e.g. "array = [1, 2, 3]; array['property'] = 'value'; return array"
  //    will return [1, 2, 3]).
  // - Object will be converted to base::DictionaryValue
  //   Note: Only string can be key in base::DictionaryValue, so all non-string
  //   properties will be omitted
  //   (e.g. "obj = Object(); obj['key'] = 'value'; obj[0] = 42;" will return
  //    {"key":"value"}).
  virtual void ExecuteScriptAndReturnValue(
      const std::string& source_code,
      const ScriptExecutionCallback& callback) = 0;

 private:
  DISALLOW_COPY_AND_ASSIGN(WebFrame);
};

}  // namespace headless

#endif  // HEADLESS_PUBLIC_WEB_FRAME_H_
