15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/trusted/file_chooser_trusted.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_bool.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/completion_callback.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_errors.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/module_impl.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/var.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/trusted/ppb_file_chooser_trusted.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace pp {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> const char* interface_name<PPB_FileChooserTrusted_0_5>() {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PPB_FILECHOOSER_TRUSTED_INTERFACE_0_5;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> const char* interface_name<PPB_FileChooserTrusted_0_6>() {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PPB_FILECHOOSER_TRUSTED_INTERFACE_0_6;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FileChooser_Trusted::FileChooser_Trusted() : save_as_(false) {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FileChooser_Trusted::FileChooser_Trusted(const InstanceHandle& instance,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         PP_FileChooserMode_Dev mode,
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         const Var& accept_types,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         bool save_as,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         const std::string& suggested_file_name)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : FileChooser_Dev(instance, mode, accept_types),
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      save_as_(save_as),
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      suggested_file_name_(suggested_file_name) {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FileChooser_Trusted::FileChooser_Trusted(const FileChooser_Trusted& other)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : FileChooser_Dev(other),
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      save_as_(other.save_as_),
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      suggested_file_name_(other.suggested_file_name_) {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FileChooser_Trusted& FileChooser_Trusted::operator=(
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const FileChooser_Trusted& other) {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileChooser_Dev::operator=(other);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  save_as_ = other.save_as_;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  suggested_file_name_ = other.suggested_file_name_;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return *this;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t FileChooser_Trusted::Show(
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const CompletionCallbackWithOutput< std::vector<FileRef> >& callback) {
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (has_interface<PPB_FileChooserTrusted_0_6>()) {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return get_interface<PPB_FileChooserTrusted_0_6>()->ShowWithoutUserGesture(
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        pp_resource(),
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        PP_FromBool(save_as_),
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Var(suggested_file_name_).pp_var(),
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        callback.output(),
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        callback.pp_completion_callback());
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (has_interface<PPB_FileChooserTrusted_0_5>()) {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Data for our callback. The callback handler will delete it.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ChooseCallbackData0_5* data = new ChooseCallbackData0_5;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    data->file_chooser = pp_resource();
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    data->output = callback.output();
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    data->original_callback = callback.pp_completion_callback();
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return get_interface<PPB_FileChooserTrusted_0_5>()->ShowWithoutUserGesture(
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        pp_resource(),
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        PP_FromBool(save_as_),
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Var(suggested_file_name_).pp_var(),
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        PP_MakeCompletionCallback(&CallbackConverter, data));
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return callback.MayForce(PP_ERROR_NOINTERFACE);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace pp
82