Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/widget/gtk/nsPrintSettingsServiceGTK.cpp
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* This Source Code Form is subject to the terms of the Mozilla Public
3
 * License, v. 2.0. If a copy of the MPL was not distributed with this
4
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6
#include "nsPrintSettingsServiceGTK.h"
7
#include "nsPrintSettingsGTK.h"
8
9
using namespace mozilla::embedding;
10
11
static void
12
serialize_gtk_printsettings_to_printdata(const gchar *key,
13
                                         const gchar *value,
14
                                         gpointer aData)
15
0
{
16
0
  PrintData* data = (PrintData*)aData;
17
0
  CStringKeyValue pair;
18
0
  pair.key() = key;
19
0
  pair.value() = value;
20
0
  data->GTKPrintSettings().AppendElement(pair);
21
0
}
22
23
NS_IMETHODIMP
24
nsPrintSettingsServiceGTK::SerializeToPrintData(nsIPrintSettings* aSettings,
25
                                                nsIWebBrowserPrint* aWBP,
26
                                                PrintData* data)
27
0
{
28
0
  nsresult rv = nsPrintSettingsService::SerializeToPrintData(aSettings, aWBP, data);
29
0
  NS_ENSURE_SUCCESS(rv, rv);
30
0
31
0
  nsCOMPtr<nsPrintSettingsGTK> settingsGTK(do_QueryInterface(aSettings));
32
0
  NS_ENSURE_STATE(settingsGTK);
33
0
34
0
  GtkPrintSettings* gtkPrintSettings = settingsGTK->GetGtkPrintSettings();
35
0
  NS_ENSURE_STATE(gtkPrintSettings);
36
0
37
0
  gtk_print_settings_foreach(
38
0
    gtkPrintSettings,
39
0
    serialize_gtk_printsettings_to_printdata,
40
0
    data);
41
0
42
0
  return NS_OK;
43
0
}
44
45
NS_IMETHODIMP
46
nsPrintSettingsServiceGTK::DeserializeToPrintSettings(const PrintData& data,
47
                                                      nsIPrintSettings* settings)
48
0
{
49
0
  nsCOMPtr<nsPrintSettingsGTK> settingsGTK(do_QueryInterface(settings));
50
0
  NS_ENSURE_STATE(settingsGTK);
51
0
52
0
  nsresult rv = nsPrintSettingsService::DeserializeToPrintSettings(data, settings);
53
0
  NS_ENSURE_SUCCESS(rv, rv);
54
0
55
0
  // Instead of re-using the GtkPrintSettings that nsIPrintSettings is
56
0
  // wrapping, we'll create a new one to deserialize to and replace it
57
0
  // within nsIPrintSettings.
58
0
  GtkPrintSettings* newGtkPrintSettings = gtk_print_settings_new();
59
0
60
0
  for (uint32_t i = 0; i < data.GTKPrintSettings().Length(); ++i) {
61
0
    CStringKeyValue pair = data.GTKPrintSettings()[i];
62
0
    gtk_print_settings_set(newGtkPrintSettings,
63
0
                           pair.key().get(),
64
0
                           pair.value().get());
65
0
  }
66
0
67
0
  settingsGTK->SetGtkPrintSettings(newGtkPrintSettings);
68
0
69
0
  // nsPrintSettingsGTK is holding a reference to newGtkPrintSettings
70
0
  g_object_unref(newGtkPrintSettings);
71
0
  newGtkPrintSettings = nullptr;
72
0
  return NS_OK;
73
0
}
74
75
nsresult nsPrintSettingsServiceGTK::_CreatePrintSettings(nsIPrintSettings** _retval)
76
0
{
77
0
  *_retval = nullptr;
78
0
  nsPrintSettingsGTK* printSettings = new nsPrintSettingsGTK(); // does not initially ref count
79
0
  NS_ENSURE_TRUE(printSettings, NS_ERROR_OUT_OF_MEMORY);
80
0
81
0
  NS_ADDREF(*_retval = printSettings); // ref count
82
0
83
0
  return NS_OK;
84
0
}
85