diff --git a/configure.in b/configure.in index a2f09c979992..20bde77e81c0 100644 --- a/configure.in +++ b/configure.in @@ -5704,12 +5704,18 @@ MOZ_ARG_DISABLE_BOOL(permissions, MOZ_PERMISSIONS=1 ) +AC_SUBST(MOZ_PERMISSIONS) +if test -n "$MOZ_PERMISSIONS"; then + AC_DEFINE(MOZ_PERMISSIONS) +fi + dnl ======================================================== dnl Child permissions, currently only used for b2g dnl ======================================================== if test -n "$MOZ_B2G"; then if test -n "$MOZ_PERMISSIONS"; then MOZ_CHILD_PERMISSIONS=1 + AC_DEFINE(MOZ_CHILD_PERMISSIONS) else AC_MSG_ERROR([You need to enable MOZ_PERMISSIONS for MOZ_CHILD_PERMISSIONS]) fi @@ -8429,7 +8435,6 @@ AC_SUBST(BIN_FLAGS) AC_SUBST(MOZ_WIDGET_TOOLKIT) AC_SUBST(MOZ_UPDATE_XTERM) AC_SUBST(MOZ_AUTH_EXTENSION) -AC_SUBST(MOZ_PERMISSIONS) AC_SUBST(MOZ_PREF_EXTENSIONS) AC_SUBST(MOZ_DEBUG) AC_SUBST(MOZ_DEBUG_SYMBOLS) diff --git a/dom/html/HTMLInputElement.cpp b/dom/html/HTMLInputElement.cpp index 05df41c143cb..d69fc41a2162 100644 --- a/dom/html/HTMLInputElement.cpp +++ b/dom/html/HTMLInputElement.cpp @@ -1,4 +1,5 @@ /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=2 sw=2 sts=2 et tw=80: */ /* 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/. */ @@ -1692,12 +1693,18 @@ HTMLInputElement::GetValueInternal(nsAString& aValue) const case VALUE_MODE_FILENAME: if (nsContentUtils::IsCallerChrome()) { +#ifndef MOZ_CHILD_PERMISSIONS + aValue.Assign(mFirstFilePath); +#else + // XXX We'd love to assert that this can't happen, but some mochitests + // use SpecialPowers to circumvent our more sane security model. if (!mFiles.IsEmpty()) { return mFiles[0]->GetMozFullPath(aValue); } else { aValue.Truncate(); } +#endif } else { // Just return the leaf name if (mFiles.IsEmpty() || NS_FAILED(mFiles[0]->GetName(aValue))) { @@ -2647,6 +2654,19 @@ HTMLInputElement::AfterSetFiles(bool aSetValueChanged) formControlFrame->SetFormProperty(nsGkAtoms::value, readableValue); } +#ifndef MOZ_CHILD_PERMISSIONS + // Grab the full path here for any chrome callers who access our .value via a + // CPOW. This path won't be called from a CPOW meaning the potential sync IPC + // call under GetMozFullPath won't be rejected for not being urgent. + // XXX Protected by the ifndef because the blob code doesn't allow us to send + // this message in b2g. + if (mFiles.IsEmpty()) { + mFirstFilePath.Truncate(); + } else { + mFiles[0]->GetMozFullPath(mFirstFilePath); + } +#endif + UpdateFileList(); if (aSetValueChanged) { diff --git a/dom/html/HTMLInputElement.h b/dom/html/HTMLInputElement.h index 8784f2181a8a..8c648ae9fb5f 100644 --- a/dom/html/HTMLInputElement.h +++ b/dom/html/HTMLInputElement.h @@ -1254,6 +1254,7 @@ protected: */ nsTextEditorState* mState; } mInputData; + /** * The value of the input if it is a file input. This is the list of filenames * used when uploading a file. It is vital that this is kept separate from @@ -1266,6 +1267,13 @@ protected: */ nsTArray> mFiles; +#ifndef MOZ_CHILD_PERMISSIONS + /** + * Hack for bug 1086684: Stash the .value when we're a file picker. + */ + nsString mFirstFilePath; +#endif + nsRefPtr mFileList; nsRefPtr mDirPickerFileListBuilderTask; diff --git a/dom/ipc/moz.build b/dom/ipc/moz.build index 29def19955c8..48f62b6a5739 100644 --- a/dom/ipc/moz.build +++ b/dom/ipc/moz.build @@ -148,10 +148,6 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('android', 'gtk2', 'gonk', 'qt'): if CONFIG['MOZ_TOOLKIT_SEARCH']: DEFINES['MOZ_TOOLKIT_SEARCH'] = True -for var in ('MOZ_PERMISSIONS', 'MOZ_CHILD_PERMISSIONS'): - if CONFIG[var]: - DEFINES[var] = True - JAR_MANIFESTS += ['jar.mn'] BROWSER_CHROME_MANIFESTS += ['tests/browser.ini']