本文整理汇总了C++中Frame类的典型用法代码示例。如果您正苦于以下问题:C++ Frame类的具体用法?C++ Frame怎么用?C++ Frame使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Frame类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: LOGTRACEMETHOD
Frame * Decoder::decodeAudio2(Packet & packet) {
LOGTRACEMETHOD("Decode Audio");
LOGDEBUG(packet.toString());
// Frame frame;
Frame * frame = new Frame();
int size = packet.packet->size;
int samples_size = 192000;//AVCODEC_MAX_AUDIO_FRAME_SIZE;
int bps = av_get_bytes_per_sample(ctx->sample_fmt);
//uint8_t* t=(uint8_t*)av_malloc(100);
//uint8_t *outbuf = static_cast<uint8_t*> (av_malloc(samples_size));
//int len = avcodec_decode_audio3(ctx, (short *) outbuf, &samples_size, packet.packet);
int len = avcodec_decode_audio4(ctx, frame->getAVFrame(), &samples_size, packet.packet);
//@TODO: this is a hack, because the decoder changes the TimeBase after the first packet was decoded
if (_next_pts == AV_NOPTS_VALUE) {
#ifdef USE_TIME_BASE_Q
_next_pts = av_rescale_q(packet.getPts(), packet.getTimeBase(), AV_TIME_BASE_Q);
#else
_next_pts = av_rescale_q(packet.getPts(), packet.getTimeBase(), ctx->time_base);
#endif
LOGDEBUG("setting last pts to " << _next_pts << " ctxtb=" << ctx->time_base.num << "/" << ctx->time_base.den
<< " ptb=" << packet.getTimeBase().num << "/" << packet.getTimeBase().den);
}
LOGDEBUG("DecodingLength:" << len << " PacketSize:" << packet.getSize() << "SampleSize:" << samples_size << "FrameSize:" << ctx->frame_size * ctx->channels);
if (len < 0 /*||ctx->channels<=0||samples_size<=0*/) {
LOGERROR("Error while decoding audio Frame");
//av_free(outbuf);
return new Frame();
}
//Frame * frame = new Frame(outbuf,samples_size);
if (samples_size > 0) {
frame->setFinished(true);
} else {
frame->setFinished(false);
}
size -= len;
frame->_allocated = true;
//frame->getAVFrame()->nb_samples=samples_size;
// frame._buffer = outbuf;
frame->stream_index = packet.packet->stream_index;
frame->setPts(_next_pts);
//frame->setDts(_next_pts);
AVRational ar;
ar.num = 1;
ar.den = ctx->sample_rate;
#ifdef USE_TIME_BASE_Q
int64_t dur = av_rescale_q(samples_size, ar, AV_TIME_BASE_Q);
frame->duration = dur;
frame->setTimeBase(AV_TIME_BASE_Q);
#else
// int64_t dur = av_rescale_q(samples_size, packet.getTimeBase(), ar);
//samples_size=max(1,samples_size);
int64_t dur = ((int64_t) AV_TIME_BASE / bps * samples_size) / (ctx->sample_rate * ctx->channels);
AVRational arbase;
arbase.num = 1;
arbase.den = AV_TIME_BASE;
frame->duration = av_rescale_q(dur, arbase, ar);
frame->setTimeBase(ar);
// _last_pts += frame->duration;
#endif
_last_pts = _next_pts;
_next_pts += frame->duration;
frame->pos = packet.packet->pos;
// frame->duration = packet.packet->duration;
/*
frame->_size = samples_size;
frame->_buffer=outbuf;
*/
frame->_type = AVMEDIA_TYPE_AUDIO;
frame->channels = ctx->channels;
frame->sample_rate = ctx->sample_rate;
//frame->dumpHex();
LOGDEBUG(frame->toString());
// frame->dumpHex();
pushFrame(new Frame(*frame));
return frame;
}
示例2: ASSERT
bool EditorClientEfl::handleEditingKeyboardEvent(KeyboardEvent* event)
{
Node* node = event->target()->toNode();
ASSERT(node);
Frame* frame = node->document().frame();
ASSERT(frame);
const PlatformKeyboardEvent* keyEvent = event->keyEvent();
if (!keyEvent)
return false;
bool caretBrowsing = frame->settings().caretBrowsingEnabled();
if (caretBrowsing) {
switch (keyEvent->windowsVirtualKeyCode()) {
case VK_LEFT:
frame->selection().modify(keyEvent->shiftKey() ? FrameSelection::AlterationExtend : FrameSelection::AlterationMove,
DirectionLeft,
keyEvent->ctrlKey() ? WordGranularity : CharacterGranularity,
UserTriggered);
return true;
case VK_RIGHT:
frame->selection().modify(keyEvent->shiftKey() ? FrameSelection::AlterationExtend : FrameSelection::AlterationMove,
DirectionRight,
keyEvent->ctrlKey() ? WordGranularity : CharacterGranularity,
UserTriggered);
return true;
case VK_UP:
frame->selection().modify(keyEvent->shiftKey() ? FrameSelection::AlterationExtend : FrameSelection::AlterationMove,
DirectionBackward,
keyEvent->ctrlKey() ? ParagraphGranularity : LineGranularity,
UserTriggered);
return true;
case VK_DOWN:
frame->selection().modify(keyEvent->shiftKey() ? FrameSelection::AlterationExtend : FrameSelection::AlterationMove,
DirectionForward,
keyEvent->ctrlKey() ? ParagraphGranularity : LineGranularity,
UserTriggered);
return true;
}
}
Editor::Command command = frame->editor().command(interpretKeyEvent(event));
if (keyEvent->type() == PlatformEvent::RawKeyDown) {
// WebKit doesn't have enough information about mode to decide how commands that just insert text if executed via Editor should be treated,
// so we leave it upon WebCore to either handle them immediately (e.g. Tab that changes focus) or let a keypress event be generated
// (e.g. Tab that inserts a Tab character, or Enter).
return !command.isTextInsertion() && command.execute(event);
}
if (command.execute(event))
return true;
// Don't allow text insertion for nodes that cannot edit.
if (!frame->editor().canEdit())
return false;
// Don't insert null or control characters as they can result in unexpected behaviour
if (event->charCode() < ' ')
return false;
// Don't insert anything if a modifier is pressed
if (keyEvent->ctrlKey() || keyEvent->altKey())
return false;
return frame->editor().insertText(event->keyEvent()->text(), event);
}
示例3: nodeCount
int Animation::nodeCount() const
{
Frame *frame = m_frames.at(m_currentFrame);
return frame->nodeCount();
}
示例4: createWindow
static Frame* createWindow(Frame* openerFrame, Frame* lookupFrame, const FrameLoadRequest& request, const WindowFeatures& features, NavigationPolicy policy, ShouldSendReferrer shouldSendReferrer, bool& created)
{
ASSERT(!features.dialog || request.frameName().isEmpty());
if (!request.frameName().isEmpty() && request.frameName() != "_blank" && policy == NavigationPolicyIgnore) {
if (Frame* frame = lookupFrame->loader().findFrameForNavigation(request.frameName(), openerFrame->document())) {
if (request.frameName() != "_self")
frame->page()->focusController().setFocusedFrame(frame);
created = false;
return frame;
}
}
// Sandboxed frames cannot open new auxiliary browsing contexts.
if (openerFrame->document()->isSandboxed(SandboxPopups)) {
// FIXME: This message should be moved off the console once a solution to https://bugs.webkit.org/show_bug.cgi?id=103274 exists.
openerFrame->document()->addConsoleMessage(SecurityMessageSource, ErrorMessageLevel, "Blocked opening '" + request.resourceRequest().url().elidedString() + "' in a new window because the request was made in a sandboxed frame whose 'allow-popups' permission is not set.");
return 0;
}
if (openerFrame->settings() && !openerFrame->settings()->supportsMultipleWindows()) {
created = false;
return openerFrame->tree().top();
}
Page* oldPage = openerFrame->page();
if (!oldPage)
return 0;
Page* page = oldPage->chrome().client().createWindow(openerFrame, request, features, policy, shouldSendReferrer);
if (!page)
return 0;
Frame* frame = page->mainFrame();
frame->loader().forceSandboxFlags(openerFrame->document()->sandboxFlags());
if (request.frameName() != "_blank")
frame->tree().setName(request.frameName());
page->chrome().setWindowFeatures(features);
// 'x' and 'y' specify the location of the window, while 'width' and 'height'
// specify the size of the viewport. We can only resize the window, so adjust
// for the difference between the window size and the viewport size.
FloatRect windowRect = page->chrome().windowRect();
FloatSize viewportSize = page->chrome().pageRect().size();
if (features.xSet)
windowRect.setX(features.x);
if (features.ySet)
windowRect.setY(features.y);
if (features.widthSet)
windowRect.setWidth(features.width + (windowRect.width() - viewportSize.width()));
if (features.heightSet)
windowRect.setHeight(features.height + (windowRect.height() - viewportSize.height()));
// Ensure non-NaN values, minimum size as well as being within valid screen area.
FloatRect newWindowRect = DOMWindow::adjustWindowRect(page, windowRect);
page->chrome().setWindowRect(newWindowRect);
page->chrome().show(policy);
created = true;
return frame;
}
示例5: writeArray
// Traj_NcEnsemble::writeArray()
int Traj_NcEnsemble::writeArray(int set, FramePtrArray const& Farray) {
# ifdef HAS_PNETCDF
MPI_Offset pstart_[4];
MPI_Offset pcount_[4];
# define start_ pstart_
# define count_ pcount_
# endif
start_[0] = ncframe_; // Frame
start_[2] = 0; // Atoms
start_[3] = 0; // XYZ
count_[0] = 1; // Frame
count_[1] = 1; // Ensemble
count_[3] = 3; // XYZ
for (int member = ensembleStart_; member != ensembleEnd_; member++) {
//rprintf("DEBUG: Writing set %i, member %i\n", set+1, member);
# ifdef MPI
Frame* frm = Farray[0];
# else
Frame* frm = Farray[member];
# endif
start_[1] = member; // Ensemble
count_[2] = Ncatom(); // Atoms
// Write Coords
//WriteIndices(); // DEBUG
DoubleToFloat(Coord_, frm->xAddress());
# ifdef HAS_PNETCDF
if (ncmpi_put_vara_float_all(ncid_, coordVID_, start_, count_, Coord_))
# else
if (checkNCerr(nc_put_vara_float(ncid_, coordVID_, start_, count_, Coord_)))
# endif
{
mprinterr("Error: Netcdf Writing coords frame %i\n", set+1);
return 1;
}
// Write velocity.
if (CoordInfo().HasVel() && frm->HasVelocity()) { // TODO: Determine V beforehand
DoubleToFloat(Coord_, frm->vAddress());
# ifdef HAS_PNETCDF
if (ncmpi_put_vara_float_all(ncid_, velocityVID_, start_, count_, Coord_))
# else
if (checkNCerr(nc_put_vara_float(ncid_, velocityVID_, start_, count_, Coord_)) )
# endif
{
mprinterr("Error: Netcdf writing velocity frame %i\n", set+1);
return 1;
}
}
// Write box
if (cellLengthVID_ != -1) {
count_[2] = 3;
# ifdef HAS_PNETCDF
if (ncmpi_put_vara_double_all(ncid_,cellLengthVID_,start_,count_,frm->bAddress()))
# else
if (checkNCerr(nc_put_vara_double(ncid_,cellLengthVID_,start_,count_,frm->bAddress())) )
# endif
{
mprinterr("Error: Writing cell lengths frame %i.\n", set+1);
return 1;
}
# ifdef HAS_PNETCDF
if (ncmpi_put_vara_double_all(ncid_,cellAngleVID_,start_,count_,frm->bAddress()+3))
# else
if (checkNCerr(nc_put_vara_double(ncid_,cellAngleVID_,start_,count_,frm->bAddress()+3)))
# endif
{
mprinterr("Error: Writing cell angles frame %i.\n", set+1);
return 1;
}
}
// Write temperature
if (TempVID_!=-1) {
# ifdef HAS_PNETCDF
if (ncmpi_put_vara_double_all(ncid_,TempVID_,start_,count_,frm->tAddress()))
# else
if (checkNCerr(nc_put_vara_double(ncid_,TempVID_,start_,count_,frm->tAddress())))
# endif
{
mprinterr("Error: Writing temperature frame %i.\n", set+1);
return 1;
}
}
// Write indices
if (indicesVID_ != -1) {
count_[2] = remd_dimension_;
# ifdef HAS_PNETCDF
if (ncmpi_put_vara_int_all(ncid_,indicesVID_,start_,count_,frm->iAddress()))
# else
if (checkNCerr(nc_put_vara_int(ncid_,indicesVID_,start_,count_,frm->iAddress())))
# endif
{
mprinterr("Error: Writing indices frame %i.\n", set+1);
return 1;
}
}
}
# ifdef HAS_PNETCDF
//ncmpi_sync(ncid_);
# else
nc_sync(ncid_); // Necessary after every write??
//.........这里部分代码省略.........
示例6: ASSERT
void HTMLAppletElement::updateWidgetInternal()
{
ASSERT(!m_isDelayingLoadEvent);
setNeedsWidgetUpdate(false);
// FIXME: This should ASSERT isFinishedParsingChildren() instead.
if (!isFinishedParsingChildren())
return;
RenderEmbeddedObject* renderer = renderEmbeddedObject();
Frame* frame = document().frame();
ASSERT(frame);
LayoutUnit contentWidth = renderer->style()->width().isFixed() ? LayoutUnit(renderer->style()->width().value()) :
renderer->width() - renderer->borderAndPaddingWidth();
LayoutUnit contentHeight = renderer->style()->height().isFixed() ? LayoutUnit(renderer->style()->height().value()) :
renderer->height() - renderer->borderAndPaddingHeight();
Vector<String> paramNames;
Vector<String> paramValues;
const AtomicString& codeBase = getAttribute(codebaseAttr);
if (!codeBase.isNull()) {
KURL codeBaseURL = document().completeURL(codeBase);
paramNames.append("codeBase");
paramValues.append(codeBase.string());
}
const AtomicString& archive = getAttribute(archiveAttr);
if (!archive.isNull()) {
paramNames.append("archive");
paramValues.append(archive.string());
}
const AtomicString& code = getAttribute(codeAttr);
paramNames.append("code");
paramValues.append(code.string());
// If the 'codebase' attribute is set, it serves as a relative root for the file that the Java
// plugin will load. If the 'code' attribute is set, and the 'archive' is not set, then we need
// to check the url generated by resolving 'code' against 'codebase'. If the 'archive'
// attribute is set, then 'code' points to a class inside the archive, so we need to check the
// url generated by resolving 'archive' against 'codebase'.
KURL urlToCheck;
KURL rootURL = codeBase.isNull() ? document().url() : document().completeURL(codeBase);
if (!archive.isNull())
urlToCheck = KURL(rootURL, archive);
else if (!code.isNull())
urlToCheck = KURL(rootURL, code);
if (!canEmbedURL(urlToCheck))
return;
const AtomicString& name = document().isHTMLDocument() ? getNameAttribute() : getIdAttribute();
if (!name.isNull()) {
paramNames.append("name");
paramValues.append(name.string());
}
paramNames.append("baseURL");
KURL baseURL = document().baseURL();
paramValues.append(baseURL.string());
const AtomicString& mayScript = getAttribute(mayscriptAttr);
if (!mayScript.isNull()) {
paramNames.append("mayScript");
paramValues.append(mayScript.string());
}
for (Node* child = firstChild(); child; child = child->nextSibling()) {
if (!child->hasTagName(paramTag))
continue;
HTMLParamElement* param = toHTMLParamElement(child);
if (param->name().isEmpty())
continue;
paramNames.append(param->name());
paramValues.append(param->value());
}
RefPtr<Widget> widget;
if (frame->loader().allowPlugins(AboutToInstantiatePlugin))
widget = frame->loader().client()->createJavaAppletWidget(roundedIntSize(LayoutSize(contentWidth, contentHeight)), this, baseURL, paramNames, paramValues);
if (!widget) {
if (!renderer->showsUnavailablePluginIndicator())
renderer->setPluginUnavailabilityReason(RenderEmbeddedObject::PluginMissing);
return;
}
document().setContainsPlugins();
renderer->setWidget(widget);
}
示例7: handleEditingKeyboardEvent
bool EditorClientImpl::handleEditingKeyboardEvent(KeyboardEvent* evt)
{
const PlatformKeyboardEvent* keyEvent = evt->keyEvent();
// do not treat this as text input if it's a system key event
if (!keyEvent || keyEvent->isSystemKey())
return false;
Frame* frame = evt->target()->toNode()->document()->frame();
if (!frame)
return false;
String commandName = interpretKeyEvent(evt);
Editor::Command command = frame->editor()->command(commandName);
if (keyEvent->type() == PlatformKeyboardEvent::RawKeyDown) {
// WebKit doesn't have enough information about mode to decide how
// commands that just insert text if executed via Editor should be treated,
// so we leave it upon WebCore to either handle them immediately
// (e.g. Tab that changes focus) or let a keypress event be generated
// (e.g. Tab that inserts a Tab character, or Enter).
if (command.isTextInsertion() || commandName.isEmpty())
return false;
if (command.execute(evt)) {
if (m_webView->client())
m_webView->client()->didExecuteCommand(WebString(commandName));
return true;
}
return false;
}
if (command.execute(evt)) {
if (m_webView->client())
m_webView->client()->didExecuteCommand(WebString(commandName));
return true;
}
// Here we need to filter key events.
// On Gtk/Linux, it emits key events with ASCII text and ctrl on for ctrl-<x>.
// In Webkit, EditorClient::handleKeyboardEvent in
// WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp drop such events.
// On Mac, it emits key events with ASCII text and meta on for Command-<x>.
// These key events should not emit text insert event.
// Alt key would be used to insert alternative character, so we should let
// through. Also note that Ctrl-Alt combination equals to AltGr key which is
// also used to insert alternative character.
// http://code.google.com/p/chromium/issues/detail?id=10846
// Windows sets both alt and meta are on when "Alt" key pressed.
// http://code.google.com/p/chromium/issues/detail?id=2215
// Also, we should not rely on an assumption that keyboards don't
// send ASCII characters when pressing a control key on Windows,
// which may be configured to do it so by user.
// See also http://en.wikipedia.org/wiki/Keyboard_Layout
// FIXME(ukai): investigate more detail for various keyboard layout.
if (evt->keyEvent()->text().length() == 1) {
UChar ch = evt->keyEvent()->text()[0U];
// Don't insert null or control characters as they can result in
// unexpected behaviour
if (ch < ' ')
return false;
#if !OS(WINDOWS)
// Don't insert ASCII character if ctrl w/o alt or meta is on.
// On Mac, we should ignore events when meta is on (Command-<x>).
if (ch < 0x80) {
if (evt->keyEvent()->ctrlKey() && !evt->keyEvent()->altKey())
return false;
#if OS(DARWIN)
if (evt->keyEvent()->metaKey())
return false;
#endif
}
#endif
}
if (!frame->editor()->canEdit())
return false;
return frame->editor()->insertText(evt->keyEvent()->text(), evt);
}
示例8: switch
void
FormManager::SwitchToForm(RequestId requestId, Osp::Base::Collection::IList* pArgs)
{
Frame* pFrame = Application::GetInstance()->GetAppFrame()->GetFrame();
BaseForm* pExeForm = null;
switch (requestId)
{
case REQUEST_MAINFORM:
{
if (__pMainForm == null)
{
__pMainForm = new MainForm();
__pMainForm->Initialize();
pFrame->AddControl(*__pMainForm);
}
pFrame->SetCurrentForm(*__pMainForm);
__pMainForm->Draw();
__pMainForm->Show();
if (__pPreviousForm != null)
{
if (__pPreviousForm != __pMainForm)
pFrame->RemoveControl(*__pPreviousForm);
}
__pPreviousForm = __pMainForm;
return;
}
break;
case REQUEST_FACEBOOKLOGINFORM:
pExeForm = new LoginForm();
break;
case REQUEST_USERPROFILEFORM:
pExeForm = new UserProfileForm();
break;
case REQUEST_FRIENDSFORM:
pExeForm = new FriendsForm();
break;
default:
return;
break;
}
pExeForm->Initialize();
pFrame->AddControl(*pExeForm);
pFrame->SetCurrentForm(*pExeForm);
pExeForm->Draw();
pExeForm->Show();
if (__pPreviousForm != null)
{
if (__pPreviousForm != __pMainForm)
pFrame->RemoveControl(*__pPreviousForm);
}
__pPreviousForm = pExeForm;
return;
}
示例9: main
int main (int argc, char **argv)
{
Config::init("cluster.cfg");
loginit();
Encoder *temp=CodecFactory::getStreamEncoder(1);
av_register_all ();
avcodec_init ();
avcodec_register_all ();
char *filename = argv[1];
File file (filename);
FormatInputStream fois (&file);
AVFormatContext *ic = fois.getFormatContext ();
fois.dumpFormat ();
PacketInputStream pis (fois);
int got_picture;
int insize = 0, outsize = 0;
/*
Encoder enc2 (CODEC_ID_H264);
enc2.setWidth (format.width);
enc2.setHeight (format.height);
enc2.setTimeBase ((AVRational) {1, 25});
enc2.setBitRate (4000000);
enc2.setGopSize (250);
enc2.setPixelFormat (PIX_FMT_YUV420P);
enc2.open ();
*/
Decoder * dec=new Decoder (ic->streams[0]->codec->codec_id);
dec->setWidth (ic->streams[0]->codec->width);
dec->setHeight (ic->streams[0]->codec->height);
dec->setTimeBase ((AVRational) {1, 25});
dec->setPixelFormat (ic->streams[0]->codec->pix_fmt);
// dec.setGopSize(0);
dec->open ();
FrameFormat informat;
informat.pixel_format = (PixelFormat)dec->getPixelFormat();//_pix_fmt;
informat.height = ic->streams[0]->codec->height;
informat.width = ic->streams[0]->codec->width;
FrameFormat format;
format.pixel_format = PIX_FMT_YUV420P;
format.height = ic->streams[0]->codec->height;
format.width = ic->streams[0]->codec->width;
FrameConverter converter (informat,format);
// cerr << "Decoder"<<endl;
// Encoder enc(CODEC_ID_MPEG2VIDEO);
// enc.max_b_frames=3;
Encoder * enc=new Encoder(CODEC_ID_MSMPEG4V3);
// Encoder * enc=new Encoder(CODEC_ID_H264);
// Encoder enc (CODEC_ID_H264);
enc->setWidth (format.width);
enc->setHeight (format.height);
enc->setTimeBase ((AVRational) {1, 25});
enc->setBitRate (4000000);
enc->setGopSize (25);
enc->setPixelFormat (PIX_FMT_YUV420P);
// enc.setFlag(CODEC_FLAG_PASS1);
enc->open ();
File fout (argv[2]);
FormatOutputStream ffos (&fout);
PacketOutputStream pos (&ffos);
pos.setEncoder (*enc, 0);
pos.init ();
// fois.seek(0,44289);//38978
// FILE *logfile;
// logfile = fopen ("stats.out", "w");
int a=0;
bool firstSeek=false;
for (int i = 0;i < 1000; i++) {
Packet p;
// av_init_packet (p.packet);
if(pis.readPacket (p)<0)break;
if (p.packet->stream_index != 0)
//.........这里部分代码省略.........
示例10: logCanCacheFrameDecision
static bool logCanCacheFrameDecision(Frame* frame, int indentLevel)
{
// Only bother logging for frames that have actually loaded and have content.
if (frame->loader()->stateMachine()->creatingInitialEmptyDocument())
return false;
KURL currentURL = frame->loader()->documentLoader() ? frame->loader()->documentLoader()->url() : KURL();
if (currentURL.isEmpty())
return false;
PCLOG("+---");
KURL newURL = frame->loader()->provisionalDocumentLoader() ? frame->loader()->provisionalDocumentLoader()->url() : KURL();
if (!newURL.isEmpty())
PCLOG(" Determining if frame can be cached navigating from (", currentURL.string(), ") to (", newURL.string(), "):");
else
PCLOG(" Determining if subframe with URL (", currentURL.string(), ") can be cached:");
bool cannotCache = false;
do {
if (!frame->loader()->documentLoader()) {
PCLOG(" -There is no DocumentLoader object");
cannotCache = true;
break;
}
if (!frame->loader()->documentLoader()->mainDocumentError().isNull()) {
PCLOG(" -Main document has an error");
if (frame->loader()->documentLoader()->mainDocumentError().isCancellation() && frame->loader()->documentLoader()->subresourceLoadersArePageCacheAcceptable())
PCLOG(" -But, it was a cancellation and all loaders during the cancel were loading images.");
else
cannotCache = true;
}
if (frame->loader()->subframeLoader()->containsPlugins()) {
PCLOG(" -Frame contains plugins");
// iOS allows pages with plug-ins to enter the page cache.
PCLOG(" -But, iOS can handle plugins.");
}
if (frame->document()->url().protocolIs("https")) {
PCLOG(" -Frame is HTTPS");
cannotCache = true;
}
if (frame->domWindow() && frame->domWindow()->hasEventListeners(eventNames().unloadEvent)) {
PCLOG(" -Frame has an unload event listener");
// iOS allows pages with unload event listeners to enter the page cache.
PCLOG(" -BUT iOS allows these pages to be cached.");
}
#if ENABLE(DATABASE)
if (frame->document()->hasOpenDatabases()) {
PCLOG(" -Frame has open database handles");
cannotCache = true;
}
#endif
#if ENABLE(SHARED_WORKERS)
if (SharedWorkerRepository::hasSharedWorkers(frame->document())) {
PCLOG(" -Frame has associated SharedWorkers");
cannotCache = true;
}
#endif
if (frame->document()->usingGeolocation()) {
PCLOG(" -Frame uses Geolocation");
// iOS allows pages geolocation to enter the page cache.
PCLOG(" -BUT iOS allows these pages to be cached.");
}
if (!frame->loader()->history()->currentItem()) {
PCLOG(" -No current history item");
cannotCache = true;
}
if (frame->loader()->quickRedirectComing()) {
PCLOG(" -Quick redirect is coming");
cannotCache = true;
}
if (frame->loader()->documentLoader()->isLoadingInAPISense()) {
PCLOG(" -DocumentLoader is still loading in API sense");
cannotCache = true;
}
if (frame->loader()->documentLoader()->isStopping()) {
PCLOG(" -DocumentLoader is in the middle of stopping");
cannotCache = true;
}
if (!frame->document()->canSuspendActiveDOMObjects()) {
PCLOG(" -The document cannot suspect its active DOM Objects");
cannotCache = true;
}
#if ENABLE(OFFLINE_WEB_APPLICATIONS)
if (!frame->loader()->documentLoader()->applicationCacheHost()->canCacheInPageCache()) {
PCLOG(" -The DocumentLoader uses an application cache");
cannotCache = true;
}
#endif
if (!frame->loader()->client()->canCachePage()) {
PCLOG(" -The client says this frame cannot be cached");
cannotCache = true;
}
} while (false);
for (Frame* child = frame->tree()->firstChild(); child; child = child->tree()->nextSibling())
if (!logCanCacheFrameDecision(child, indentLevel + 1))
cannotCache = true;
PCLOG(cannotCache ? " Frame CANNOT be cached" : " Frame CAN be cached");
PCLOG("+---");
//.........这里部分代码省略.........
示例11: ASSERT
void CachedFrameBase::restore()
{
ASSERT(m_document->view() == m_view);
Frame* frame = m_view->frame();
m_cachedFrameScriptData->restore(frame);
#if ENABLE(SVG)
if (m_document->svgExtensions())
m_document->accessSVGExtensions()->unpauseAnimations();
#endif
frame->animation()->resumeAnimationsForDocument(m_document.get());
frame->eventHandler()->setMousePressNode(m_mousePressNode.get());
m_document->resumeActiveDOMObjects();
m_document->resumeScriptedAnimationControllerCallbacks();
// It is necessary to update any platform script objects after restoring the
// cached page.
frame->script()->updatePlatformScriptObjects();
frame->loader()->client()->didRestoreFromPageCache();
// Reconstruct the FrameTree
for (unsigned i = 0; i < m_childFrames.size(); ++i)
frame->tree()->appendChild(m_childFrames[i]->view()->frame());
// Open the child CachedFrames in their respective FrameLoaders.
for (unsigned i = 0; i < m_childFrames.size(); ++i)
m_childFrames[i]->open();
m_document->enqueuePageshowEvent(PageshowEventPersisted);
HistoryItem* historyItem = frame->loader()->history()->currentItem();
m_document->enqueuePopstateEvent(historyItem && historyItem->stateObject() ? historyItem->stateObject() : SerializedScriptValue::nullValue());
#if ENABLE(TOUCH_EVENTS)
if (m_document->hasListenerType(Document::TOUCH_LISTENER))
m_document->page()->chrome()->client()->needTouchEvents(true);
#endif
// CAPPFIX_WEB_NAMEDITEM_HISTORY_NAV : recover NamedItem for history navigation in case of HTMLDocument.
Document* document = m_document.get();
if (document && document->isHTMLDocument() == true) {
HTMLDocument* htmldocument = static_cast<HTMLDocument*>(document);
RefPtr<HTMLCollection> items = document->all();;
Node* item;
for (unsigned i = 0; i < items->length(); i++) {
item = items->item(i);
if (!item->isElementNode())
continue;
Element* e = static_cast<Element*>(item);
if (e->hasLocalName(HTMLNames::imgTag) || e->hasLocalName(HTMLNames::formTag) || e->hasLocalName(HTMLNames::objectTag)
|| e->hasLocalName(HTMLNames::embedTag) || e->hasLocalName(HTMLNames::appletTag)) {
const AtomicString &name = e->getAttribute(HTMLNames::nameAttr);
if (name != nullAtom)
htmldocument->addNamedItem(name);
}
}
}
// CAPPFIX_WEB_NAMEDITEM_HISTORY_NAV_END
m_document->documentDidBecomeActive();
}
示例12: impl
JSValue JSDOMWindow::showModalDialog(ExecState* exec, const ArgList& args)
{
Frame* frame = impl()->frame();
if (!frame)
return jsUndefined();
Frame* lexicalFrame = toLexicalFrame(exec);
if (!lexicalFrame)
return jsUndefined();
Frame* dynamicFrame = toDynamicFrame(exec);
if (!dynamicFrame)
return jsUndefined();
if (!DOMWindow::canShowModalDialogNow(frame) || !DOMWindow::allowPopUp(dynamicFrame))
return jsUndefined();
String url = valueToStringWithUndefinedOrNullCheck(exec, args.at(0));
JSValue dialogArgs = args.at(1);
String featureArgs = valueToStringWithUndefinedOrNullCheck(exec, args.at(2));
HashMap<String, String> features;
DOMWindow::parseModalDialogFeatures(featureArgs, features);
const bool trusted = false;
// The following features from Microsoft's documentation are not implemented:
// - default font settings
// - width, height, left, and top specified in units other than "px"
// - edge (sunken or raised, default is raised)
// - dialogHide: trusted && boolFeature(features, "dialoghide"), makes dialog hide when you print
// - help: boolFeature(features, "help", true), makes help icon appear in dialog (what does it do on Windows?)
// - unadorned: trusted && boolFeature(features, "unadorned");
FloatRect screenRect = screenAvailableRect(frame->view());
WindowFeatures wargs;
wargs.width = WindowFeatures::floatFeature(features, "dialogwidth", 100, screenRect.width(), 620); // default here came from frame size of dialog in MacIE
wargs.widthSet = true;
wargs.height = WindowFeatures::floatFeature(features, "dialogheight", 100, screenRect.height(), 450); // default here came from frame size of dialog in MacIE
wargs.heightSet = true;
wargs.x = WindowFeatures::floatFeature(features, "dialogleft", screenRect.x(), screenRect.right() - wargs.width, -1);
wargs.xSet = wargs.x > 0;
wargs.y = WindowFeatures::floatFeature(features, "dialogtop", screenRect.y(), screenRect.bottom() - wargs.height, -1);
wargs.ySet = wargs.y > 0;
if (WindowFeatures::boolFeature(features, "center", true)) {
if (!wargs.xSet) {
wargs.x = screenRect.x() + (screenRect.width() - wargs.width) / 2;
wargs.xSet = true;
}
if (!wargs.ySet) {
wargs.y = screenRect.y() + (screenRect.height() - wargs.height) / 2;
wargs.ySet = true;
}
}
wargs.dialog = true;
wargs.resizable = WindowFeatures::boolFeature(features, "resizable");
wargs.scrollbarsVisible = WindowFeatures::boolFeature(features, "scroll", true);
wargs.statusBarVisible = WindowFeatures::boolFeature(features, "status", !trusted);
wargs.menuBarVisible = false;
wargs.toolBarVisible = false;
wargs.locationBarVisible = false;
wargs.fullscreen = false;
Frame* dialogFrame = createWindow(exec, lexicalFrame, dynamicFrame, frame, url, "", wargs, dialogArgs);
if (!dialogFrame)
return jsUndefined();
JSDOMWindow* dialogWindow = toJSDOMWindow(dialogFrame);
dialogFrame->page()->chrome()->runModal();
return dialogWindow->getDirect(Identifier(exec, "returnValue"));
}
示例13: switch
JSValue* JSSVGViewElement::getValueProperty(ExecState* exec, int token) const
{
switch (token) {
case ViewTargetAttrNum: {
SVGViewElement* imp = static_cast<SVGViewElement*>(impl());
return toJS(exec, WTF::getPtr(imp->viewTarget()));
}
case ExternalResourcesRequiredAttrNum: {
SVGViewElement* imp = static_cast<SVGViewElement*>(impl());
ASSERT(exec && exec->dynamicInterpreter());
RefPtr<SVGAnimatedBoolean> obj = imp->externalResourcesRequiredAnimated();
Frame* activeFrame = static_cast<ScriptInterpreter*>(exec->dynamicInterpreter())->frame();
if (activeFrame) {
SVGDocumentExtensions* extensions = (activeFrame->document() ? activeFrame->document()->accessSVGExtensions() : 0);
if (extensions) {
if (extensions->hasGenericContext<SVGAnimatedBoolean>(obj.get()))
ASSERT(extensions->genericContext<SVGAnimatedBoolean>(obj.get()) == imp);
else
extensions->setGenericContext<SVGAnimatedBoolean>(obj.get(), imp);
}
}
return toJS(exec, obj.get());
}
case ViewBoxAttrNum: {
SVGViewElement* imp = static_cast<SVGViewElement*>(impl());
ASSERT(exec && exec->dynamicInterpreter());
RefPtr<SVGAnimatedRect> obj = imp->viewBoxAnimated();
Frame* activeFrame = static_cast<ScriptInterpreter*>(exec->dynamicInterpreter())->frame();
if (activeFrame) {
SVGDocumentExtensions* extensions = (activeFrame->document() ? activeFrame->document()->accessSVGExtensions() : 0);
if (extensions) {
if (extensions->hasGenericContext<SVGAnimatedRect>(obj.get()))
ASSERT(extensions->genericContext<SVGAnimatedRect>(obj.get()) == imp);
else
extensions->setGenericContext<SVGAnimatedRect>(obj.get(), imp);
}
}
return toJS(exec, obj.get());
}
case PreserveAspectRatioAttrNum: {
SVGViewElement* imp = static_cast<SVGViewElement*>(impl());
ASSERT(exec && exec->dynamicInterpreter());
RefPtr<SVGAnimatedPreserveAspectRatio> obj = imp->preserveAspectRatioAnimated();
Frame* activeFrame = static_cast<ScriptInterpreter*>(exec->dynamicInterpreter())->frame();
if (activeFrame) {
SVGDocumentExtensions* extensions = (activeFrame->document() ? activeFrame->document()->accessSVGExtensions() : 0);
if (extensions) {
if (extensions->hasGenericContext<SVGAnimatedPreserveAspectRatio>(obj.get()))
ASSERT(extensions->genericContext<SVGAnimatedPreserveAspectRatio>(obj.get()) == imp);
else
extensions->setGenericContext<SVGAnimatedPreserveAspectRatio>(obj.get(), imp);
}
}
return toJS(exec, obj.get());
}
case ZoomAndPanAttrNum: {
SVGViewElement* imp = static_cast<SVGViewElement*>(impl());
return jsNumber(imp->zoomAndPan());
}
}
return 0;
}
示例14: INC_STATS
v8::Handle<v8::Value> V8AudioContext::constructorCallback(const v8::Arguments& args)
{
INC_STATS("DOM.AudioContext.Contructor");
if (!args.IsConstructCall())
return throwTypeError("AudioContext constructor cannot be called as a function.", args.GetIsolate());
if (ConstructorMode::current() == ConstructorMode::WrapExistingObject)
return args.Holder();
Frame* frame = currentFrame(BindingState::instance());
if (!frame)
return throwError(ReferenceError, "AudioContext constructor associated frame is unavailable", args.GetIsolate());
Document* document = frame->document();
if (!document)
return throwError(ReferenceError, "AudioContext constructor associated document is unavailable", args.GetIsolate());
RefPtr<AudioContext> audioContext;
if (!args.Length()) {
// Constructor for default AudioContext which talks to audio hardware.
ExceptionCode ec = 0;
audioContext = AudioContext::create(document, ec);
if (ec)
return setDOMException(ec, args.GetIsolate());
if (!audioContext.get())
return throwError(SyntaxError, "audio resources unavailable for AudioContext construction", args.GetIsolate());
} else {
// Constructor for offline (render-target) AudioContext which renders into an AudioBuffer.
// new AudioContext(in unsigned long numberOfChannels, in unsigned long numberOfFrames, in float sampleRate);
if (args.Length() < 3)
return throwNotEnoughArgumentsError(args.GetIsolate());
bool ok = false;
int32_t numberOfChannels = toInt32(args[0], ok);
if (!ok || numberOfChannels <= 0 || numberOfChannels > 10)
return throwError(SyntaxError, "Invalid number of channels", args.GetIsolate());
int32_t numberOfFrames = toInt32(args[1], ok);
if (!ok || numberOfFrames <= 0)
return throwError(SyntaxError, "Invalid number of frames", args.GetIsolate());
float sampleRate = toFloat(args[2]);
if (sampleRate <= 0)
return throwError(SyntaxError, "Invalid sample rate", args.GetIsolate());
ExceptionCode ec = 0;
audioContext = AudioContext::createOfflineContext(document, numberOfChannels, numberOfFrames, sampleRate, ec);
if (ec)
return setDOMException(ec, args.GetIsolate());
}
if (!audioContext.get())
return throwError(SyntaxError, "Error creating AudioContext", args.GetIsolate());
// Transform the holder into a wrapper object for the audio context.
V8DOMWrapper::setDOMWrapper(args.Holder(), &info, audioContext.get());
audioContext->ref();
return args.Holder();
}
示例15:
bool Dyninst::Stackwalker::frame_addr_cmp(const Frame &a, const Frame &b)
{
return a.getRA() < b.getRA();
}