This commit is contained in:
Shelley Vohr 2018-04-17 21:47:44 -04:00
Родитель c090dd2f81
Коммит 8cc81509d7
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: F13993A75599653C
38 изменённых файлов: 202 добавлений и 231 удалений

Просмотреть файл

@ -98,12 +98,10 @@ class CertificateManagerModel {
// Methods used during initialization, see the comment at the top of the .cc
// file for details.
static void DidGetCertDBOnUIThread(
net::NSSCertDatabase* cert_db,
static void DidGetCertDBOnUIThread(net::NSSCertDatabase* cert_db,
bool is_user_db_available,
const CreationCallback& callback);
static void DidGetCertDBOnIOThread(
const CreationCallback& callback,
static void DidGetCertDBOnIOThread(const CreationCallback& callback,
net::NSSCertDatabase* cert_db);
static void GetCertDBOnIOThread(content::ResourceContext* context,
const CreationCallback& callback);

Просмотреть файл

@ -21,8 +21,9 @@ namespace extensions {
// forwards its output to the base class for processing.
//
// This class does two things:
// 1. Intercepts media/volume keys. Uses an event tap for intercepting media keys
// (PlayPause, NextTrack, PreviousTrack) and volume keys(VolumeUp, VolumeDown, VolumeMute).
// 1. Intercepts media/volume keys. Uses an event tap for intercepting media
// keys (PlayPause, NextTrack, PreviousTrack) and volume keys(VolumeUp,
// VolumeDown, VolumeMute).
// 2. Binds keyboard shortcuts (hot keys). Carbon RegisterEventHotKey API for
// binding to non-media key global hot keys (eg. Command-Shift-1).
class GlobalShortcutListenerMac : public GlobalShortcutListener {
@ -67,12 +68,15 @@ class GlobalShortcutListenerMac : public GlobalShortcutListener {
bool IsAnyHotKeyRegistered();
// The callback for when an event tap happens.
static CGEventRef EventTapCallback(
CGEventTapProxy proxy, CGEventType type, CGEventRef event, void* refcon);
static CGEventRef EventTapCallback(CGEventTapProxy proxy,
CGEventType type,
CGEventRef event,
void* refcon);
// The callback for when a hot key event happens.
static OSStatus HotKeyHandler(
EventHandlerCallRef next_handler, EventRef event, void* user_data);
static OSStatus HotKeyHandler(EventHandlerCallRef next_handler,
EventRef event,
void* user_data);
// Whether this object is listening for global shortcuts.
bool is_listening_;

Просмотреть файл

@ -5,8 +5,8 @@
#ifndef CHROME_BROWSER_EXTENSIONS_GLOBAL_SHORTCUT_LISTENER_X11_H_
#define CHROME_BROWSER_EXTENSIONS_GLOBAL_SHORTCUT_LISTENER_X11_H_
#include <stdint.h>
#include <X11/Xlib.h>
#include <stdint.h>
#include <set>

Просмотреть файл

@ -97,7 +97,7 @@ class IconManager {
CacheKey(const IconLoader::IconGroup& group, IconLoader::IconSize size);
// Used as a key in the map below, so we need this comparator.
bool operator<(const CacheKey &other) const;
bool operator<(const CacheKey& other) const;
IconLoader::IconGroup group;
IconLoader::IconSize size;

Просмотреть файл

@ -209,9 +209,7 @@ class JobEventDetails : public base::RefCountedThreadSafe<JobEventDetails> {
// Getters.
PrintedDocument* document() const;
PrintedPage* page() const;
Type type() const {
return type_;
}
Type type() const { return type_; }
private:
friend class base::RefCountedThreadSafe<JobEventDetails>;

Просмотреть файл

@ -43,7 +43,7 @@ class PrintQueriesQueue : public base::RefCountedThreadSafe<PrintQueriesQueue> {
private:
friend class base::RefCountedThreadSafe<PrintQueriesQueue>;
typedef std::vector<scoped_refptr<PrinterQuery> > PrinterQueries;
typedef std::vector<scoped_refptr<PrinterQuery>> PrinterQueries;
virtual ~PrintQueriesQueue();
@ -73,7 +73,7 @@ class PrintJobManager : public content::NotificationObserver {
scoped_refptr<PrintQueriesQueue> queue();
private:
typedef std::set<scoped_refptr<PrintJob> > PrintJobs;
typedef std::set<scoped_refptr<PrintJob>> PrintJobs;
// Processes a NOTIFY_PRINT_JOB_EVENT notification.
void OnPrintJobEvent(PrintJob* print_job,

Просмотреть файл

@ -77,8 +77,7 @@ class PrintJobWorker {
bool IsRunning() const;
// Posts the given task to be run.
bool PostTask(const base::Location& from_here,
const base::Closure& task);
bool PostTask(const base::Location& from_here, const base::Closure& task);
// Signals the thread to exit in the near future.
void StopSoon();
@ -114,8 +113,7 @@ class PrintJobWorker {
// Asks the user for print settings. Must be called on the UI thread.
// Required on Mac and Linux. Windows can display UI from non-main threads,
// but sticks with this for consistency.
void GetSettingsWithUI(
int document_page_count,
void GetSettingsWithUI(int document_page_count,
bool has_selection,
bool is_scripted);

Просмотреть файл

@ -14,7 +14,7 @@
namespace base {
class MessageLoop;
class SequencedTaskRunner;
}
} // namespace base
namespace printing {
@ -48,8 +48,7 @@ class PrintJobWorkerOwner
bool RunsTasksInCurrentSequence() const;
// Posts the given task to be run.
bool PostTask(const base::Location& from_here,
const base::Closure& task);
bool PostTask(const base::Location& from_here, const base::Closure& task);
protected:
friend class base::RefCountedThreadSafe<PrintJobWorkerOwner>;

Просмотреть файл

@ -9,8 +9,8 @@
#include "base/callback.h"
#include "base/memory/ref_counted.h"
#include "components/prefs/pref_member.h"
#include "base/strings/string16.h"
#include "components/prefs/pref_member.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
#include "content/public/browser/web_contents_observer.h"
@ -41,16 +41,15 @@ class PrintViewManagerBase : public content::NotificationObserver,
// asynchronous, the actual printing will not be completed on the return of
// this function. Returns false if printing is impossible at the moment.
virtual bool PrintNow(content::RenderFrameHost* rfh,
bool silent, bool print_background,
bool silent,
bool print_background,
const base::string16& device_name);
#endif // !DISABLE_BASIC_PRINTING
// PrintedPagesSource implementation.
base::string16 RenderSourceName();
void SetCallback(const base::Callback<void(bool)>& cb) {
callback = cb;
};
void SetCallback(const base::Callback<void(bool)>& cb) { callback = cb; };
protected:
explicit PrintViewManagerBase(content::WebContents* web_contents);

Просмотреть файл

@ -53,8 +53,7 @@ class PrinterQuery : public PrintJobWorkerOwner {
bool is_modifiable,
const base::Closure& callback);
void GetSettings(
GetSettingsAskParam ask_user_for_settings,
void GetSettings(GetSettingsAskParam ask_user_for_settings,
int expected_page_count,
bool has_selection,
MarginType margin_type,

Просмотреть файл

@ -15,7 +15,7 @@ struct PrintHostMsg_ScriptedPrint_Params;
namespace base {
class DictionaryValue;
class FilePath;
}
} // namespace base
namespace content {
class WebContents;
@ -33,8 +33,7 @@ class PrintingMessageFilter : public content::BrowserMessageFilter {
PrintingMessageFilter(int render_process_id);
// content::BrowserMessageFilter methods.
void OverrideThreadForMessage(
const IPC::Message& message,
void OverrideThreadForMessage(const IPC::Message& message,
content::BrowserThread::ID* thread) override;
bool OnMessageReceived(const IPC::Message& message) override;

Просмотреть файл

@ -18,7 +18,7 @@ namespace ppapi {
namespace host {
struct HostMessageContext;
}
}
} // namespace ppapi
namespace chrome {

Просмотреть файл

@ -17,7 +17,7 @@ class Time;
namespace content {
class BrowserPpapiHost;
class ResourceContext;
}
} // namespace content
class GURL;

Просмотреть файл

@ -15,7 +15,7 @@ namespace ppapi {
namespace host {
struct HostMessageContext;
}
}
} // namespace ppapi
namespace ui {
class ScopedClipboardWriter;

Просмотреть файл

@ -40,11 +40,7 @@ enum TtsEventType {
TTS_EVENT_RESUME
};
enum TtsGenderType {
TTS_GENDER_NONE,
TTS_GENDER_MALE,
TTS_GENDER_FEMALE
};
enum TtsGenderType { TTS_GENDER_NONE, TTS_GENDER_MALE, TTS_GENDER_FEMALE };
// Returns true if this event type is one that indicates an utterance
// is finished and can be destroyed.
@ -167,14 +163,10 @@ class Utterance {
}
const std::string& voice_name() const { return voice_name_; }
void set_lang(const std::string& lang) {
lang_ = lang;
}
void set_lang(const std::string& lang) { lang_ = lang; }
const std::string& lang() const { return lang_; }
void set_gender(TtsGenderType gender) {
gender_ = gender;
}
void set_gender(TtsGenderType gender) { gender_ = gender; }
TtsGenderType gender() const { return gender_; }
void set_continuous_parameters(const UtteranceContinuousParameters& params) {

Просмотреть файл

@ -14,8 +14,7 @@ namespace content {
class BrowserContext;
}
class TtsMessageFilter
: public content::BrowserMessageFilter,
class TtsMessageFilter : public content::BrowserMessageFilter,
public UtteranceEventDelegate,
public VoicesChangedDelegate {
public:
@ -23,8 +22,7 @@ class TtsMessageFilter
content::BrowserContext* browser_context);
// content::BrowserMessageFilter implementation.
void OverrideThreadForMessage(
const IPC::Message& message,
void OverrideThreadForMessage(const IPC::Message& message,
content::BrowserThread::ID* thread) override;
bool OnMessageReceived(const IPC::Message& message) override;
void OnChannelClosing() override;

Просмотреть файл

@ -33,8 +33,7 @@ class TtsPlatformImpl {
// The TtsController will only try to speak one utterance at
// a time. If it wants to interrupt speech, it will always call Stop
// before speaking again.
virtual bool Speak(
int utterance_id,
virtual bool Speak(int utterance_id,
const std::string& utterance,
const std::string& lang,
const VoiceData& voice,

Просмотреть файл

@ -27,8 +27,7 @@ class SecurityStateTabHelper
~SecurityStateTabHelper() override;
// See security_state::GetSecurityInfo.
void GetSecurityInfo(
security_state::SecurityInfo* result) const;
void GetSecurityInfo(security_state::SecurityInfo* result) const;
// Called when the NavigationEntry's SSLStatus or other security
// information changes.

Просмотреть файл

@ -13,7 +13,7 @@ class SkBitmap;
namespace content {
class ColorChooser;
class WebContents;
}
} // namespace content
namespace chrome {

Просмотреть файл

@ -16,7 +16,7 @@ class WebContents;
namespace views {
class ColorChooserView;
class Widget;
}
} // namespace views
// TODO(mukai): rename this as -Ash and move to c/b/ui/ash after Linux-aura
// switches to its native color chooser.

Просмотреть файл

@ -36,10 +36,16 @@ class GlobalMenuBarRegistrarX11 {
void RegisterXID(unsigned long xid);
void UnregisterXID(unsigned long xid);
CHROMEG_CALLBACK_1(GlobalMenuBarRegistrarX11, void, OnProxyCreated,
GObject*, GAsyncResult*);
CHROMEG_CALLBACK_1(GlobalMenuBarRegistrarX11, void, OnNameOwnerChanged,
GObject*, GParamSpec*);
CHROMEG_CALLBACK_1(GlobalMenuBarRegistrarX11,
void,
OnProxyCreated,
GObject*,
GAsyncResult*);
CHROMEG_CALLBACK_1(GlobalMenuBarRegistrarX11,
void,
OnNameOwnerChanged,
GObject*,
GParamSpec*);
GDBusProxy* registrar_proxy_;

Просмотреть файл

@ -34,7 +34,8 @@ bool GetDefaultUserDataDirectory(base::FilePath* result);
// of this directory, with names like "Cache" and "Media Cache".
// This will always fill in |result| with a directory, sometimes
// just |profile_dir|.
void GetUserCacheDirectory(const base::FilePath& profile_dir, base::FilePath* result);
void GetUserCacheDirectory(const base::FilePath& profile_dir,
base::FilePath* result);
// Get the path to the user's documents directory.
bool GetUserDocumentsDirectory(base::FilePath* result);

Просмотреть файл

@ -14,8 +14,8 @@
#include "printing/page_size_margins.h"
#include "printing/print_job_constants.h"
#include "third_party/WebKit/public/web/WebPrintScalingOption.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/native_widget_types.h"
#if defined(OS_WIN)
#include "ipc/ipc_platform_file.h"
@ -71,8 +71,7 @@ struct PrintMsg_PrintPages_Params {
#define IPC_MESSAGE_START PrintMsgStart
IPC_ENUM_TRAITS_MAX_VALUE(printing::MarginType,
printing::MARGIN_TYPE_LAST)
IPC_ENUM_TRAITS_MAX_VALUE(printing::MarginType, printing::MARGIN_TYPE_LAST)
IPC_ENUM_TRAITS_MIN_MAX_VALUE(printing::DuplexMode,
printing::UNKNOWN_DUPLEX_MODE,
printing::SHORT_EDGE)
@ -224,7 +223,6 @@ IPC_STRUCT_BEGIN(PrintHostMsg_DidPreviewDocument_Params)
IPC_STRUCT_MEMBER(int, preview_request_id)
IPC_STRUCT_END()
// Messages sent from the browser to the renderer.
// Tells the render view to switch the CSS to print media type, renders every
@ -235,14 +233,12 @@ IPC_MESSAGE_ROUTED3(PrintMsg_PrintPages,
base::string16 /* device name*/)
// Tells the render view that printing is done so it can clean up.
IPC_MESSAGE_ROUTED1(PrintMsg_PrintingDone,
bool /* success */)
IPC_MESSAGE_ROUTED1(PrintMsg_PrintingDone, bool /* success */)
// Tells the render view to switch the CSS to print media type, renders every
// requested pages for print preview using the given |settings|. This gets
// called multiple times as the user updates settings.
IPC_MESSAGE_ROUTED1(PrintMsg_PrintPreview,
base::DictionaryValue /* settings */)
IPC_MESSAGE_ROUTED1(PrintMsg_PrintPreview, base::DictionaryValue /* settings */)
// Messages sent from the renderer to the browser.
@ -303,8 +299,7 @@ IPC_SYNC_MESSAGE_ROUTED1_1(PrintHostMsg_ScriptedPrint,
IPC_MESSAGE_ROUTED0(PrintHostMsg_ShowInvalidPrinterSettingsError)
// Tell the browser printing failed.
IPC_MESSAGE_ROUTED1(PrintHostMsg_PrintingFailed,
int /* document cookie */)
IPC_MESSAGE_ROUTED1(PrintHostMsg_PrintingFailed, int /* document cookie */)
// Sends back to the browser the complete rendered document (non-draft mode,
// used for printing) that was requested by a PrintMsg_PrintPreview message.

Просмотреть файл

@ -13,44 +13,38 @@
#define IPC_MESSAGE_START TtsMsgStart
IPC_STRUCT_TRAITS_BEGIN(TtsUtteranceRequest)
IPC_STRUCT_TRAITS_MEMBER(id)
IPC_STRUCT_TRAITS_MEMBER(text)
IPC_STRUCT_TRAITS_MEMBER(lang)
IPC_STRUCT_TRAITS_MEMBER(voice)
IPC_STRUCT_TRAITS_MEMBER(volume)
IPC_STRUCT_TRAITS_MEMBER(rate)
IPC_STRUCT_TRAITS_MEMBER(pitch)
IPC_STRUCT_TRAITS_MEMBER(id)
IPC_STRUCT_TRAITS_MEMBER(text)
IPC_STRUCT_TRAITS_MEMBER(lang)
IPC_STRUCT_TRAITS_MEMBER(voice)
IPC_STRUCT_TRAITS_MEMBER(volume)
IPC_STRUCT_TRAITS_MEMBER(rate)
IPC_STRUCT_TRAITS_MEMBER(pitch)
IPC_STRUCT_TRAITS_END()
IPC_STRUCT_TRAITS_BEGIN(TtsVoice)
IPC_STRUCT_TRAITS_MEMBER(voice_uri)
IPC_STRUCT_TRAITS_MEMBER(name)
IPC_STRUCT_TRAITS_MEMBER(lang)
IPC_STRUCT_TRAITS_MEMBER(local_service)
IPC_STRUCT_TRAITS_MEMBER(is_default)
IPC_STRUCT_TRAITS_MEMBER(voice_uri)
IPC_STRUCT_TRAITS_MEMBER(name)
IPC_STRUCT_TRAITS_MEMBER(lang)
IPC_STRUCT_TRAITS_MEMBER(local_service)
IPC_STRUCT_TRAITS_MEMBER(is_default)
IPC_STRUCT_TRAITS_END()
// Renderer -> Browser messages.
IPC_MESSAGE_CONTROL0(TtsHostMsg_InitializeVoiceList)
IPC_MESSAGE_CONTROL1(TtsHostMsg_Speak,
TtsUtteranceRequest)
IPC_MESSAGE_CONTROL1(TtsHostMsg_Speak, TtsUtteranceRequest)
IPC_MESSAGE_CONTROL0(TtsHostMsg_Pause)
IPC_MESSAGE_CONTROL0(TtsHostMsg_Resume)
IPC_MESSAGE_CONTROL0(TtsHostMsg_Cancel)
// Browser -> Renderer messages.
IPC_MESSAGE_CONTROL1(TtsMsg_SetVoiceList,
std::vector<TtsVoice>)
IPC_MESSAGE_CONTROL1(TtsMsg_DidStartSpeaking,
int /* utterance id */)
IPC_MESSAGE_CONTROL1(TtsMsg_DidFinishSpeaking,
int /* utterance id */)
IPC_MESSAGE_CONTROL1(TtsMsg_DidPauseSpeaking,
int /* utterance id */)
IPC_MESSAGE_CONTROL1(TtsMsg_DidResumeSpeaking,
int /* utterance id */)
IPC_MESSAGE_CONTROL1(TtsMsg_SetVoiceList, std::vector<TtsVoice>)
IPC_MESSAGE_CONTROL1(TtsMsg_DidStartSpeaking, int /* utterance id */)
IPC_MESSAGE_CONTROL1(TtsMsg_DidFinishSpeaking, int /* utterance id */)
IPC_MESSAGE_CONTROL1(TtsMsg_DidPauseSpeaking, int /* utterance id */)
IPC_MESSAGE_CONTROL1(TtsMsg_DidResumeSpeaking, int /* utterance id */)
IPC_MESSAGE_CONTROL2(TtsMsg_WordBoundary,
int /* utterance id */,
int /* char index */)
@ -60,10 +54,8 @@ IPC_MESSAGE_CONTROL2(TtsMsg_SentenceBoundary,
IPC_MESSAGE_CONTROL2(TtsMsg_MarkerEvent,
int /* utterance id */,
int /* char index */)
IPC_MESSAGE_CONTROL1(TtsMsg_WasInterrupted,
int /* utterance id */)
IPC_MESSAGE_CONTROL1(TtsMsg_WasCancelled,
int /* utterance id */)
IPC_MESSAGE_CONTROL1(TtsMsg_WasInterrupted, int /* utterance id */)
IPC_MESSAGE_CONTROL1(TtsMsg_WasCancelled, int /* utterance id */)
IPC_MESSAGE_CONTROL2(TtsMsg_SpeakingErrorOccurred,
int /* utterance id */,
std::string /* error message */)

Просмотреть файл

@ -5,8 +5,8 @@
#ifndef CHROME_COMMON_WIDEVINE_CDM_CONSTANTS_H_
#define CHROME_COMMON_WIDEVINE_CDM_CONSTANTS_H_
#include "base/macros.h"
#include "base/files/file_path.h"
#include "base/macros.h"
extern const char kWidevineCdmPluginExtension[];

Просмотреть файл

@ -23,7 +23,7 @@ namespace ppapi {
namespace proxy {
struct SerializedFontDescription;
}
}
} // namespace ppapi
class PepperFlashFontFileHost : public ppapi::host::ResourceHost {
public:

Просмотреть файл

@ -16,13 +16,13 @@
namespace content {
class RendererPpapiHost;
struct MenuItem;
}
} // namespace content
namespace ppapi {
namespace proxy {
class SerializedFlashMenu;
}
}
} // namespace ppapi
class PepperFlashMenuHost : public ppapi::host::ResourceHost,
public content::ContextMenuClient {

Просмотреть файл

@ -22,7 +22,7 @@ namespace ppapi {
namespace proxy {
struct PPBFlash_DrawGlyphs_Params;
}
}
} // namespace ppapi
namespace content {
class RendererPpapiHost;

Просмотреть файл

@ -16,7 +16,7 @@ namespace ppapi {
namespace proxy {
class SerializedHandle;
}
}
} // namespace ppapi
// Implements the backend for shared memory messages from a plugin process.
class PepperSharedMemoryMessageFilter

Просмотреть файл

@ -106,7 +106,6 @@ class PrintWebViewHelper
#endif // !DISABLE_BASIC_PRINTING
void OnPrintPreview(const base::DictionaryValue& settings);
// Get |page_size| and |content_area| information from
// |page_layout_in_points|.
void GetPageSizeAndContentAreaFromPageLayout(
@ -131,7 +130,6 @@ class PrintWebViewHelper
bool RenderPreviewPage(int page_number,
const PrintMsg_Print_Params& print_params);
// Initialize the print preview document.
bool CreatePreviewDocument();
@ -154,7 +152,8 @@ class PrintWebViewHelper
const base::string16& device_name = base::string16());
// Calculate number of pages in source document.
bool CalculateNumberOfPages(blink::WebLocalFrame* frame,
bool CalculateNumberOfPages(
blink::WebLocalFrame* frame,
const blink::WebNode& node,
int* number_of_pages,
const base::string16& device_name = base::string16());
@ -166,7 +165,6 @@ class PrintWebViewHelper
const blink::WebNode& node,
const base::DictionaryValue& passed_job_settings);
// Get final print settings from the user.
// Return false if the user cancels or on error.
bool GetPrintSettingsFromUser(blink::WebLocalFrame* frame,
@ -373,7 +371,6 @@ class PrintWebViewHelper
State state_;
};
bool print_node_in_progress_;
bool is_loading_;
bool is_scripted_preview_delayed_;

Просмотреть файл

@ -25,8 +25,7 @@ struct TtsVoice;
// itself when deleted. There can be multiple TtsDispatchers alive at once,
// so each one routes IPC messages to its WebSpeechSynthesizerClient only if
// the utterance id (which is globally unique) matches.
class TtsDispatcher
: public blink::WebSpeechSynthesizer,
class TtsDispatcher : public blink::WebSpeechSynthesizer,
public content::RenderThreadObserver {
public:
explicit TtsDispatcher(blink::WebSpeechSynthesizerClient* client);
@ -38,8 +37,8 @@ class TtsDispatcher
// blink::WebSpeechSynthesizer implementation.
virtual void UpdateVoiceList() override;
virtual void Speak(const blink::WebSpeechSynthesisUtterance& utterance)
override;
virtual void Speak(
const blink::WebSpeechSynthesisUtterance& utterance) override;
virtual void Pause() override;
virtual void Resume() override;
virtual void Cancel() override;

Просмотреть файл

@ -17,7 +17,7 @@
namespace content {
class RenderFrame;
class RendererPpapiHost;
}
} // namespace content
namespace pdf {

Просмотреть файл

@ -1,5 +1,6 @@
// This is generated file. Do not modify directly.
// Path to the code generator: tools/generate_library_loader/generate_library_loader.py .
// Path to the code generator:
// tools/generate_library_loader/generate_library_loader.py .
#ifndef LIBRARY_LOADER_OUT_RELEASE_GEN_LIBRARY_LOADERS_LIBSPEECHD_H
#define LIBRARY_LOADER_OUT_RELEASE_GEN_LIBRARY_LOADERS_LIBSPEECHD_H
@ -7,7 +8,6 @@
#include "third_party/speech-dispatcher/libspeechd.h"
#define LIBRARY_LOADER_OUT_RELEASE_GEN_LIBRARY_LOADERS_LIBSPEECHD_H_DLOPEN
#include <string>
class LibSpeechdLoader {
@ -35,7 +35,6 @@ class LibSpeechdLoader {
decltype(&::spd_set_output_module) spd_set_output_module;
decltype(&::spd_set_language) spd_set_language;
private:
void CleanUp(bool unload);