/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "nsISupports.idl" #include "domstubs.idl" interface mozIDOMWindowProxy; interface nsIEditor; %{ C++ class mozIDOMWindowProxy; namespace mozilla { class HTMLEditor; } // namespace mozilla %} [scriptable, builtinclass, uuid(24f963d1-e6fc-43ea-a206-99ac5fcc5265)] interface nsIEditingSession : nsISupports { /** * Error codes when we fail to create an editor * is placed in attribute editorStatus */ const long eEditorOK = 0; const long eEditorCreationInProgress = 1; const long eEditorErrorCantEditMimeType = 2; const long eEditorErrorFileNotFound = 3; const long eEditorErrorCantEditFramesets = 8; const long eEditorErrorUnknown = 9; /** * Status after editor creation and document loading * Value is one of the above error codes */ readonly attribute unsigned long editorStatus; /** * Make this window editable * @param aWindow nsIDOMWindow, the window the embedder needs to make editable * @param aEditorType string, "html" "htmlsimple" "text" "textsimple" * @param aMakeWholeDocumentEditable if PR_TRUE make the whole document in * aWindow editable, otherwise it's the * embedder who should make the document * (or part of it) editable. * @param aInteractive if PR_FALSE turn off scripting and plugins */ void makeWindowEditable(in mozIDOMWindowProxy window, in string aEditorType, in boolean doAfterUriLoad, in boolean aMakeWholeDocumentEditable, in boolean aInteractive); /** * Test whether a specific window has had its editable flag set; it may have an editor * now, or will get one after the uri load. * * Use this, passing the content root window, to test if we've set up editing * for this content. */ boolean windowIsEditable(in mozIDOMWindowProxy window); /** * Get the editor for this window. May return null */ nsIEditor getEditorForWindow(in mozIDOMWindowProxy window); /** * Setup editor and related support objects */ void setupEditorOnWindow(in mozIDOMWindowProxy window); /** * Destroy editor and related support objects */ void tearDownEditorOnWindow(in mozIDOMWindowProxy window); void setEditorOnControllers(in mozIDOMWindowProxy aWindow, in nsIEditor aEditor); /** * Disable scripts and plugins in aWindow. */ void disableJSAndPlugins(in mozIDOMWindowProxy aWindow); /** * Restore JS and plugins (enable/disable them) according to the state they * were before the last call to disableJSAndPlugins. */ void restoreJSAndPlugins(in mozIDOMWindowProxy aWindow); /** * Removes all the editor's controllers/listeners etc and makes the window * uneditable. */ void detachFromWindow(in mozIDOMWindowProxy aWindow); /** * Undos detachFromWindow(), reattaches this editing session/editor * to the window. */ void reattachToWindow(in mozIDOMWindowProxy aWindow); /** * Whether this session has disabled JS and plugins. */ readonly attribute boolean jsAndPluginsDisabled; %{C++ /** * This method is implemented with nsIDocShell::GetHTMLEditor(). I.e., * This method doesn't depend on nsEditingSession. Therefore, even if * there were some implementation of nsIEditingSession interface, this * would be safe to use. */ mozilla::HTMLEditor* GetHTMLEditorForWindow(mozIDOMWindowProxy* aWindow); %} };